Answers an inbound call that has routed to the agent's number.
The platform-native identifier of the inbound call to answer (from the inbound webhook).
A promise resolving once the call is answered and the media path is live.
OptionaldetachReleases MJ's local resources for the call WITHOUT ending it at the carrier. Used after a transfer or a carrier-side goodbye, when the carrier (not MJ) now owns the rest of the call and a hang-up would cut off the transferred party or the announcement.
Optional: when absent the base simply does not hang up a handed-off call.
The platform-native identifier of the call being detached from.
Places an outbound call FROM the agent's number TO a destination and brings the bot leg online.
The destination phone number to dial (E.164 recommended).
The agent's caller-id / DID the call originates from.
Optionalargs: Record<string, unknown>Provider-specific dial parameters (resolved credential refs, region, recording flags, …).
The platform-native call identifier (e.g. Twilio Call SID) for the placed call.
OptionalflushDiscards any outbound audio the provider has QUEUED but not yet played — the agent's not-yet-heard voice — so the agent goes silent immediately on barge-in. Carriers that buffer deeply (Vonage queues up to ~60s) MUST implement this or the agent keeps talking over itself after being interrupted.
Optional: a provider whose media path plays in near-real-time with no client-side queue has nothing to flush and omits it (the base treats an absent method as a no-op).
Hangs up the call and releases all platform resources.
The platform-native identifier of the call to end.
A promise resolving once the call has been torn down.
Registers a callback for inbound raw audio frames from the call — what the agent hears. There is a single remote party, so frames need no per-speaker label (the bridge stamps the caller's id). "Latest handler wins."
Invoked with each inbound PCM audio frame.
Registers a callback fired when the call ends — the remote party hangs up, the carrier drops it, or the provider tears it down. "Latest handler wins."
Invoked when the call has ended.
Registers a callback for inbound DTMF tones the remote party presses. "Latest handler wins."
Invoked with each received DTMF digit string.
OptionalplayPlays a short spoken message on the call at the carrier and then ends it — the "we are having technical difficulties" goodbye used when the model session is lost and the call cannot continue.
Optional: a carrier with no server-side text-to-speech omits it and the base falls back to a plain hang-up.
The platform-native identifier of the call.
The text to speak before hanging up.
Sends one raw PCM audio frame as the agent's outbound voice into the call (the provider's media- stream / virtual-mic path).
The PCM audio bytes to send.
Sends DTMF touch-tones on the call (the agent dialing into an IVR, entering a code, …).
The DTMF digit string to send (e.g. '1234#').
A promise resolving once the tones have been sent.
Transfers the call to another party (a number or platform endpoint).
The platform-native identifier of the call to transfer.
The transfer destination (a phone number or platform endpoint identifier).
A promise resolving once the transfer has been initiated.
The injectable telephony call SDK seam — the minimal per-provider call API a BaseTelephonyBridge drives. Declared as an interface so telephony drivers build and unit-test against an in-memory fake with no network and no real CPaaS client (the same testability pattern the meeting SDK seams use:
IZoomMeetingSdk,IDiscordVoiceSdk, …).The base bridge owns the lifecycle and media wiring; this seam exposes only the irreducible call primitives each provider (Twilio, Vonage, RingCentral) binds to its own client. None of the provider SDK's types leak through this interface.
All
on*registrations are "latest handler wins" (one bridge instance per call).