mai
12/29/2025, 10:00 PM[When navigating an IVR tree]
- WAIT for all options to be spoken before proceeding
- Once you have heard all options, use the dtmf tool with an input digit that matches the option you want to select
- Avoid saying anything if using the dtmf tool at the same time
[When waiting]
- Reply with an empty string like " " to ensure nothing is spoken
[Call Flow]
1. Navigate IVR tree (if needed)
- In order to get connected with a live representative that can handle your request, you may need to navigate an IVR tree.
- This might sound like "Press 1 for..."
- Look for options that indicate operator assistance
- As soon as you get connected to a human, proceed to the next step
## IVR Navigation & Retry Logic
When navigating IVR menus:
1. **Wait for the complete menu** - Listen to all options before responding. If waiting, respond with a single space (" ") to stay silent.
2. **First DTMF attempt**: Use standard pacing with 0.5s pauses between digits
- Example: For option 2, send "w2#"
- For multiple digits like 212, send "w2w1w2#"
3. **Detect failed input**: If the IVR:
- Repeats the same menu
- Says "I didn't catch that" or "Invalid input"
- Doesn't acknowledge your selection
Then the DTMF likely failed.
4. **Retry with slower pacing**:
- Retry 1: Use 1-second pauses (W instead of w)
Example: "W2#" or "W2W1W2#"
- Retry 2: Use even longer pauses (WW)
Example: "WW2#"
5. **Fallback to speech**: If DTMF fails after 2 retries, speak the option clearly:
- Instead of sending tones, say "Option 2" or "Two"
6. **Pause characters**:
- w = 0.5 second pause
- W = 1 second pause
Example:
When calling a restaurant and encountering their IVR menu:
Example scenario:
- IVR says: "Press 1 for reservations, Press 2 for takeout, Press 3 for hours"
Your response flow:
1. Wait for the complete menu (respond with " " while listening)
2. Send DTMF: "w1#" (for reservations)
3. If IVR repeats menu → Retry with "W1#"
4. If still fails → Say "Option 1" or "Reservations"
Questions:
- Is there any other thing I can try to make it work?
- When I hear call logs, I do see DTMF tool is triggered. However, I don't know if it pressed the right option. Is there any way to know?
Call IDs:
019b523f-bd9e-7cc0-8206-59957764b583
019b4d3d-20d7-7993-90ff-4911ad6f72d9
019b2e07-81bc-7334-a387-1a9f6e1cffbf
019b2e03-a2c8-7000-82ed-c81653845144
019b2438-7cad-7884-9062-3d79d982b620
019b2435-073e-7cc4-82c6-27192a7e6ce3
019b242f-5063-744f-b562-81f58d53c69d
019b23cb-0cfa-7551-844b-61c75b58e8af
Assistant ID:
480cb6be-866f-44e4-b1e9-f72a15aea6c1
Thank you so much!Vapi Support Bot
12/29/2025, 10:01 PMDTMF sent: "w2#"
IVR response: "Connecting you to reservations..."
This lets you verify if the correct option was selected based on the IVR's reply, even though you can't see the IVR's internal state directly.
Source: See "Call Logs" and tool execution in the [Vapi debugging guide](https://docs.vapi.ai/debugging).Lee Harrold
12/30/2025, 6:41 PMLee Harrold
12/30/2025, 6:45 PMLee Harrold
12/30/2025, 7:05 PMmai
12/31/2025, 9:44 PMmai
12/31/2025, 9:45 PMmai
01/02/2026, 5:48 PM{
"role": "tool_calls",
"time": 1767374865175,
"message": "",
"toolCalls": [
"0": {
"id": "call_bL2aM8GUiP1jwCFPeZI6ZCH0",
"type": "function",
"function": {
"name": "dtmf_tool",
"arguments": "{}"
}
}
],
"secondsFromStart": 31.435
}Vapi Support Bot
01/02/2026, 5:49 PM{}), it usually means the tool was triggered without specifying which digits to send.
Could you confirm if your assistant's prompt or function definition is explicitly passing the required digits (e.g., "keys": "w2#" or similar) when calling the DTMF tool? If possible, please share the relevant part of your assistant's configuration or prompt logic for review.
This will help pinpoint whether the issue is with how the tool is being invoked or with the tool's schema itself.
Sources:
- [Vapi IVR Navigation Guide](https://docs.vapi.ai/ivr-navigation)
- [Vapi Custom Tools Troubleshooting](https://docs.vapi.ai/tools/custom-tools-troubleshooting)mai
01/02/2026, 6:02 PMVapi Support Bot
01/02/2026, 6:02 PM{}).
Key things to check:
- Explicitly pass the digits to the DTMF tool: Make sure that when your assistant calls the DTMF tool, it includes the specific keys to press (e.g., "keys": "w2#"). If the tool call is being generated by a function or template, double-check that the variable holding the digit(s) is being populated and passed correctly.
- Prompt-to-tool mapping: Sometimes, even if your prompt instructs the assistant to use the DTMF tool, the actual function call in your code or configuration must explicitly include the argument. If you are using a function schema, ensure the argument (like keys or digits) is required and not optional.
- Test with hardcoded values: As a quick test, try triggering the DTMF tool with a hardcoded value (e.g., always send "w1#" for a test call) to confirm that the tool call works when the argument is present. This can help isolate whether the issue is with variable substitution or the tool invocation itself.
Summary:
Your prompt logic is solid, but the DTMF tool needs to receive the actual digits to send. Double-check how the tool is being invoked and ensure the argument is always populated when the tool is called. If the argument is empty, the tool won't send any tones, which matches what you're seeing in your logs.
Let me know if you want to share more about how the DTMF tool is being called in your code or configuration—I'm happy to help you troubleshoot further!Lee Harrold
01/02/2026, 7:39 PMmai
01/02/2026, 9:25 PM{
type: "tool_call",
tool: "dtmf",
arguments: { keys: "w2" }
}