DTMF tones are the sounds a phone keypad makes. Tried handles them in both directions:
- Caller to agent. Callers can type digits, such as an account number or a menu choice. The agent receives the digits as the caller's turn.
- Agent to callee. The agent can press digits to move through another company's phone menu.
Keypad input works on phone calls.
Caller keypad input#
Turn on User Keypad Input (DTMF) in Call Settings (allow_user_dtmf, default on). Three options control when a typed sequence is complete:
| Option | Field | Range | Default | Effect |
|---|---|---|---|---|
| Digit limit | user_dtmf_options.digit_limit |
1 to 50, or none | none | The sequence ends after this many digits. |
| Termination key | user_dtmf_options.termination_key |
#, * or none |
none | The sequence ends when this key is pressed. The key itself is not included. |
| Timeout (s) | user_dtmf_options.timeout_ms |
1 to 15 s (1,000 to 15,000 ms) | 1 s | The sequence ends after this long without a new digit. |
Whichever condition happens first ends the sequence. The completed digits, for example 40213, become a caller turn, exactly as if the caller had said them, and the agent replies. Each key press is also recorded as a dtmf item in transcript_with_tool_calls.
Examples#
| Use case | Settings |
|---|---|
| 4-digit PIN | Digit limit 4 |
Account number of varying length, ending in # |
Termination key #, Timeout 5 s |
| Single-key menu ("press 1 for sales") | Digit limit 1 |
Tell the agent in the prompt what to expect: "Ask the caller to enter their 8-digit member number on the keypad, followed by the hash key."
Keypad input interrupts the agent#
With Keypad input interrupts the agent on (allow_dtmf_interruption), a completed key sequence stops the agent mid-sentence. Off by default, so the agent finishes what it is saying first. Turn it on for menus where callers press a key as soon as they hear their option.
Conversation flow nodes can override allow_dtmf_interruption per node.
Press digits in phone menus#
To let the agent navigate an IVR, add a Press Digit (IVR Navigation) function under Functions. The model calls it with the digits to press, based on what the menu says and your prompt.
| Field | Type | Description |
|---|---|---|
type |
press_digit |
|
name, description |
string | Describe when to press: "Press digits to navigate the phone menu towards the billing team." |
delay_ms |
integer 0 to 5000 | Wait before pressing, default 1000 ms, so the menu finishes speaking. |
The model passes the digits in a digit argument. Only 0 to 9, * and # are sent. Digits are sent as RFC 2833 telephone events.
Conversation flows have a press digit node with the same delay_ms. A Custom LLM server can press digits with digit_to_press on a response.
Combine with Interruption Sensitivity set lower, so the menu's own voice does not keep interrupting the agent, and with User speaks first so the agent listens to the menu before acting.
Extensions on transfers#
To reach an extension after a transfer connects, add the digits to the transfer destination's extension field (digits, *, #, and w for a half-second pause). See Functions and tools.
Fields#
| Field | Type | Default |
|---|---|---|
allow_user_dtmf |
boolean | true |
user_dtmf_options.digit_limit |
integer 1 to 50 or null | null |
user_dtmf_options.termination_key |
string or null | null |
user_dtmf_options.timeout_ms |
integer 1000 to 15000 | 1000 |
allow_dtmf_interruption |
boolean | not set (off) |
curl -X PATCH https://api.tried.com.au/update-agent/agent_3f1c9a7b2d4e6f8091a2b3c4 \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "allow_user_dtmf": true, "user_dtmf_options": { "digit_limit": 8, "termination_key": "#", "timeout_ms": 5000 } }'Needs keys Keypad input and digit pressing travel over SIP, so they need telephony configured. They do not apply to web calls.