Skip to main content
The bridge is configured entirely by environment variables (a .env file works with node --env-file=.env). Numeric variables fail loudly at startup if set to a non-number, so a typo stops the process with a clear message rather than silently misbehaving.

Required

Common options

There is no chat lane and no chat variable. The bridge serves the calling WebSocket, /healthz and /metrics - nothing else. Leave the identity’s Agent messages URL empty.

Vision (the look tool)

Give the agent a client tool named look to let it see the caller’s camera or screen-share. The bridge answers it two ways: Without a vision endpoint, look falls back to uploading the frame to ElevenLabs (multimodal), which is only allowed when Teams recording is active. For a fully custom vision hook in code, see the library API.

Region and residency

Advanced

HMAC_FRESHNESS_MS (default 60000), MAX_CONNECTIONS (64), MAX_CONNECTIONS_PER_IP (8), PRE_START_TIMEOUT_MS (10000), LOG_LEVEL (info), and LOG_TRANSCRIPTS (false; still gated on Teams recording being active). Full reference: configuration-reference.

TLS

TLS_CERT_PATH and TLS_KEY_PATH are optional and go together. Set both and the bridge serves wss:// natively; leave them unset and it serves plain WebSocket and must sit behind a TLS terminator (tunnel, ingress, or load balancer). StandIn requires wss:// in any real deployment, so a bridge on a tunnel needs no cert of its own.

Privacy

Caller audio and any vision descriptions transit ElevenLabs’ cloud and are retained per the agent’s settings. For deployments that must not retain caller data with a third party, enable the agent’s zero-retention setting and disclose the AI on the call via EL_FIRST_MESSAGE. See Governors and privacy.

Docs site

Installation

Source