Interface WarmTransferTaskOptions

interface WarmTransferTaskOptions {
    allowInterruptions?: boolean;
    callerHangupInstruction?: null | string;
    chatCtx?: ChatContext;
    dtmf?: null | string;
    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

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.

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).

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