Recipes← all recipesView on GitHub

Transfer a call

Voicecall transfer

Move a live caller to another number or address.

Also called blind call transfer, SIP URI transfer, route a call to Vapi, Retell or ElevenLabs over SIP

transfer

The claim

connect is the transfer verb. Its to can be a phone number, a sip: URI or a Resource address such as /public/support. Execution pauses while the two legs are bridged; when the far end hangs up, the verbs after connect run. That is the return path, and it is where the caller can be offered something else. transfer_after_bridge: "true" makes the transfer permanent instead.

How it works

- answer: {}
- play: { url: "say:Please hold while I connect you." }
- connect: { to: "+1555...", timeout: 20, ringback: ["ring:us"] }
- play: { url: "say:The other party has left the call. Thank you for calling." }   # return path
- hangup: {}

The sip section is the SIP variant: the same connect with a sip: URI and headers, which SignalWire stamps onto the INVITE so your PBX can route on them.

- connect:
    to: "sip:support@pbx.example.com"
    headers:
      - { name: "X-Account-Id", value: "acct-1234" }

To try several destinations in order or ring them at once, replace to with serial or parallel. See try-destinations-in-order. To brief the person before the bridge completes, add confirm. See brief-the-human-before-the-bridge-completes.

What to change first

Change to to a Resource address (/public/<name>) and route the call into a SWML script, an AI agent or a subscriber’s browser instead of a phone.