IVR Setup Guide
An IVR (Interactive Voice Response) lets callers navigate a phone menu using their keypad (DTMF tones). Instead of routing every call to an agent, an IVR enables callers to self-serve or reach the right department on their own.
How IVR Works in Exotel​
When a caller dials your ExoPhone, the call flow triggers the IVR Menu applet. The caller hears a prompt (e.g., "Press 1 for Sales, Press 2 for Support") and presses a key. Exotel detects the DTMF tone and routes the call to the corresponding applet in the flow.
Caller dials ExoPhone
|
v
Greeting (optional)
|
v
IVR Menu: "Press 1 for Sales, 2 for Support"
|
1 pressed → Connect (Sales team)
2 pressed → Connect (Support team)
Timeout → Repeat or Voicemail
Invalid → "Invalid input, try again"
Prerequisites​
- An active ExoPhone. See What is an ExoPhone?
- A call flow created in the dashboard. See Setting Up a Call Flow
Creating a Single-Level IVR​
Step 1: Add the IVR Menu Applet​
- Log in to the Exotel Dashboard.
- Go to App Bazaar and open your call flow.
- Drag the IVR Menu applet onto the canvas.
- Place it after your Greeting applet (if you have one).
Step 2: Record or Upload the IVR Prompt​
The IVR prompt is the audio the caller hears before pressing a key. You have three options:
| Method | Description | Best For |
|---|---|---|
| Record via phone | Exotel calls you and records your voice | Quick setup |
| Upload audio file | Upload a pre-recorded .wav file (8000 Hz, Mono) | Professional recordings |
| Text-to-Speech (TTS) | Type the message and Exotel converts it to speech | Rapid prototyping |
For production use, upload a professionally recorded audio file. TTS is useful for testing, but a human-recorded message sounds more natural to callers.
Step 3: Map DTMF Keys to Actions​
In the IVR Menu configuration, map each key to the next applet:
| Key | Action | Connected Applet |
|---|---|---|
| 1 | Sales | Connect (Sales team numbers) |
| 2 | Support | Connect (Support team numbers) |
| 3 | Billing | Connect (Billing team number) |
| 0 | Speak to operator | Connect (Receptionist) |
| Timeout | No input detected | Repeat IVR or Voicemail |
| Invalid | Unrecognized key | Play error message, repeat IVR |
Available DTMF keys: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #
Step 4: Configure Timeout and Invalid Input​
- Timeout duration: How long Exotel waits for a keypress (default: 5 seconds). Increase for elderly or less tech-savvy callers.
- Maximum retries: How many times the IVR repeats after invalid input or timeout before taking a fallback action.
- Fallback action: What happens after max retries (e.g., connect to operator, voicemail, hangup).
Step 5: Save and Publish​
- Click Save to save the flow.
- Click Publish to make it live.
- Test by calling your ExoPhone and pressing different keys.
Creating a Multi-Level IVR​
A multi-level IVR has nested menus -- the caller presses a key at the first level and hears a second set of options.
Level 1: "Press 1 for Sales, 2 for Support"
|
1 → Level 2: "Press 1 for New Inquiry, 2 for Existing Order"
| |
| 1 → Connect (New Sales team)
| 2 → Connect (Order team)
|
2 → Level 2: "Press 1 for Technical, 2 for Billing"
|
1 → Connect (Tech support)
2 → Connect (Billing)
How to Build It​
- Create the first IVR Menu applet with top-level options.
- For each key that needs a sub-menu, connect it to another IVR Menu applet.
- Configure the second-level IVR Menu with its own prompt and key mappings.
- Connect the second-level keys to Connect, Voicemail, or other applets.
See: Multi-Level IVR for advanced nested IVR configurations.
DTMF Input Collection​
Beyond menu navigation, you can use DTMF to collect data from callers (e.g., order numbers, account IDs).
Using the Passthru Applet for Dynamic IVR​
- Add a Passthru applet after the IVR Menu.
- The Passthru applet sends an HTTP request to your server with the caller's input.
- Your server responds with instructions (e.g., which applet to route to next).
# Exotel sends to your server:
POST https://your-app.com/ivr-handler
Content-Type: application/x-www-form-urlencoded
CallSid=<call_sid>&digits=1&From=<caller_number>
# Your server responds with routing instructions
IVR Configuration Options​
| Setting | Description | Recommended Value |
|---|---|---|
| Prompt audio | The message played to the caller | Clear, concise recording |
| Key mappings | Which applet each key routes to | Map only the keys you need |
| Timeout | Seconds to wait for input | 5-7 seconds |
| Max retries | Times to repeat on invalid/timeout | 2-3 retries |
| Invalid input message | Audio played for wrong keypress | "That is not a valid option" |
| Timeout message | Audio played when no input | "We did not receive your input" |
Best Practices​
- Keep menus short -- Limit IVR options to 4-5 per level. Callers struggle to remember more than 5 options.
- Put the most common option first -- If 70% of callers want Sales, make it option 1.
- Always offer a human option -- Include "Press 0 to speak to an operator" as a fallback.
- Avoid deep nesting -- Limit your IVR to 2 levels. More than 2 levels frustrates callers.
- Repeat the menu -- If the caller does not press a key, repeat the menu at least once before routing to a fallback.
- Use consistent language -- Say "Press 1" not "Dial 1" or "Hit 1" throughout your prompts.
Do not use IVR as a barrier to reaching a human agent. Regulatory guidelines in many countries require that callers can reach a live person within a reasonable number of steps.
Troubleshooting​
| Issue | Cause | Solution |
|---|---|---|
| Caller hears nothing after greeting | IVR applet not connected | Connect Greeting output to IVR Menu |
| DTMF not detected | Audio overlap with keypress | Add a brief pause before the IVR prompt |
| Wrong department connected | Key mapping incorrect | Verify key-to-applet connections in the flow |
| IVR repeats endlessly | No max retry limit set | Set max retries to 2-3 |
| Caller drops off at IVR | Too many options or levels | Simplify the menu |