Repository navigation
docs: clarify transfer event coverage and initiation semantics #1335
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -427,17 +427,47 @@ Respond with a destination and optionally a message: | |||||||||||||
|
|
||||||||||||||
| ### Transfer Update | ||||||||||||||
|
|
||||||||||||||
| Fires whenever a transfer occurs. | ||||||||||||||
| For voice calls, `transfer-update` is emitted by the legacy `transferCall` path when transferring to an assistant destination. It includes `destination`, `fromAssistant`, and `toAssistant`. It is not emitted for every assistant handoff or phone/SIP transfer, and it does not report ringing, connection, or transfer failure. | ||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Uses "sent" to match the rest of this page, and makes the list parallel so "every" applies to each item.
Suggested change
|
||||||||||||||
|
|
||||||||||||||
| Example payload excerpt for an assistant destination: | ||||||||||||||
|
|
||||||||||||||
| ```json | ||||||||||||||
| { | ||||||||||||||
| "message": { | ||||||||||||||
| "type": "transfer-update", | ||||||||||||||
| "destination": { /* assistant | number | sip */ } | ||||||||||||||
| "destination": { | ||||||||||||||
| "type": "assistant", | ||||||||||||||
| "assistantName": "Support" | ||||||||||||||
| }, | ||||||||||||||
| "fromAssistant": { "name": "Receptionist" }, | ||||||||||||||
| "toAssistant": { "name": "Support" } | ||||||||||||||
| } | ||||||||||||||
| } | ||||||||||||||
| ``` | ||||||||||||||
|
|
||||||||||||||
| #### Phone and SIP transfers | ||||||||||||||
|
|
||||||||||||||
| Vapi-managed phone and SIP transfers, including [assistant-based warm transfers](/calls/assistant-based-warm-transfer) (`warm-transfer-experimental`), send a `status-update` with `status: "forwarding"` when the transfer is initiated. This event is sent before the transfer is attempted; it does not confirm that the destination rang, answered, or accepted the caller. | ||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Keeps the subject and verb together, and uses "starts" instead of "is initiated".
Suggested change
|
||||||||||||||
|
|
||||||||||||||
| Example payload excerpt for a phone destination: | ||||||||||||||
|
|
||||||||||||||
| ```json | ||||||||||||||
| { | ||||||||||||||
| "message": { | ||||||||||||||
| "type": "status-update", | ||||||||||||||
| "status": "forwarding", | ||||||||||||||
| "destination": { | ||||||||||||||
| "type": "number", | ||||||||||||||
| "number": "+14155550100" | ||||||||||||||
| } | ||||||||||||||
| } | ||||||||||||||
| } | ||||||||||||||
| ``` | ||||||||||||||
|
|
||||||||||||||
| The forwarding payload also includes `messages`, `messagesOpenAIFormatted`, `transcript`, and an optional `summary`. The deprecated `forwardingPhoneNumber` field contains the destination number or SIP URI; use `destination` instead. | ||||||||||||||
|
|
||||||||||||||
| To receive these events, configure a [Server URL](/server-url/setting-server-urls) and include the event type in `assistant.serverMessages`. `status-update` is included by default; `transfer-update` is not. Adding `transfer-update` to the subscription does not make phone/SIP transfers emit it. Use [call logs](/observability/logs/call-logs) and your telephony provider's call records to investigate the transfer outcome. | ||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Keeps the outcome guidance with the phone and SIP section, and moves the subscription rules (which cover both events) under their own heading. Also uses "send" and "phone or SIP" for consistency.
Suggested change
|
||||||||||||||
|
|
||||||||||||||
| ### User Interrupted | ||||||||||||||
|
|
||||||||||||||
| Sent when the user interrupts the assistant. The optional `turnId` identifies the LLM turn that was interrupted, matching the `turnId` on `model-output` messages so you can discard that turn's tokens. | ||||||||||||||
|
|
||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shortens the callout by merging the two
transfer-updatesentences, and uses "send" to match the events page.