***

title: Call
slug: /reference/typescript/relay/call
description: Live call control object with media, AI, and event methods.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[relayclient]: /docs/server-sdks/reference/typescript/relay/client

[action]: /docs/server-sdks/reference/typescript/relay/actions

[events]: /docs/server-sdks/reference/typescript/relay/events#calling-events

[call-on]: /docs/server-sdks/reference/typescript/relay/call/on

[on]: /docs/server-sdks/reference/typescript/relay/call/on

[waitfor]: /docs/server-sdks/reference/typescript/relay/call/wait-for

[waitforended]: /docs/server-sdks/reference/typescript/relay/call/wait-for-ended

[answer]: /docs/server-sdks/reference/typescript/relay/call/answer

[hangup]: /docs/server-sdks/reference/typescript/relay/call/hangup

[pass]: /docs/server-sdks/reference/typescript/relay/call/pass

[disconnect]: /docs/server-sdks/reference/typescript/relay/call/disconnect

[transfer]: /docs/server-sdks/reference/typescript/relay/call/transfer

[connect]: /docs/server-sdks/reference/typescript/relay/call/connect

[hold]: /docs/server-sdks/reference/typescript/relay/call/hold

[unhold]: /docs/server-sdks/reference/typescript/relay/call/unhold

[play]: /docs/server-sdks/reference/typescript/relay/call/play

[record]: /docs/server-sdks/reference/typescript/relay/call/record

[playandcollect]: /docs/server-sdks/reference/typescript/relay/call/play-and-collect

[collect]: /docs/server-sdks/reference/typescript/relay/call/collect

[detect]: /docs/server-sdks/reference/typescript/relay/call/detect

[ai]: /docs/server-sdks/reference/typescript/relay/call/ai

[amazonbedrock]: /docs/server-sdks/reference/typescript/relay/call/amazon-bedrock

[aihold]: /docs/server-sdks/reference/typescript/relay/call/ai-hold

[aiunhold]: /docs/server-sdks/reference/typescript/relay/call/ai-unhold

[aimessage]: /docs/server-sdks/reference/typescript/relay/call/ai-message

[denoise]: /docs/server-sdks/reference/typescript/relay/call/denoise

[denoisestop]: /docs/server-sdks/reference/typescript/relay/call/denoise-stop

[senddigits]: /docs/server-sdks/reference/typescript/relay/call/send-digits

[echo]: /docs/server-sdks/reference/typescript/relay/call/echo

[binddigit]: /docs/server-sdks/reference/typescript/relay/call/bind-digit

[cleardigitbindings]: /docs/server-sdks/reference/typescript/relay/call/clear-digit-bindings

[userevent]: /docs/server-sdks/reference/typescript/relay/call/user-event

[refer]: /docs/server-sdks/reference/typescript/relay/call/refer

[tap]: /docs/server-sdks/reference/typescript/relay/call/tap

[stream]: /docs/server-sdks/reference/typescript/relay/call/stream

[sendfax]: /docs/server-sdks/reference/typescript/relay/call/send-fax

[receivefax]: /docs/server-sdks/reference/typescript/relay/call/receive-fax

[pay]: /docs/server-sdks/reference/typescript/relay/call/pay

[transcribe]: /docs/server-sdks/reference/typescript/relay/call/transcribe

[livetranscribe]: /docs/server-sdks/reference/typescript/relay/call/live-transcribe

[livetranslate]: /docs/server-sdks/reference/typescript/relay/call/live-translate

[joinconference]: /docs/server-sdks/reference/typescript/relay/call/join-conference

[leaveconference]: /docs/server-sdks/reference/typescript/relay/call/leave-conference

[joinroom]: /docs/server-sdks/reference/typescript/relay/call/join-room

[leaveroom]: /docs/server-sdks/reference/typescript/relay/call/leave-room

[queueenter]: /docs/server-sdks/reference/typescript/relay/call/queue-enter

[queueleave]: /docs/server-sdks/reference/typescript/relay/call/queue-leave

The `Call` class represents a live RELAY call and provides methods for
controlling every aspect of the call -- answering, playing audio, recording,
collecting input, bridging, conferencing, AI agents, and more. Call objects are
created automatically by [`RelayClient`][relayclient]
when an inbound call arrives or when you dial an outbound call.

All call control methods are async and communicate with SignalWire over
WebSocket using the RELAY JSON-RPC protocol. Methods that start long-running
operations (play, record, detect, etc.) return [`Action`][action]
objects that let you stop, pause, or wait for the operation to complete.

## **Properties**

<ParamField path="callId" type="string" toc={true}>
  Unique identifier for this call, assigned by SignalWire.
</ParamField>

<ParamField path="nodeId" type="string" toc={true}>
  Identifier of the RELAY node handling this call.
</ParamField>

<ParamField path="projectId" type="string" toc={true}>
  SignalWire project ID that owns this call.
</ParamField>

<ParamField path="context" type="string" toc={true}>
  The context (routing label) the call is associated with.
</ParamField>

<ParamField path="tag" type="string" toc={true}>
  Correlation tag for tracking related calls. Empty string if not set.
</ParamField>

<ParamField path="direction" type="string" toc={true}>
  Call direction. Valid values:

  * `"inbound"` -- incoming call
  * `"outbound"` -- outgoing call
</ParamField>

<ParamField path="device" type="Record<string, any>" toc={true}>
  Device information for the call endpoint. Contains `type` (e.g., `"phone"`) and
  `params` (e.g., `{"from_number": "+1...", "to_number": "+1..."}`).
</ParamField>

<ParamField path="state" type="string" toc={true}>
  Current call state. Valid values:

  * `"created"` -- call has been initiated
  * `"ringing"` -- ringing at the destination
  * `"answered"` -- call is active
  * `"ending"` -- hangup in progress
  * `"ended"` -- call has terminated
</ParamField>

<ParamField path="segmentId" type="string" toc={true}>
  Call segment identifier for tracking call legs.
</ParamField>

## **Methods**

<CardGroup cols={3}>
  <Card title="on" href="/docs/server-sdks/reference/typescript/relay/call/on">
    Register an event listener on a call.
  </Card>

  <Card title="waitFor" href="/docs/server-sdks/reference/typescript/relay/call/wait-for">
    Wait for a specific event on a call.
  </Card>

  <Card title="waitForEnded" href="/docs/server-sdks/reference/typescript/relay/call/wait-for-ended">
    Wait for a call to reach the ended state.
  </Card>

  <Card title="answer" href="/docs/server-sdks/reference/typescript/relay/call/answer">
    Answer an inbound RELAY call.
  </Card>

  <Card title="hangup" href="/docs/server-sdks/reference/typescript/relay/call/hangup">
    End a RELAY call.
  </Card>

  <Card title="pass" href="/docs/server-sdks/reference/typescript/relay/call/pass">
    Decline control of an inbound call and return it to routing.
  </Card>

  <Card title="disconnect" href="/docs/server-sdks/reference/typescript/relay/call/disconnect">
    Disconnect (unbridge) a connected call.
  </Card>

  <Card title="transfer" href="/docs/server-sdks/reference/typescript/relay/call/transfer">
    Transfer call control to another RELAY application or SWML script.
  </Card>

  <Card title="connect" href="/docs/server-sdks/reference/typescript/relay/call/connect">
    Bridge a call to one or more destinations.
  </Card>

  <Card title="hold" href="/docs/server-sdks/reference/typescript/relay/call/hold">
    Put a call on hold.
  </Card>

  <Card title="unhold" href="/docs/server-sdks/reference/typescript/relay/call/unhold">
    Resume a held call.
  </Card>

  <Card title="play" href="/docs/server-sdks/reference/typescript/relay/call/play">
    Play audio content on a call.
  </Card>

  <Card title="record" href="/docs/server-sdks/reference/typescript/relay/call/record">
    Record audio from a call.
  </Card>

  <Card title="playAndCollect" href="/docs/server-sdks/reference/typescript/relay/call/play-and-collect">
    Play audio and collect DTMF or speech input.
  </Card>

  <Card title="collect" href="/docs/server-sdks/reference/typescript/relay/call/collect">
    Collect DTMF or speech input without playing media.
  </Card>

  <Card title="detect" href="/docs/server-sdks/reference/typescript/relay/call/detect">
    Detect answering machines, fax tones, or digits on a call.
  </Card>

  <Card title="ai" href="/docs/server-sdks/reference/typescript/relay/call/ai">
    Start an AI agent session on a call.
  </Card>

  <Card title="amazonBedrock" href="/docs/server-sdks/reference/typescript/relay/call/amazon-bedrock">
    Connect a call to an Amazon Bedrock AI agent.
  </Card>

  <Card title="aiHold" href="/docs/server-sdks/reference/typescript/relay/call/ai-hold">
    Put an AI agent session on hold.
  </Card>

  <Card title="aiUnhold" href="/docs/server-sdks/reference/typescript/relay/call/ai-unhold">
    Resume an AI agent session from hold.
  </Card>

  <Card title="aiMessage" href="/docs/server-sdks/reference/typescript/relay/call/ai-message">
    Send a message to an active AI agent session.
  </Card>

  <Card title="denoise" href="/docs/server-sdks/reference/typescript/relay/call/denoise">
    Start noise reduction on a call.
  </Card>

  <Card title="denoiseStop" href="/docs/server-sdks/reference/typescript/relay/call/denoise-stop">
    Stop noise reduction on a call.
  </Card>

  <Card title="sendDigits" href="/docs/server-sdks/reference/typescript/relay/call/send-digits">
    Send DTMF digits on a call.
  </Card>

  <Card title="echo" href="/docs/server-sdks/reference/typescript/relay/call/echo">
    Echo call audio back to the caller for testing.
  </Card>

  <Card title="bindDigit" href="/docs/server-sdks/reference/typescript/relay/call/bind-digit">
    Bind a DTMF digit sequence to trigger a RELAY method.
  </Card>

  <Card title="clearDigitBindings" href="/docs/server-sdks/reference/typescript/relay/call/clear-digit-bindings">
    Clear DTMF digit bindings on a call.
  </Card>

  <Card title="userEvent" href="/docs/server-sdks/reference/typescript/relay/call/user-event">
    Send a custom user-defined event on a call.
  </Card>

  <Card title="refer" href="/docs/server-sdks/reference/typescript/relay/call/refer">
    Transfer a SIP call to an external endpoint via SIP REFER.
  </Card>

  <Card title="tap" href="/docs/server-sdks/reference/typescript/relay/call/tap">
    Intercept call media and stream it to an external destination.
  </Card>

  <Card title="stream" href="/docs/server-sdks/reference/typescript/relay/call/stream">
    Stream call audio to a WebSocket endpoint.
  </Card>

  <Card title="sendFax" href="/docs/server-sdks/reference/typescript/relay/call/send-fax">
    Send a fax document on a call.
  </Card>

  <Card title="receiveFax" href="/docs/server-sdks/reference/typescript/relay/call/receive-fax">
    Receive a fax on a call.
  </Card>

  <Card title="pay" href="/docs/server-sdks/reference/typescript/relay/call/pay">
    Collect payment information on a call.
  </Card>

  <Card title="transcribe" href="/docs/server-sdks/reference/typescript/relay/call/transcribe">
    Start transcribing call audio.
  </Card>

  <Card title="liveTranscribe" href="/docs/server-sdks/reference/typescript/relay/call/live-transcribe">
    Start or stop live transcription on a call.
  </Card>

  <Card title="liveTranslate" href="/docs/server-sdks/reference/typescript/relay/call/live-translate">
    Start or stop live translation on a call.
  </Card>

  <Card title="joinConference" href="/docs/server-sdks/reference/typescript/relay/call/join-conference">
    Join an ad-hoc audio conference.
  </Card>

  <Card title="leaveConference" href="/docs/server-sdks/reference/typescript/relay/call/leave-conference">
    Leave an audio conference.
  </Card>

  <Card title="joinRoom" href="/docs/server-sdks/reference/typescript/relay/call/join-room">
    Join a video/audio room.
  </Card>

  <Card title="leaveRoom" href="/docs/server-sdks/reference/typescript/relay/call/leave-room">
    Leave a video/audio room.
  </Card>

  <Card title="queueEnter" href="/docs/server-sdks/reference/typescript/relay/call/queue-enter">
    Place a call into a named queue.
  </Card>

  <Card title="queueLeave" href="/docs/server-sdks/reference/typescript/relay/call/queue-leave">
    Remove a call from a queue.
  </Card>
</CardGroup>

## **Example**

```typescript {10}
import { RelayClient } from '@signalwire/sdk';

const client = new RelayClient({
  project: process.env.SIGNALWIRE_PROJECT_ID!,
  token: process.env.SIGNALWIRE_TOKEN!,
  contexts: ['default']
});

client.onCall(async (call) => {
  await call.answer();

  // Register an event listener
  call.on('calling.call.play', (event) => console.log(`Play state: ${event.params.state}`));

  // Play a greeting
  const action = await call.play([{ type: 'tts', text: 'Hello from RELAY!' }]);
  await action.wait();

  // Wait for the call to end
  await call.waitForEnded();
  console.log(`Call ended: ${call.callId}`);
});

await client.run();
```

## **Events**

Events are emitted during the lifecycle of a call and its operations. Register
handlers using [`call.on()`][call-on] to react
to state changes, errors, and operation completions.

See the [Events][events] reference
for the full list of calling events, their parameters, and typed event classes.