Skip to content
TriedDocs
Conversation flow

Call transfer node

Transfer the call at a fixed step of a flow, with an announcement before the transfer and a Transfer failed edge.

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#

  1. Add a Call Transfer node.
  2. Instruction: what to say before transferring. New nodes start with the static sentence "Transferring your call now."
  3. Transfer to: Static number (E.164, SIP URI or {{variable}}) or Dynamic (a prompt the LLM uses to choose the number).
  4. Optional Extension (optional): digits pressed after answer, w for a half-second pause.
  5. Transfer type: Cold, Warm or Agentic warm, with the options described in Transfer call.
  6. Connect Transfer failed under On failure to the node that should handle a failed transfer.

How it runs#

  1. The instruction is spoken (static sentence or prompt).
  2. For a dynamic destination, one LLM call works out the number from your prompt and the conversation.
  3. The transfer runs. On success the agent leaves and the call ends for it with call_transfer.
  4. 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.