Overview
DTMF (Dual-Tone Multi-Frequency) controls enable your AI agents to both send and capture phone keypad tones during conversations. This allows agents to navigate IVR systems, interact with legacy phone systems, and collect structured input from callers through keypad presses - transforming your agent from voice-only to a full-featured phone automation system. DTMF capabilities are essential for integrating AI agents with existing business phone infrastructure, enabling seamless transfers through complex IVR menus, and collecting precise numeric input like account numbers, PIN codes, or menu selections.What is DTMF?
Understanding DTMF Technology
DTMF is the signal generated when you press keys on a phone keypad. Each key produces two simultaneous tones at different frequencies - one high and one low - creating a unique sound that systems can decode to identify which key was pressed. Available keys:- Digits: 0-9 (numeric input)
- Star: * (often used as “back” or “cancel”)
- Pound/Hash: # (often used as “confirm” or “enter”)
- Navigate IVR menus (“Press 1 for Sales, 2 for Support”)
- Enter account numbers or PINs
- Confirm or cancel actions
DTMF Capabilities
Two Primary Functions
Tone Sending
Tone Capture
Tone Sending Use Cases
IVR Navigation
IVR Navigation
Authentication
Authentication
System Integration
System Integration
Tone Capture Use Cases
Menu Selection
Menu Selection
Information Collection
Information Collection
Keypad Input
Keypad Input
Configuring DTMF Controls
Accessing DTMF Settings
Navigate to DTMF Configuration


Global DTMF Toggle
Enable DTMF during calls Allow the agent to send keypad tones and collect digits from callers. When to enable:- Agent needs to navigate IVR systems
- Agent needs to collect structured numeric input
- Integration requires DTMF interaction
Tone Sending Configuration
Tone Sending
Configure your agent to send DTMF tones to external systems. Toggle: Allow the agent to send keypad tones Parameters:- Cooldown between tones (seconds): 3 seconds (default)
- Tone duration (ms): 120 ms (default)
- Gap between tones (ms): 70 ms (default)
Tone Sending Parameters
Cooldown between tones (seconds)
Cooldown between tones (seconds)
- Increase (4-5s): Slow/legacy IVR systems missing tones
- Decrease (1-2s): Fast modern systems, reduce total navigation time
Tone duration (ms)
Tone duration (ms)
- Increase (150-200ms): IVR systems not detecting tones reliably
- Decrease (80-100ms): Speed up interactions, reduce latency
Gap between tones (ms)
Gap between tones (ms)
- Increase (100-150ms): IVR treating rapid tones as single input
- Decrease (40-50ms): Speed up multi-digit sequences
Recommended Settings by Use Case
Fast Modern IVRs
Fast Modern IVRs
- Cooldown: 1-2 seconds
- Tone Duration: 100ms
- Gap between tones: 50ms
Standard IVRs (Default)
Standard IVRs (Default)
- Cooldown: 3 seconds (default)
- Tone Duration: 120ms (default)
- Gap between tones: 70ms (default)
Slow/Problematic IVRs
Slow/Problematic IVRs
- Cooldown: 4-5 seconds
- Tone Duration: 150ms
- Gap between tones: 100ms
Tone Capture Configuration
Capture Modes
Choose how your agent receives and interprets DTMF input from callers.Menu (single key)
Collector (multi-digit)
Menu Mode
For IVR-style menu selections Menu mode captures a single keypress and immediately sends it to the agent.

- Agent prompts with menu options
- Customer presses single key (0-9, *, #)
- Agent receives digit immediately
- Agent responds based on key pressed
- Captures single key press
- Processes immediately
- No termination key required
- Clear key not available
Collector Mode
For collecting sequences like account numbers, PINs, phone numbers Collector mode buffers multiple digits until the user presses the termination key or timeout expires.

- Agent prompts for multi-digit input
- Customer enters multiple digits
- Presses termination key (usually #) when complete
- Agent receives complete digit string
- Minimum digits: 1 (default)
- Maximum digits: 25 (default)
- Timeout (ms): 6000ms (6 seconds, default)
- Termination key: # (Hash)
- Clear input key: * (Star)
Collector Mode Parameters
Minimum digits
Minimum digits
- Account number (10 digits): Set to 10
- PIN (4 digits): Set to 4
- Flexible input: Set to 1 (any length accepted)
- If customer presses # before minimum reached → Error, prompt to re-enter
- If customer reaches minimum → Can press # to submit early
Maximum digits
Maximum digits
- Phone number: Set to 10 (US format)
- Account number: Set to expected length
- Variable length: Set higher than expected maximum
- When max digits entered → Automatically submits without requiring #
- Tones after max are ignored
Timeout (ms)
Timeout (ms)
- Timer starts after each digit press
- Resets with each new digit
- If timeout reached → Treat as complete or prompt for more
- Quick input (PIN): 3000-4000ms (3-4 seconds)
- Long input (account number): 6000-8000ms (6-8 seconds)
- Patient system: 10000ms+ (10+ seconds)
Termination key
Termination key
Clear input key
Clear input key
Recommended Collector Settings by Use Case
Account Number Collection (10 digits)
Account Number Collection (10 digits)
- Minimum digits: 10
- Maximum digits: 10
- Termination key: # (optional, auto-submits at 10)
- Timeout: 6000ms (6 seconds)
- Clear input key: *
PIN Collection (4-6 digits)
PIN Collection (4-6 digits)
- Minimum digits: 4
- Maximum digits: 6
- Termination key: #
- Timeout: 4000ms (4 seconds)
- Clear input key: *
Phone Number (Variable Format)
Phone Number (Variable Format)
- Minimum digits: 7
- Maximum digits: 15
- Termination key: #
- Timeout: 6000ms (6 seconds)
- Clear input key: *
Flexible Numeric Input (Default)
Flexible Numeric Input (Default)
- Minimum digits: 1 (default)
- Maximum digits: 25 (default)
- Termination key: #
- Timeout: 6000ms (6 seconds, default)
- Clear input key: *
Using DTMF in Instructions
Prompting for DTMF Input
Menu selection example:Handling DTMF Responses
Automatic processing: When DTMF capture is enabled, the agent automatically receives collected digits and can respond to them. No additional configuration needed. Advanced: Using the wait_for_dtmf_input tool For explicit control in your agent instructions, you can call thewait_for_dtmf_input tool. It returns:
Fallback to Voice
Offering voice alternative:Testing DTMF Configuration
Test Plan
Test Tone Sending (IVR Navigation)
- Configure agent with transfer action to phone number with IVR
- Add instructions to navigate IVR using DTMF tones
- Start test call
- Trigger transfer action
- Monitor agent navigating IVR (check logs for sent tones)
- Verify agent reaches correct destination
- Tones sent at correct intervals
- IVR recognizes all tones
- Navigation completes successfully
- No dropped or misinterpreted tones
Test Menu Mode (Single Key Capture)
- Configure DTMF in Menu mode
- Add menu options to instructions
- Start test call
- Listen to menu options
- Press single key (1, 2, 3, etc.)
- Verify agent recognizes and responds appropriately
| Key | Expected Action |
|---|---|
| 1 | Route to option 1 |
| 2 | Route to option 2 |
| 9 | Route to option 9 |
| * | Handle star key |
| # | Handle pound key |
| Invalid | Error handling |
Test Collector Mode (Multi-Digit)
- Configure DTMF in Collector mode
- Set appropriate min/max digits, termination key
- Start test call
- Prompt agent to collect digits
- Enter various digit sequences:
- Exactly minimum digits + #
- Between min and max digits + #
- Exactly maximum digits (auto-submit)
- Use clear key (*) to correct mistakes
- Let input timeout
- Verify agent receives correct digit string
- Minimum digit enforcement works
- Maximum digit auto-submit works
- Termination key properly finalizes input
- Clear key correctly deletes last digit
- Timeout handling appropriate
Test Edge Cases
- Press # immediately (no digits)
- Should reject if min > 0
- Enter partial digits, wait for timeout
- Verify appropriate handling
- Enter digits very quickly
- Verify all captured correctly
- Press * on empty buffer (should ignore)
- Press * multiple times (deletes multiple digits)
- Enter digits, clear all, enter new sequence
- Press keys in wrong mode (e.g., # in Menu mode)
- Hold key too long
- Press multiple keys simultaneously
Common Testing Issues
Tones Not Detected
Tones Not Detected
- DTMF Support not enabled globally
- Tone duration too short for detection
- Network/codec issues degrading tones
- Instructions not handling DTMF variable
- Verify DTMF Support toggle is ON
- Increase tone duration to 150-200ms
- Test from different phone/network
- Check logs to confirm
wait_for_dtmf_inputtool is registered and invoked - Verify
session.userdata.last_dtmf_inputis being populated in worker logs
Wrong Digits Captured
Wrong Digits Captured
- Inter-tone gap too short (tones blending)
- Background noise creating false tones
- Customer pressing keys too rapidly
- Increase inter-tone gap to 100-150ms
- Test in quiet environment
- Increase timeout to slow customer entry
- Add validation and confirmation in instructions
IVR Navigation Failing
IVR Navigation Failing
Clear Key Not Working
Clear Key Not Working
- Clear key not configured properly
- Clear key pressed in Menu mode (not applicable)
- * assigned as termination key (conflict)
- Verify clear key is set to * in Collector mode
- Ensure mode is Collector (clear key only works in Collector)
- Don’t use * as both clear and termination key
Best Practices
Always Offer Voice Fallback
Always Offer Voice Fallback
- Mobile phones in poor signal areas
- VoIP apps without keypad
- Accessibility needs
- Preference for voice interaction
Confirm Received Input
Confirm Received Input
Clear Instructions for DTMF Prompts
Clear Instructions for DTMF Prompts
- What to enter (account number, PIN, selection)
- How many digits (if fixed length)
- Termination key (if applicable)
- Alternative method (voice)
Start with Conservative Timing
Start with Conservative Timing
- Start with recommended defaults
- Deploy to small test group
- Monitor for DTMF errors in logs
- Adjust timing based on actual failures
- Roll out optimized settings
- Set very fast timing without testing
- Assume all IVRs behave the same
- Optimize for speed over reliability
Handle Retries Gracefully
Handle Retries Gracefully
- Give up after single failure
- Repeat exact same instructions (not helpful)
- Get stuck in infinite retry loop