The Call Transfer node (type: "transfer_call") transfers the call as soon as the flow reaches it. It supports the same destinations and transfer types as the Call Transfer function: cold (SIP INVITE or SIP REFER), warm and agentic warm. Needs keys Transfers need LiveKit SIP and a phone call.
Configure#
- Add a Call Transfer node.
- Instruction: what to say before transferring. New nodes start with the static sentence "Transferring your call now."
- Transfer to: Static number (E.164, SIP URI or
{{variable}}) or Dynamic (a prompt the LLM uses to choose the number). - Optional Extension (optional): digits pressed after answer,
wfor a half-second pause. - Transfer type: Cold, Warm or Agentic warm, with the options described in Transfer call.
- Connect Transfer failed under On failure to the node that should handle a failed transfer.
How it runs#
- The instruction is spoken (static sentence or prompt).
- For a dynamic destination, one LLM call works out the number from your prompt and the conversation.
- The transfer runs. On success the agent leaves and the call ends for it with
call_transfer. - On failure (busy, no answer, declined, invalid destination, no person detected, cancelled), the flow follows Transfer failed. Without a connected failure edge the flow stays in the transfer node and the agent replies.
Fields#
| Field | Type | Description |
|---|---|---|
type |
"transfer_call" |
|
transfer_destination |
{type: "predefined", number, extension?} or {type: "inferred", prompt, extension?} |
|
transfer_option |
cold, warm or agentic warm option | Default {type: "cold_transfer", cold_transfer_mode: "sip_invite", show_transferee_as_caller: false} |
instruction |
{type, text} |
Spoken before the transfer |
edge |
edge | Transfer failed |
{
"id": "node_to_reception",
"type": "transfer_call",
"name": "Transfer to reception",
"instruction": { "type": "static_text", "text": "Putting you through to reception now." },
"transfer_destination": { "type": "predefined", "number": "+61290000000" },
"transfer_option": { "type": "warm_transfer", "public_handoff_option": { "type": "prompt", "prompt": "Introduce the caller and their reason for calling." } },
"edge": { "id": "edge_failed", "destination_node_id": "node_take_message", "transition_condition": { "type": "prompt", "prompt": "Transfer failed" } }
}Differences from the function#
- The node has no
custom_sip_headers. Use the Call Transfer function in a function node if you need headers on the INVITE or REFER. - The failure path is an edge, so you can design it (take a message, offer a callback) instead of relying on the LLM.
Gotchas#
- Web calls cannot transfer (the caller is not a SIP participant), so test runs in Test Audio always take Transfer failed.
- A typical failure branch is a conversation node that takes a message, followed by an end node.