https://retellai.com/?utm_source=discord&utm_medium=seo logo
I am trying to transfer a call with a custom llm b...
# ❓・ai-evy-support
u
@AI Evy I am trying to transfer a call with a custom llm but they have an ivr I want to navigate the ivr but i don't know how since I am using a custom llm.
a
Thanks for tagging me @-Ace. I'll look through relevant sources and get back to you shortly.
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
### Answer When using a custom LLM and transferring calls to destinations with IVR systems, you can navigate the IVR by sending DTMF tones (digit presses) through the LLM WebSocket. [(1) ]() To press digits after a transfer, use the
digit_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.
u
@AI Evy I tried using digit to press but it didn't navigate the ivr so what should i do?
a
Thanks for the follow-up, @-Ace. I'll get back to you soon.
### Answer When using
digit_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.
​ To learn more, see the sources I considered: [[1] LLM WebSocket](https://docs.retellai.com/api-references/llm-websocket) [[2] IVR navigation assistance](https://discord.com/channels/1186424376300679209/1311341427665534998) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
u
@AI Evy Here is my logic: elif func_call["func_name"] == "transfer_call": yield ResponseResponse( response_id=request.response_id, content="", content_complete=True, no_interruption_allowed=True, end_call=False, # Don't hang up yet! transfer_number=agency_numbers.get(self.agency), show_transferee_as_caller=True, digit_to_press="1", ) The call is being transferred but the IVR is being navigated. I think the call is ending before the digit is being pressed because I will hear a beep then a couple seconds later another beep then I will hear the IVR and nothing will happen.
a
Thanks for the follow-up, @-Ace. I'll get back to you soon.
### Answer Based on the available documentation, there's a fundamental limitation with your approach: IVR navigation after a call transfer is not currently supported. [(1) ]() The Press Digit functionality works specifically for outbound calls where the AI agent encounters an IVR system directly, not for navigating an IVR after transferring the call to another number. [(2) ]() [(1) ]() According to community discussions, when users attempted to transfer a call to an IVR-enabled number and then navigate it, the feature did not work as expected. This capability is on the roadmap but not yet available. [(1) ]() Why your code isn't working: The
digit_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 custom
telephony integration and isn't directly supported through Retell's transfer_number parameter. The beeping you're hearing suggests the transfer is completing, but the digit press isn't being sent to the transferred call leg—which aligns with the known limitation.
​ To learn more, see the sources I considered: [[1] IVR navigation assistance](https://discord.com/channels/1186424376300679209/1311341427665534998) [[2] Press digit (IVR navigation)](https://docs.retellai.com/build/single-multi-prompt/press-digit) [[3] LLM WebSocket](https://docs.retellai.com/api-references/llm-websocket) [[4] Hi I want to transfer a call to an extension to an extension so phoneNumber](https://discord.com/channels/1186424376300679209/1302835833551851540) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
u
@AI Evy So how can I have it work because the AI agent already makes an outbound call to someone and will talk to them but if it can't help them it will transfer the call but have to navigate the ivr
a
Thanks for the follow-up, @-Ace. I'll get back to you soon.
### Answer Based on the current documentation, navigating an IVR after a warm transfer is not supported when using Custom LLM integration. [(1) ]() The
digit_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:
Copy code
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,
)
The extension must consist of digits 0-9, '*', or '#' (e.g., "123#") . 2. Configure Navigate IVR in Warm Transfer Settings For warm transfers (non-agentic) , you can provide a "Navigate IVR" prompt to help navigate if the transfer target is an IVR system. However, this setting is configured at the agent level in the dashboard, not through the Custom LLM WebSocket. 3. Custom Telephony Implementation If neither option works for your use case, you would need to handle the transfer and IVR navigation through your own telephony provider logic, as mentioned in the community discussion. [(1) ]() With Custom LLM integration, you don't have direct access to Retell's transfer call feature controls, [(5) ]() so implementing custom transfer logic with your telephony provider may be necessary. [(6) ]() The limitation you're experiencing—where the call transfers but the digit isn't pressed—is a known gap in the current Custom LLM integration. [(1) ]() **
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
u
@AI Evy How do I warm transfer in a custom llm? I don't see anything about that in the docs
a
Thanks for the follow-up, @-Ace. I'll get back to you soon.
### Answer Based on the available sources, warm transfer is not directly supported in Custom LLM integrations. [(1) ]() When using Custom LLM via the LLM WebSocket, you can only perform cold transfers by setting the
transfer_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) ]()
Copy code
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) ]()
​ To learn more, see the sources I considered: [[1] Phone transfer with custom LLM](https://discord.com/channels/1186424376300679209/1395018119050952825) [[2] LLM WebSocket](https://docs.retellai.com/api-references/llm-websocket) [[3] Keep AI Agent on the Line During Warm Transfer](https://community.retellai.com/t/keep-ai-agent-on-the-line-during-warm-transfer/173) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.