Warn Transfer not Working
# support
e
Hi, I am doing dynamic warm transfer in my workflow. For that, I am taking the transfer api call to my server and calling the control api from my server. Attached the request body of the control API that I am calling.
Copy code
{'type': 'transfer', 'destination': {'type': 'number', 'number': '+12345678910', 'transferPlan': {'mode': 'warm-transfer-with-message', 'message': 'Incoming call being transferred.', 'holdAudioUrl': 'https://example.com/hold-call.mp3'}}, 'content': 'Transferring you to our insurance department'}
Issue is that, the assistant is not speaking the message or waits for someone to speak, it just transfer immediately. What is the issue here? callId: 019baeb7-cac9-7223-8f74-f43bf4ae9c24 Timestamp: 01/12/2026 01:50 IST Expected Response: Assistant should speak the message and then transfer the call. Response Received: Assistant transferred without speaking the message.
c
Hi there, Thank you for your message. Our team is currently out of the office. We operate Monday through Friday, from 9:00 AM to 8:00 PM Pacific Standard Time (PST). We’ll get back to you as soon as possible during our normal business hours. If your message is urgent, please mark it accordingly or include “URGENT” in the subject line, and we’ll do our best to respond promptly. Warm regards, Vapi Customer Support Team
j
Yep, this is a common (and frustrating) VAPI gotcha. What’s really happening is the transcript ends up replacing the actual assistant response, so the next turn replays the wrong thing and throws everything off. I’ve fixed this before by cleanly separating transcription from conversation memory and forcing the assistant turn to use the model’s real output. Are you sticking with VAPI’s default memory handling, or do you have any custom state logic in place? @elmo7
c
Hi there, Thank you for reaching out and for providing details about your dynamic warm transfer setup. I understand how important it is to get this workflow working correctly, especially when coordinating API calls between your server and the Vapi control API.
Thanks — this is a known behavior. Quick checklist to fix warm-transfer-with-message not speaking before transfer: 1. Verify destination is a Twilio phone number (warm transfers require Twilio). See Call Forwarding guide: https://docs.vapi.ai/call-forwarding 2. Ensure Vapi is managing call control: • phoneCallProviderBypassEnabled must be false • Remove "phone-call-control" from assistant if present (see serverMessages Debug forwarding drops doc)
1. Use a warm-transfer mode that supports a spoken message: for a speak-before-transfer ensure you use one of the “wait-and-say” or “with-message” modes correctly. For immediate speak-before-transfer use: • "mode": "warm-transfer-with-message""mode": "warm-transfer-with-message" (Vapi should play the message) or • "mode": "warm-transfer-wait-for-operator-to-speak-first-and-then-say-message" if you want the operator to speak first. Docs: https://docs.vapi.ai/call-forwarding 2. If you’re doing dynamic transfers via controlUrl: • POST to {controlUrl}/control with type "transfer" and a destination object that includes the transferPlan as you showed — confirm the control response succeeded (HTTP 200). • Confirm holdAudioUrl and message are set on the destination (you already have these). 3. Confirm provider / number compatibility and call direction: • Warm transfer features won’t work for non-Twilio or unsupported call types (e.g., web->phone). See limitations in Call Forwarding and Debugging docs. 4. Check call logs for endedReason and telephony provider logs (Twilio) to see if Vapi sent the warm-transfer TwiML/REFER or immediately bridged. Use the call ID in Observe > Call Logs and provider console. Debug guide: https://docs.vapi.ai/phone-calling/in-call-control/transfer-calls/debug-forwarding-drops 5. If the transfer assistant/path is configured, ensure you didn’t override with assistant-based warm-transfer settings that auto-call transfer tools (those may call transfer immediately if prompts/tools instruct to do so). See assistant-based warm transfer doc: https://docs.vapi.ai/calls/assistant-based-warm-transfer