dial

View as MarkdownOpen in Claude
dial(destination, options?): Promise<Call>

Places an outbound call to the given destination.

Waits for authentication before dialing. Media options are merged from saved preferences, destination query parameters (e.g. ?channel=video), and the provided options (highest priority).

Returns a Call in 'ringing' state. Subscribe to Call.status$ to track progression through 'connected''disconnected'.

Local media acquisition is deliberately unbounded: a permission prompt or a device picker is human time, and an unanswered prompt leaves this promise pending indefinitely. Apply your own bound if your UI needs one. The 12-second signaling budget starts only once acquisition settles, and must cover ICE gathering and the invite RPC.

If the invite is refused because the session token went stale — a refresh timer throttled by a backgrounded tab, for instance — the SDK re-mints the credential, reauthenticates the live session, and retries the dial once before giving up.

Parameters

destination
string | AddressRequired

Address URI string (e.g. '/public/my-room') or Address instance.

options
DialOptions

Media and dial options (audio/video, device constraints). Overrides defaults. See DialOptions.

Returns

Promise<Call>

The created Call instance.

Throws

If authentication is not complete, or if call creation fails and the credential recovery retry also fails. A MediaAccessError is only fatal when the call cannot fall back to receive-only — see fallbackToReceiveOnly.

Examples

const call = await client.dial('/public/conference', {
audio: true,
video: true,
});
call.status$.subscribe(status => console.log('Call:', status));