ProtectedfeaturesThe capability flags for the provider this bridge instance serves. Populated from the RealtimeBridgeContext at BaseRealtimeBridge.Connect time (and may be set by the engine immediately after construction). Drives BaseRealtimeBridge.RequireFeature.
ProtectedproviderThe provider's display name for this bridge instance, used in capability-error messages. Populated from the RealtimeBridgeContext; falls back to the driver class name.
The bot's participant id in the joined meeting (or null before Connect).
The provider's supported-feature flags for this bridge instance.
Read-only accessor over the internally-held BaseRealtimeBridge.features. The engine consults this (and the underlying provider metadata) to decide which optional methods are safe to call; a driver consults it via BaseRealtimeBridge.RequireFeature.
ProtectedapplyCaptures the connection context onto the instance so BaseRealtimeBridge.Features, BaseRealtimeBridge.RequireFeature, and capability-error messages have the provider's flags and name. A concrete BaseRealtimeBridge.Connect should call this first.
The bridge context handed to Connect.
Joins the Teams meeting and brings the bot online. Captures the capability context, builds the SDK from the sdkFactory, wires the inbound raw-audio path and meeting-ended callback, joins, and (when the provider diarizes) constructs + seeds the Meeting Controls event source.
The bridge context (features, provider name, the join URL as Address, config).
The bot participant + call (external connection) identifiers, persisted by the engine.
Leaves the Teams meeting and releases all SDK resources. Tolerant of teardown errors.
Why the disconnect happened (Teams teardown is uniform; the bot simply leaves).
Flushes any outbound media the driver has queued for the endpoint — the agent's not-yet-played voice. The engine calls this on a true barge-in (the user interrupts the agent) so the agent stops talking immediately instead of draining already-buffered audio after the model was cut off.
No-op by default (NOT capability-gated): a driver with no client-side outbound buffer simply has nothing to flush, so calling this is always safe. Drivers that buffer outbound audio override it.
Returns the Teams Meeting Controls event source for this session (roster · hand-raise · speaking ·
mute), or null when diarization is off (no roster to facilitate). The engine wires the Meeting
Controls channel from this.
Returns the current Teams participant roster (gated by SpeakerDiarization). Re-asserts the flag
(defense-in-depth) so even an engine-bypassing caller cannot pull a roster a disabled provider
forbids.
The current participants.
ProtectednotBuilds the standard BridgeCapabilityNotSupportedError for an un-overridden virtual method or a failed feature requirement, stamped with this bridge's provider name.
The feature / method name to report.
The error to throw or reject with.
Registers the inbound-media handler. The driver forwards each raw per-participant audio frame
(with its speaker label) to this handler; the engine routes it to IRealtimeSession.SendInput.
Invoked with each inbound media frame.
Registers a roster-change handler (gated by SpeakerDiarization). The driver fires it from the
SDK's participant join/leave stream with the full current roster.
Invoked with the updated participant list on each change.
Posts a message to the Teams meeting chat. Exposed for the channel plane / turn-taking hybrid mode (the social-cost-free "raise hand"). Best-effort — a chat failure is logged, never fatal.
The chat message to post.
ProtectedRequireDefense-in-depth guard: asserts a SupportedFeatures flag is enabled before the driver
performs a capability-gated action, throwing BridgeCapabilityNotSupportedError if it
is false/omitted. An overriding driver method should call this at its top so that even a
direct (engine-bypassing) caller cannot run an action the metadata says is off.
The IBridgeProviderFeatures flag to require.
Sends DTMF tones on a telephony bridge.
Capability-gated by SupportedFeatures.DTMF. Throws unless overridden by a telephony driver.
The DTMF digit string to send (e.g. '1234#').
A promise that resolves once the tones have been sent.
Sends an outbound media frame into the meeting. Audio is fed to the SDK's outbound audio-socket path; video/screen frames are gated by the directional capability flags (the transport carries them, and the SDK send is a deployment-time binding TODO — today the models emit audio).
The outbound track the frame targets.
The media frame to send.
Sets the TeamsMeetingSdkFactory this driver uses to construct its SDK seam at connect —
the creation seam (mirroring Gemini's overridable connectLiveSession). Production binds the
real Teams ACS calling-bot adapter here; tests inject a FakeTeamsSdk.
The factory that builds the ITeamsMeetingSdk for a session.
Transfers the call to another party on a telephony bridge.
Capability-gated by SupportedFeatures.CallTransfer. Throws unless overridden.
The transfer target (a phone number or platform endpoint identifier).
A promise that resolves once the transfer has been initiated.
Realtime Bridge driver for Microsoft Teams meetings.
Construct the driver with the default constructor (the engine's
ClassFactorypath) — it lazily builds the Teams SDK from the sdkFactory at Connect time. Tests inject aFakeTeamsSdkby overriding the factory via SetSdkFactory (the creation seam) before connecting.Registered via
@RegisterClass(BaseRealtimeBridge, 'TeamsBridge').