- Audio-input IVR accepts spoken responses. Your agent handles these through normal prompting, with no tool needed.
- DTMF-input IVR requires keypad presses. This is what the Press Digit tool is for.
When to use it
Add the Press Digit tool when a single-prompt or multi-prompt voice agent places outbound calls that pass through DTMF phone menus, such as reaching a scheduling line, entering an extension or account number, or navigating a partner’s support tree to a live rep. Reach for a different feature when:- You’re building a conversation flow agent. Use the Press Digit Node instead, which handles IVR navigation as a dedicated node with its own transitions.
- You want to capture digits the caller presses, like a PIN or menu choice, rather than press digits yourself. See Capture DTMF input from user.
- You just want the agent to hang up when it hits an IVR instead of navigating it. See IVR hangup.
Press Digit is voice-only. It isn’t available for chat agents.
2, enters the patient’s member ID when prompted, and reaches a claims rep without a human ever dialing in.
Steps
1
Add the Press Digit tool
In your agent’s tool settings, add the Press Digit tool. The description is optional. Leave it blank to use the default, or specify when and what to press to steer the agent.
Pause Detection Delay controls how long the agent waits after the IVR pauses before pressing, so it captures the whole menu before deciding. The default is 1000 ms (1 second), and the valid range is 0–5000 ms. Increase it for IVRs that speak slowly or pause mid-menu, so the agent doesn’t press before the options finish.

2
Add navigation prompts
Tell the agent what it’s trying to reach. Include the keywords or phrases to listen for, the ones to avoid, and how to handle an unclear menu.Example prompt:If you already know the exact sequence, tell the agent directly instead:You can press a single digit or a full sequence such as
1234# for an extension, using the keys 0–9, *, and #.3
Add interaction rules
Cover when to press versus speak, and the edge cases like reaching the wrong company, being transferred, or being put on hold.Example prompt:
4
Extract IVR post-call data (optional)
Extract IVR navigation data for reporting and debugging. Add these field-by-field prompts under your agent’s Post-Call Data Extraction settings.

hit_ivr (boolean)
hit_ivr (boolean)
Was an IVR or automated phone system encountered at any point before reaching a human? Count menus, “press 1”, speech menus, automated routing, or virtual assistants as IVR. Do NOT count hold music after a human answers. Output ONLY true or false.
reached_human (boolean)
reached_human (boolean)
Did the caller speak with a real human staff member at any point during the call (not an automated system, recording, voicemail, or virtual assistant)? Output ONLY true or false.
ivr_loop (boolean)
ivr_loop (boolean)
Did the IVR appear to loop or repeat the same menu/prompt due to misunderstanding or invalid input (e.g., repeated “I’m sorry, I didn’t get that” or returning to the main menu multiple times)? Output ONLY true or false.
ivr_type (enum)
ivr_type (enum)
Allowed values:
none | basic_menu | speech_ivr | voicemail_greeting_only | after_hours_message_onlyClassify the type of automated system encountered:- none: no automation, human answered directly
- basic_menu: “press 1/2/3” style DTMF menu
- speech_ivr: system asks spoken questions like “tell me why you’re calling” and responds conversationally
- voicemail_greeting_only: immediately reached voicemail greeting/leave-a-message flow (no menus)
- after_hours_message_only: only an after-hours closed message (may mention hours), without offering routing to staff
ivr_outcome (enum)
ivr_outcome (enum)
Allowed values:
reached_human | left_voicemail | hung_up | blocked_by_ivr | callback_required | transferred | ivr_loop_detected | invalid_extension | after_hours_info_onlyWhat was the final outcome of the IVR/automated navigation portion of the call?- reached_human: successfully got to a human
- left_voicemail: reached voicemail and a message was left or the voicemail prompt occurred as the end state
- hung_up: call ended before any resolution (caller or system disconnected)
- blocked_by_ivr: could not proceed due to IVR requirements or no matching menu option
- callback_required: system instructed to call back later or offered callback as the only option
- transferred: IVR transferred to a line/department (even if later hold)
- ivr_loop_detected: looping prevented progress
- invalid_extension: extension entry failed (invalid/not recognized)
- after_hours_info_only: ended at after-hours info message with no human reached
ivr_steps_count (number)
ivr_steps_count (number)
How many distinct IVR steps occurred (menu prompts or bot questions that required an input/response) before reaching a human or ending? Output ONLY an integer. If none, output 0.
ivr_retries_count (number)
ivr_retries_count (number)
How many times did the IVR/bot request the same input again or say it didn’t understand (e.g., “please repeat”, “invalid entry”, returning to same menu)? Output ONLY an integer. If none, output 0.
ivr_path (text)
ivr_path (text)
Summarize the IVR navigation path as a breadcrumb using > separators, capturing the main menu choices or intents.Example:
Main Menu > Providers > Authorizations > Holdivr_notes (short text)
ivr_notes (short text)
In 1–2 sentences, summarize the key IVR insights that matter operationally (e.g., required identifiers, department options heard, barriers like “portal only”, after-hours).
ivr_tree_text (multiline text)
ivr_tree_text (multiline text)
Create a concise step-by-step IVR tree in numbered lines. Each line must be:
N. Prompt: "<summary>" | Action: "<pressed/said>" | Result: "<next state>".Include only steps that occurred.5
Test your configuration
After saving your agent, test it by either:
- Placing an outbound call to a number with a real IVR, or
- Calling yourself and mimicking an IVR by saying phrases like “Press 1 for customer service.”
Using a custom LLM
If you run your own LLM instead of Retell LLM, you don’t add the Press Digit tool. Instead, setdigit_to_press on your response in the LLM WebSocket protocol, and Retell sends the DTMF tones after the associated content finishes. Have the agent stay silent for that response so it doesn’t speak while pressing. See function calling for a custom LLM for a worked example.
FAQ
Can I hardcode which digit the agent presses?
Can I hardcode which digit the agent presses?
The agent decides at call time by matching the live menu against your prompt, so there’s no preset digit field. If you always want the same press, say so explicitly in the prompt, such as
Press 1 to reach the support department.Which keys can the agent press?
Which keys can the agent press?
Digits
0–9, *, and #. You can send a single key or a sequence in one press, such as an extension like 1234#.Related
- Press Digit Node: the equivalent for conversation flow agents.
- Capture DTMF input from user: accept keypad input from the caller.
- Handle voicemail and IVR: detect voicemails and IVRs, or hang up automatically.
- Function calling: the full set of tools you can add to an agent.

