When i forward the call at the meantime mode:warm-...
# support
m
When i forward the call at the meantime mode:warm-transfer-with-summary is active, i want the user to listen some music how can i do that ?
@User
@Shubham Bajaj
@Sahil
v
To play music during call transfer, use the
warm-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:
Copy code
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)
m
@Vapi Support Bot will this still passover the summary to the forwarded number
v
Based on the information I found, the
warm-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:
Copy code
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)
k
Use Twilio’s conference feature with a waitUrl that plays music while the assistant connects the specialist
m
@Kings_big💫 can you share the docs
k
m
@Vapi Support Bot
Copy code
twiml: `<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 work
v
I need to understand what Vapi is and how it works. Can you explain the main components of Voice AI and how they work together? Also, I'm curious about the pricing structure and if there are any case studies of successful implementations.
m
@Kings_big💫 can you check
@Kings_big💫 @Shubham Bajaj this plays the songs on forwarded number end, i want the ringtone to change to some music like when we pass the call via ivr it plays some music or information that is what i am asking
i mean when the call is received and user is being explained the summary
that time the waiting user should listen to music or any information i want to pass, similar to ivr
@Kings_big💫
@User
@Shubham Bajaj
s
apologize for the delay @Mayank Sharma , let me take a look
m
sure @Shubham Bajaj
c
The Vapi codebase supports playing hold music for callers during transfers. This can be accomplished by using the
holdAudioUrl
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'.
m
@Shubham Bajaj thanks
@Shubham Bajaj one more things i want the same agent on receiving end to speak the summary, not the default agent by vapi
i mean same voice not agent
@Shubham Bajaj hold things doesn't work
also tried 'warm-transfer-experimental'
6b9fd785-be7e-4d25-be5e-4829a5c6f461 c6608c03-161e-4615-b478-6fc876a47b2b 4e52461b-d86f-4155-8134-ed46ac2a2f8c a8b1ad0d-763e-4027-b570-3e9d540f2262
list of call id's
can you check this
@Kings_big💫
@Vapi Support Bot
@Vapi
@User
v
Thanks for sharing the details and clarifying your requirements. I see that you're looking to play hold music or informational audio to the waiting caller during a warm transfer, specifically while the summary is being delivered to the agent, and you'd like the summary to be spoken in the same voice as the original agent. It's also noted that the suggested solutions, including the
holdAudioUrl
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.
k
Looking into it
m
Copy code
holdAudioUrl
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 mode
even tried that
isn't working
@Kings_big💫
c
For me the warm-transfer-experimental doesnt work at all when employed in a dynamic transfer setting. the system is performing a blind transfer instead. here is the response from my server, which seems to be valid:
Copy code
{
  "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
}
.
@Kings_big💫 : where you able to spot anything when looking into it?
m
@clemens you can configure that in system prompt
@clemens "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" } ] } also this
you can add this before transferring the call to user it will give the summary for me it works like this
c
@Mayank Sharma : The problem that I have are the following with the `warm-transfer-experimental`: 1. Whenever I use the summary functionality, the language model used to speak out the summary is english-only. I am building for german market, and the summary is in german language, yet the voice model pronounces it in english. So the summary is as of now unusable for use cases with my clients. 2. When I use the warm-transfer-experimental and the recipient does not pick up, I do not get a fallback message and the call is ended. Have you been able to successfully configure it @Mayank Sharma ?
As you wrote before "hold things doesn't work" I thought we experience the same issue.
m
@clemens oh got you now, no i have not used the fallback as now
i guess @Shubham Bajaj and @Kings_big💫 can help
@Kings_big💫 @Shubham Bajaj @Vapi Support Bot @Vapi blocked on this
v
Thanks for your patience! I couldn't find enough info in the docs or community threads to solve the issue with playing hold music to callers during warm transfers while also delivering a summary to the receiving agent. Since the usual approaches and the
holdAudioUrl
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!
c
Hey, Could you please schedule a brief call at your convenience so we can discuss this matter in detail? Kindly use the following link to book a suitable time: .
s
@Mayank Sharma looking into it.
@Mayank Sharma I’m really sorry for the slow response and the frustration this has caused. Let me break down both issues and our next steps: 1. Hold music during warm-transfer-with-summary • Current behavior: holdAudioUrl isn’t playing consistently in warm-transfer-with-summary mode. • Action: I’ve escalated this to our engineering team. • ETA: I’ll share an interim update by Tuesday, May 16 2. Using the original agent’s voice for the summary • Current limitation: We default to our standard TTS voice for summary tool messages—you can’t yet carry over the agent’s custom voice. • Plan: I’ve filed this as a feature request. I’ll investigate feasibility and provide a timeline by next week. Thanks for your patience—please let me know if there’s anything else you need in the meantime!
m
@Shubham Bajaj
k
@Shubham Bajaj @Kings_big💫 any update
@User
s
@Mayank Sharma on it.
Hi @Mayank Sharma can you try out the following transfer plan with 2-3 calls for hold music.
Copy code
json
"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?."
  }
}
Let me know how it goes for you.
@Mayank Sharma a gentle reminder.
m
@Shubham Bajaj sure
Copy code
'assistant.model.each value in tools.each value in destinations.transferPlan.property holdMusicUrl should not exist'
@Shubham Bajaj
getting this error
Copy code
'assistant.model.each value in tools.each value in destinations.transferPlan.property firstMessageMode should not exist'
Copy code
transferPlan: {
            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
Copy code
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)
c
Can you share the call_id?
m
13b111f8-cec7-43ba-bc76-13db95da3c2f
@Sahil
s
🟡 06:40:37:622 Couldn't Get Summary. Error: No summary prompt provided.
Can you pass the summary prompt as well?
via API
m
@Sahil even after passing the summary it doesn't work
6b17d98b-6a82-4f5f-b0ef-ddd58fdcf5ec
passed here
@Sahil
c
This time call summary was passed correctly but we got stop stream message from twilio. Need to debug more. 🔵 13:21:18:005 \[twilioStream:4f4e32f1\] Twilio Message: { "event": "stop", "sequenceNumber": "1003", "streamSid": "MZ91820b6553125777098a854ef016a48c", "stop": { "accountSid": "AC6c626945cf122632c4d455fee1eafd11", "callSid": "CA9b4ed46e48897c1a4b0012617a0eb42d" } }
m
@Sahil pls check i am blocked on this
s
I checked with the team and reviewed the logs. It seems that when we attempted to merge the calls, one of the calls had already ended, which caused the transfer to fail. In other words, the destination number had disconnected.
m
@Sahil the destination number was still in call
when he picked the call got interrupted
VAPI CALLS ---> A A --->ASKS TO TRANSFER --> B A ---> LISTENING TO MUSIC --> B A ---> DISCONNECTS --> B (RECEIVES)
this is the flow
if i don't pass the messages array in the summaryPlan it works fine, but B won't know the summary of the call
c
@mayanksharma_75501 Just to confirm your issue: \- When you don't include summary messages in summaryPlan, the transfer works correctly \- When you add messages to summaryPlan, caller A gets disconnected when B answers Can you share a call ID for a successful transfer (without summary plan)? I'm assuming 6b17d98b-6a82-4f5f-b0ef-ddd58fdcf5ec is the call ID where the transfer failed when including the summary plan.
m
03b799e3-f0c9-4155-a6db-754019fbb9eb
@Shubham Bajaj
this is without the summaryPlan
c
Hey Mayank, it should be fixed can you try again? if it is not then can you send me new call_id?
m
baef32cd-53a3-41a9-b7d2-f654a9f9d057
@Sahil
7477267e-5aca-4b0f-bf85-c0883e3b80a7
doesn't work call ends
v
Currently, there is no documented configuration that allows both hold music for caller A and summary delivery to B during a warm transfer without disconnecting A when using
summaryPlan
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)
The issue with caller A disconnecting when using
summaryPlan
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)
Thanks for sharing the new call ID (
baef32cd-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)
Please test your warm transfer flow again using the latest Vapi fix. If the issue with the caller disconnecting when using the
summaryPlan
messages persists, share the new call ID with support for further troubleshooting. Here’s a reminder of the summaryPlan structure you should use:
Copy code
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)
Currently, including a
messages
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:
Copy code
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)
m
@Shubham Bajaj
v
Currently, including a
messages
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)
Currently, including a
messages
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:
Copy code
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)
s
@Mayank Sharma Apologies for the delay, I moving your ticket under investigation status and I will get back to steps to resolve it.
m
@Shubham Bajaj let me know the updates
s
[DETAILED_EXPL]
issue
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
Copy code
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
Copy code
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 supported
@Mayank Sharma for me to confirm its bug can you share the complete twilio call logs with vapi call_sdi in DM.
v
Thanks for following up. The current situation is that including a
messages
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)
To avoid call drops during warm transfers with hold music, omit the
messages
array from your
summaryPlan
as shown below:
Copy code
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)
3 Views