Mayank Sharma
04/30/2025, 3:48 PMMayank Sharma
04/30/2025, 3:48 PMMayank Sharma
04/30/2025, 3:48 PMMayank Sharma
04/30/2025, 3:48 PMVapi Support Bot
04/30/2025, 3:49 PMwarm-transfer-with-twiml mode instead of warm-transfer-with-summary. This alternative allows you to execute TwiML instructions including the Play verb for music playback.
Here's how to implement it:
ts
const transferDestination = {
type: 'number',
number: '+1234567890',
transferPlan: {
mode: 'warm-transfer-twiml',
twiml: '<Play>https://your-music-url.mp3</Play>'
}
};
This will play your music file while the call is being transferred.
Sources:
- [Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Discord Discussion on TwiML Transfer](https://discord.com/channels/1211482211119796234/1342937740127502387)Mayank Sharma
04/30/2025, 3:53 PMVapi Support Bot
04/30/2025, 3:55 PMwarm-transfer-twiml mode doesn't automatically include a summary like warm-transfer-with-summary does. However, you can include summary information in your TwiML by combining both approaches:
ts
const transferDestination = {
type: 'number',
number: '+1234567890',
transferPlan: {
mode: 'warm-transfer-twiml',
twiml: `<Play>https://your-music-url.mp3</Play>
<Say>Summary: {{your summary content here}}</Say>`
}
};
You would need to generate the summary separately and insert it into the TwiML.
Sources:
- [Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Discord Discussion on TwiML Transfer](https://discord.com/channels/1211482211119796234/1342937740127502387)Kings_big💫
04/30/2025, 3:58 PMMayank Sharma
04/30/2025, 6:22 PMMayank Sharma
04/30/2025, 6:23 PMKings_big💫
04/30/2025, 6:35 PMMayank Sharma
05/02/2025, 8:24 AMtwiml: `<Play>https://cdn.pixabay.com/audio/2022/03/10/audio_e0ec169d7d.mp3</Play>
<Say>Summary: Here is the transcript \n\n{{your summary content here}}\n\n</Say>`, doesn't workVapi Support Bot
05/02/2025, 8:24 AMMayank Sharma
05/02/2025, 8:26 AMMayank Sharma
05/02/2025, 8:44 AMMayank Sharma
05/02/2025, 9:02 AMMayank Sharma
05/02/2025, 9:03 AMMayank Sharma
05/02/2025, 9:03 AMMayank Sharma
05/02/2025, 9:03 AMMayank Sharma
05/02/2025, 10:08 AMShubham Bajaj
05/05/2025, 9:35 PMMayank Sharma
05/06/2025, 10:10 AMChiranjeet Mishra
05/10/2025, 3:28 AMholdAudioUrl parameter in the transfer plan.
Here's the solution:
const transferDestination = {
type: 'number',
number: '+1234567890', // Replace with the actual destination number
transferPlan: {
mode: 'warm-transfer-say-summary', // This maintains the summary functionality
holdAudioUrl: '' // URL to the hold music file
}
};
The holdAudioUrl parameter accepts a publicly accessible URL to an MP3 or WAV audio file that will be played to the caller while they're waiting during the transfer.
When you specify this in the transfer plan, the system will:
1\. Play the provided music to the caller while they wait
2\. Still deliver the summary to the agent receiving the call
3\. Connect the caller and agent after the summary is presented
If you don't provide a custom holdAudioUrl, the system will use a default ringtone from: ''.
Note: This functionality works with both the newer mode name 'warm-transfer-say-summary' and the older name 'warm-transfer-with-summary'.Mayank Sharma
05/12/2025, 5:29 PMMayank Sharma
05/12/2025, 5:33 PMMayank Sharma
05/12/2025, 5:33 PMMayank Sharma
05/13/2025, 7:48 AMMayank Sharma
05/13/2025, 7:48 AMMayank Sharma
05/13/2025, 7:49 AMMayank Sharma
05/13/2025, 7:50 AMMayank Sharma
05/13/2025, 7:50 AMMayank Sharma
05/13/2025, 7:51 AMMayank Sharma
05/13/2025, 7:51 AMMayank Sharma
05/13/2025, 7:51 AMMayank Sharma
05/13/2025, 7:51 AMMayank Sharma
05/13/2025, 7:51 AMVapi Support Bot
05/13/2025, 7:51 AMholdAudioUrl parameter and experimental modes, didn't work as expected in your case. Your feedback and the call IDs you've provided are valuable for further investigation. If there are any updates or additional information about these features or your requests, I'll be sure to share them.Kings_big💫
05/13/2025, 7:57 AMMayank Sharma
05/13/2025, 8:35 AMholdAudioUrl
string
Optional
This is the URL to an audio file played while the customer is on hold during transfer.
Usage:
Used only when mode is warm-transfer-experimental.
Used when transferring calls to play hold audio for the customer.
Must be a publicly accessible URL to an audio file.
Supported formats: MP3 and WAV.
If not provided, the default hold audio will be used. in your here https://docs.vapi.ai/api-reference/tools/create#request.body.transferCall.destinations.number.transferPlan its mentioned can only used in experimental modeMayank Sharma
05/13/2025, 8:35 AMMayank Sharma
05/13/2025, 8:35 AMMayank Sharma
05/13/2025, 11:20 AMclemens
05/13/2025, 1:29 PM{
"destination": {
"type": "number",
"message": "Ich verbinde Sie nun...",
"number": "+49 123 456789",
"numberE164CheckEnabled": null,
"transferPlan": {
"mode": "warm-transfer-experimental",
"message": "Ich verbinde einen Kunden mit Ihnen.",
"fallbackPlan": {
"message": "Leider konnte ich die Verbindung nicht herstellen. Gerne nehme ich Ihre Informationen auf und leite sie nach dem Gespräch weiter.",
"endCallEnabled": false
},
"summaryPlan": {
"enabled": false,
"messages": []
}
}
},
"error": null
}
.clemens
05/13/2025, 1:30 PMMayank Sharma
05/13/2025, 1:49 PMMayank Sharma
05/13/2025, 1:52 PMMayank Sharma
05/13/2025, 1:53 PMclemens
05/13/2025, 1:55 PMclemens
05/13/2025, 1:55 PMMayank Sharma
05/13/2025, 1:55 PMMayank Sharma
05/13/2025, 1:56 PMMayank Sharma
05/14/2025, 9:15 AMVapi Support Bot
05/14/2025, 9:16 AMholdAudioUrl parameter with warm-transfer-say-summary or warm-transfer-experimental modes aren't working as expected, I'm escalating this to the Vapi support team for deeper investigation. If I come across any updates, I'll let you know!Shubham Bajaj
05/15/2025, 3:32 AMShubham Bajaj
05/15/2025, 3:44 AMMayank Sharma
05/15/2025, 5:25 AMMayank Sharma
05/15/2025, 5:25 AMMayank Sharma
05/19/2025, 12:42 PMMayank Sharma
05/20/2025, 5:15 AMShubham Bajaj
05/20/2025, 8:17 PMShubham Bajaj
05/20/2025, 9:00 PMjson
"transferPlan": {
"mode": "warm-transfer-experimental",
"message": "Transferring a customer to you",
"summaryPlan": {
"enabled": true, // summary takes precedence over message if enabled
"timeoutSeconds": 5
},
"firstMessageMode": "operator_first", // or "assistant_first"
"holdMusicUrl": "https://music.vapi.ai/waiting-ringtone.mp3",
"failurePlan": {
"resumeAssistant": true, // let the assistant continue after transfer failure
"message": "I couldn't reach the operator, do you want me to try again?."
}
}Shubham Bajaj
05/20/2025, 9:00 PMShubham Bajaj
05/21/2025, 1:05 AMMayank Sharma
05/21/2025, 5:45 AMMayank Sharma
05/21/2025, 6:13 AM'assistant.model.each value in tools.each value in destinations.transferPlan.property holdMusicUrl should not exist'Mayank Sharma
05/21/2025, 6:13 AMMayank Sharma
05/21/2025, 6:13 AMMayank Sharma
05/21/2025, 6:14 AM'assistant.model.each value in tools.each value in destinations.transferPlan.property firstMessageMode should not exist'Mayank Sharma
05/21/2025, 6:44 AMtransferPlan: {
mode: "warm-transfer-experimental",
message: "Transferring a customer to you",
summaryPlan: {
enabled: true, // summary takes precedence over message if enabled
timeoutSeconds: 5,
},
holdAudioUrl:
"https://cdn.pixabay.com/audio/2025/05/01/audio_fc51d010d8.mp3",
fallbackPlan: {
message: "Could not transfer your call, goodbye.",
endCallEnabled: true,
},
},
Above works, but doesn't speak the summary.
Works with this only, when i changed the key name to holdAudioUrl by looking at your doc https://docs.vapi.ai/api-reference/tools/create#request.body.transferCall.destinations.number.transferPlan
also when i add messages in summaryPlan i am able to hear the music once the other user picks the call my call ends(main caller call ends)Chiranjeet Mishra
05/21/2025, 12:20 PMMayank Sharma
05/21/2025, 12:22 PMMayank Sharma
05/21/2025, 12:23 PMSahil
05/21/2025, 1:03 PMSahil
05/21/2025, 1:03 PMSahil
05/21/2025, 1:03 PMMayank Sharma
05/21/2025, 1:15 PMMayank Sharma
05/21/2025, 1:23 PMMayank Sharma
05/21/2025, 2:06 PMMayank Sharma
05/21/2025, 2:06 PMChiranjeet Mishra
05/21/2025, 3:46 PMMayank Sharma
05/21/2025, 5:27 PMSahil
05/21/2025, 6:07 PMMayank Sharma
05/21/2025, 7:02 PMMayank Sharma
05/21/2025, 7:02 PMMayank Sharma
05/21/2025, 7:04 PMMayank Sharma
05/21/2025, 7:04 PMMayank Sharma
05/21/2025, 7:08 PMChiranjeet Mishra
05/22/2025, 5:47 AMMayank Sharma
05/22/2025, 6:01 AMMayank Sharma
05/22/2025, 6:01 AMMayank Sharma
05/22/2025, 6:02 AMChiranjeet Mishra
05/22/2025, 3:02 PMMayank Sharma
05/23/2025, 12:16 PMMayank Sharma
05/23/2025, 12:16 PMMayank Sharma
05/23/2025, 12:17 PMMayank Sharma
05/23/2025, 12:17 PMVapi Support Bot
05/23/2025, 12:18 PMsummaryPlan messages. The engineering team is actively investigating this issue. For now, please continue to provide new call IDs to support as requested, so they can track and resolve the problem as updates are made.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)Vapi Support Bot
05/23/2025, 12:18 PMsummaryPlan in warm transfers is a known bug and has been escalated to Vapi engineering. The intended flow—hold music for A, summary playback to B, then connection—should work, but currently does not if you include summary messages. For now, the best action is to continue providing call IDs (like you did with baef32cd-53a3-41a9-b7d2-f654a9f9d057) to the Vapi team for tracking and troubleshooting. No additional configuration or workaround is documented at this time.
Source:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding#4-warm-transfer-with-wait-and-say-summary)Vapi Support Bot
05/23/2025, 12:18 PMbaef32cd-53a3-41a9-b7d2-f654a9f9d057) after the recent fix.
The best next step is to wait for feedback from the Vapi support team regarding this test. If you encounter the same disconnection issue, let them know with any additional details (e.g., exact time, symptoms).
If you receive confirmation that the issue is resolved, you can proceed to use the summaryPlan with hold music as intended.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)Vapi Support Bot
05/23/2025, 12:19 PMsummaryPlan messages persists, share the new call ID with support for further troubleshooting. Here’s a reminder of the summaryPlan structure you should use:
json
"transferPlan": {
"mode": "warm-transfer-experimental",
"summaryPlan": {
"enabled": true,
"messages": [
{ "role": "system", "content": "Please provide a summary of the call." },
{ "role": "user", "content": "Here is the transcript:\n\n{{transcript}}\n\n" }
]
}
}
If the call still fails, please provide the new call ID so the support team can investigate further.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)Vapi Support Bot
05/23/2025, 12:19 PMmessages array in your summaryPlan causes the call to drop when the callee answers—a known Vapi bug under investigation. If you want to prepare for when this is fixed, your transferPlan should look like this:
json
"transferPlan": {
"mode": "warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary",
"holdAudioUrl": "https://your-hold-music-url.mp3",
"summaryPlan": {
"enabled": true,
"messages": [
{ "role": "system", "content": "Please provide a summary of the call." },
{ "role": "user", "content": "Here is the transcript:\n\n{{transcript}}\n\n" }
]
}
}
For now, you must omit the messages array to avoid call drops, but this means the callee will not hear the summary. Vapi engineering is working on a fix.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
- [Vapi Discord Support Thread](https://discord.com/channels/1211482211119796234/1366650099035541544)Mayank Sharma
05/23/2025, 2:30 PMVapi Support Bot
05/23/2025, 2:31 PMmessages array in your summaryPlan during a warm transfer will cause the call to drop when the callee answers—this is a known issue that Vapi engineering is working to resolve. For now, the only way to avoid the call ending is to omit the messages array, though this means the callee will not receive the summary. If there are any updates or fixes, they will be shared as soon as they're available. Thank you for continuing to test and share call IDs—your feedback is helping to track and resolve the issue.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
- [Vapi Discord Support Thread](https://discord.com/channels/1211482211119796234/1366650099035541544)Vapi Support Bot
05/23/2025, 2:32 PMmessages array in your summaryPlan for warm transfers causes the call to drop when the callee answers—a known Vapi bug.
To avoid this, configure your transferPlan like below, but omit the messages array for now:
json
"transferPlan": {
"mode": "warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary",
"holdAudioUrl": "https://your-hold-music-url.mp3",
"summaryPlan": {
"enabled": true
// omit "messages" to prevent call drops
}
}
Continue providing call IDs to support for troubleshooting as Vapi engineering works on a fix.
Once resolved, you can add the messages array to deliver the summary as intended.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
- [Vapi Discord Support Thread](https://discord.com/channels/1211482211119796234/1366650099035541544)Shubham Bajaj
05/24/2025, 3:34 AMMayank Sharma
05/26/2025, 12:01 PMShubham Bajaj
05/26/2025, 1:25 PMissue
When using warm-transfer-experimental mode with both hold music AND summary delivery enabled, the original caller (A) gets disconnected the moment the receiving agent (B) answers the call. This prevents the intended flow of: A waits with music → B receives summary → A and B get connected.
working
json
transferPlan: {
mode: "warm-transfer-experimental",
holdAudioUrl: "https://cdn.pixabay.com/audio/2025/05/01/audio_fc51d010d8.mp3",
summaryPlan: {
enabled: true,
// NO messages array - this works
},
fallbackPlan: {
message: "Could not transfer your call, goodbye.",
endCallEnabled: true,
},
}
doesn't-works
json
transferPlan: {
mode: "warm-transfer-experimental",
holdAudioUrl: "https://cdnxxx.mp3",
summaryPlan: {
enabled: true,
messages: [ // ← THIS CAUSES THE PROBLEM
{
role: "system",
content: "Please provide a summary of the call."
},
{
role: "user",
content: "Here is the transcript:\n\n{{transcript}}\n\n"
}
]
},
fallbackPlan: {
message: "Could not transfer your call, goodbye.",
endCallEnabled: true,
},
}
bug
- Symptom: call ends when agent B answers
- Root Cause: Including messages array in summaryPlan triggers a stream management bug
current_flow
1. Customer A requests transfer
2. A hears hold music
3. Agent B answers → A gets disconnected
4. Transfer fails
5. Voice consistency not supportedShubham Bajaj
05/26/2025, 1:26 PMVapi Support Bot
05/26/2025, 1:26 PMmessages array in your summaryPlan during a warm transfer will cause the original caller to be disconnected when the receiving agent answers—this is a known bug and is still under investigation. For now, the only way to avoid the call ending is to omit the messages array, though this means the callee will not receive the summary. Your continued testing and sharing of call IDs is helping track and resolve the issue. If there are any updates or fixes, they will be shared as soon as they're available.
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
- [Vapi Discord Support Thread](https://discord.com/channels/1211482211119796234/1366650099035541544)Vapi Support Bot
05/26/2025, 1:28 PMmessages array from your summaryPlan as shown below:
json
"transferPlan": {
"mode": "warm-transfer-experimental",
"holdAudioUrl": "https://your-hold-music-url.mp3",
"summaryPlan": {
"enabled": true
// omit "messages" to prevent call drops
},
"fallbackPlan": {
"message": "Could not transfer your call, goodbye.",
"endCallEnabled": true
}
}
Continue to share call IDs and logs with support for troubleshooting. Once the bug is fixed, you can add the messages array to deliver the summary as intended.
Sources: [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding), [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
Sources:
- [Vapi Call Forwarding Documentation](https://docs.vapi.ai/call-forwarding)
- [Vapi Changelog May 6, 2025](https://docs.vapi.ai/changelog/2025/5/6)
- [Vapi Discord Support Thread](https://discord.com/channels/1211482211119796234/1366650099035541544)