Pure construction of the Graph POST /communications/calls request body for a join-by-URL,
application-hosted-media bot call. Prefers an explicitly-supplied ThreadId/TenantId (resolved upstream)
over what the URL encodes, then fills the rest from parseTeamsJoinUrl. Throws when neither an
explicit thread id nor a parseable join URL is available, so a malformed join fails loud at the seam.
Isolated from I/O so the request shape unit-tests directly and the live MJAPI wiring reuses it verbatim.
Pure construction of the Graph
POST /communications/callsrequest body for a join-by-URL, application-hosted-media bot call. Prefers an explicitly-suppliedThreadId/TenantId(resolved upstream) over what the URL encodes, then fills the rest from parseTeamsJoinUrl. Throws when neither an explicit thread id nor a parseable join URL is available, so a malformed join fails loud at the seam.Isolated from I/O so the request shape unit-tests directly and the live MJAPI wiring reuses it verbatim.