-Ace
04/29/2026, 11:48 PMAI Evy
04/29/2026, 11:48 PMAI Evy
04/29/2026, 11:49 PMAI Evy
04/29/2026, 11:49 PMAI Evy
04/29/2026, 11:49 PMdigit_to_press field in your response events. This field allows you to send DTMF tones after the content associated with that response is fully spoken.
Here's how to implement it in your custom LLM responses:
For **response events**:
- Set digit_to_press to the input digit or digits you want to send
- Note that you probably don't want the voice agent to speak anything when pressing digits
For **agent interrupt events**:
- Similarly, you can include digit_to_press to send DTMF tones after the interrupt content is fully spoken
The digit_to_press field accepts digits 0-9, '*', and '#'. [(2) ]() [(3) ]()
Keep in mind that when using warm transfers specifically, you can also provide a "Navigate IVR" prompt to help the agent navigate if the transfer target is an IVR system.-Ace
04/29/2026, 11:49 PMAI Evy
04/29/2026, 11:49 PMAI Evy
04/29/2026, 11:49 PMdigit_to_press with a custom LLM, the digit is pressed after the content associated with that response is fully spoken. [(1) ]() If the IVR navigation isn't working, here are key troubleshooting steps:
1. Ensure Content is Empty or Minimal
The digit_to_press field sends DTMF tones after content is spoken. If you want immediate digit pressing without the agent speaking, set content to an empty string "".
2. Verify Response Event Structure
In your LLM WebSocket response event, ensure you're structuring it correctly:
- `response_type`: "response"
- `response_id`: matching the request
- `content`: "" (empty for no speech)
- `content_complete`: true
- `digit_to_press`: the digit(s) to press (e.g., "2")
3. Known Limitation for Post-Transfer IVR
Based on community discussions, there's a known limitation: IVR navigation after a warm transfer is not currently supported. [(2) ]() The Press Digit functionality works for outbound calls where the AI agent encounters an IVR system directly, but not for navigating an IVR after transferring the call to another number that has an IVR.
If you're trying to navigate an IVR post-transfer, this is on the roadmap but not yet available. The workaround would be to have your AI agent make the outbound call directly to the IVR-enabled number and navigate it before any transfer occurs.AI Evy
04/29/2026, 11:50 PMAI Evy
04/29/2026, 11:50 PM-Ace
04/29/2026, 11:53 PMAI Evy
04/29/2026, 11:53 PMAI Evy
04/29/2026, 11:53 PMdigit_to_press field in the LLM WebSocket is designed to send DTMF tones after content is fully spoken during the active call session. [(3) ]() However, when you execute a transfer_number, the call context changes—the AI agent is no longer actively managing the call in the same way, so the digit press doesn't occur at the right time or in the right call leg.
Potential workarounds:
1. **Direct outbound calls**: Instead of transferring, have your AI agent make the outbound call directly to the IVR-enabled number and navigate it before any transfer occurs. [(1) ]()
2. **Warm transfer with extension**: For some telephony providers like Twilio, you can include the extension as part of the dial string using sendDigits. [(4) ]() However, this requires customAI Evy
04/29/2026, 11:53 PMAI Evy
04/29/2026, 11:53 PMAI Evy
04/29/2026, 11:53 PM-Ace
04/29/2026, 11:55 PMAI Evy
04/29/2026, 11:55 PMAI Evy
04/29/2026, 11:55 PMdigit_to_press functionality works for outbound calls where the AI agent directly encounters an IVR, but not for post-transfer IVR navigation. [(2) ]() [(1) ]()
Available options for your scenario:
1. Use Transfer Extension Parameter
For warm transfers, you can set the transfer number extension if the IVR system supports extensions. [(3) ]() [(4) ]() This allows you to automatically navigate to a specific option:
python
yield ResponseResponse(
response_id=request.response_id,
content="",
content_complete=True,
transfer_number=agency_numbers.get(self.agency) ,
transfer_number_extension="1#", # Extension must be 0-9, '*', '#'
show_transferee_as_caller=True,
)AI Evy
04/29/2026, 11:55 PMAI Evy
04/29/2026, 11:55 PMAI Evy
04/29/2026, 11:55 PM-Ace
04/29/2026, 11:56 PMAI Evy
04/29/2026, 11:56 PMAI Evy
04/29/2026, 11:57 PMtransfer_number field in your response event. [(2) ]()
A community discussion confirms that warm transfers (three-way bridging, hold music, and human detection) remain unavailable for Custom LLM integrations. [(1) ]() The suggested workaround is to simulate a warm transfer client-side by:
1. Sending a pre-transfer message from your custom LLM before triggering the transfer
2. Then setting transfer_number in the response event to perform a cold transfer
For reference, here's the cold transfer structure in your response event: [(2) ]()
python
yield ResponseResponse(
response_id=request.response_id,
content="",
content_complete=True,
transfer_number="+1234567890",
show_transferee_as_caller=True,
)
The show_transferee_as_caller field controls how the caller ID appears to the next agent. [(1) ]()
If you need true warm transfer capabilities (where the AI agent stays on the line during transfer) , you would need to use Retell's built-in agent frameworks (Single Prompt or Conversation Flow) instead of Custom LLM integration. [(3) ]()AI Evy
04/29/2026, 11:57 PMAI Evy
04/29/2026, 11:57 PM