Interface WarmTransferTaskOptions

interface WarmTransferTaskOptions {
    abortSignal?: AbortSignal;
    allowInterruptions?: boolean;
    callerHangupInstruction?: null | string;
    callerHangupSpeech?: WarmTransferSpeech;
    chatCtx?: ChatContext;
    dtmf?: null | string;
    greetingSpeech?: WarmTransferSpeech;
    holdAudio?: null | AudioSourceType | voice.AudioConfig | voice.AudioConfig[];
    instructions?: string | InstructionParts;
    llm?: null | llm.LLM | llm.RealtimeModel | LLMModels;
    ringingTimeout?: null | number;
    roomName?: string;
    sipCallTo?: string;
    sipConnection?: SIPOutboundConfig;
    sipHeaders?: Record<string, string>;
    sipNumber?: string;
    sipTrunkId?: null | string;
    stt?: null | stt.STT | STTModelString;
    tools?: readonly ToolContextEntry[];
    tts?: null | tts.TTS | TTSModelString;
    turnDetection?: null | TurnDetectionMode;
    vad?: null | VAD;
}

Properties

abortSignal?: AbortSignal

Signal for application cancellation, such as a consult deadline or application shutdown.

Do not abort this signal when the caller disconnects. The task handles caller disconnects so it can play callerHangupInstruction before it ends an answered consultation.

A successful participant move wins if it completes after the signal aborts. The task stops waiting for a pending SIP request but cannot cancel it.

allowInterruptions?: boolean
callerHangupInstruction?: null | string

Instructions used to generate the reply spoken to the human agent before their call is ended when the caller hangs up mid-transfer (after the human agent answered but before the merge). Falls back to a built-in instruction when not provided.

Deprecated

Use callerHangupSpeech. Return session.generateReply() from its callback to keep generated speech.

callerHangupSpeech?: WarmTransferSpeech

Speech played before ending the human agent's call when the caller hangs up after the human agent answers. A string is spoken with session.say() and requires a TTS model. For sessions without TTS, use a callback that returns session.say(text, { audio }) with prerecorded audio. The callback runs only after the caller hangs up, and the task awaits its returned handle. This option takes precedence over callerHangupInstruction.

chatCtx?: ChatContext
dtmf?: null | string

DTMF tones to send once the human agent's call is answered, e.g. to dial an extension or navigate an IVR menu ('1234#'). Insert w characters to pause ~0.5s each before/between digits ('wwww1234#' waits ~2s, useful when the destination plays a greeting before accepting input).

greetingSpeech?: WarmTransferSpeech

Speech started after the outbound SIP call is answered. A string is spoken with session.say(). A callback runs once after answer with the consultation session and must return a speech handle. Omit this option to let the destination speak first. The answer signal does not distinguish a person from voicemail or an IVR, so an enabled greeting can overlap automated audio.

Audio played to the caller while they are on hold during the transfer.

instructions?: string | InstructionParts

Instructions for the human agent briefing. Pass a full string to replace the built-in prompt entirely, or InstructionParts to override individual sections (e.g. persona) while keeping the built-in template and auto-formatted conversation history.

llm?: null | llm.LLM | llm.RealtimeModel | LLMModels
ringingTimeout?: null | number

How long to wait, in milliseconds, for the human agent to answer before giving up. The underlying SIP API only supports whole-second granularity, so the value is rounded to the nearest second.

roomName?: string

Name of the room used to dial and brief the human agent. Defaults to ${callerRoom.name}-human-agent.

Set this to control the briefing room's configuration: pre-create a room under this name (e.g. with RoomServiceClient.createRoom and an egress request to record the transfer leg) before running the task, and the transfer agent joins the pre-configured room instead of implicitly creating one with project defaults.

The room is deleted when the transfer completes, fails, or is cancelled (the same lifecycle as the default room), which also ends any egress attached to it. Must differ from the caller room's name.

sipCallTo?: string

The phone number or SIP URI to dial for the human agent.

sipConnection?: SIPOutboundConfig

Low-level SIP connection config for originating calls through a custom SIP domain.

sipHeaders?: Record<string, string>

Headers to include on the outbound SIP call.

sipNumber?: string

Optional SIP From number. Falls back to LIVEKIT_SIP_NUMBER.

sipTrunkId?: null | string

ID of a pre-configured LiveKit SIP outbound trunk used to originate the call. Falls back to the LIVEKIT_SIP_OUTBOUND_TRUNK environment variable when not provided.

stt?: null | stt.STT | STTModelString
tools?: readonly ToolContextEntry[]
tts?: null | tts.TTS | TTSModelString
turnDetection?: null | TurnDetectionMode
vad?: null | VAD