https://retellai.com/?utm_source=discord&utm_medium=seo logo
Hmm.. Seems like I didn't receive a
# ❓・ai-evy-support
a
Hmm.. Seems like I didn't receive a question. Please start a new thread with your question.
d
@AI Evy we are trying to setup the call transfer functionality but after asking for the transfer the phone never ends up ringing on the other end
a
Thanks for the follow-up, @Dom4o. I'll get back to you soon.
### Answer There are several things to check when call transfers aren't completing: ## Configuration Checks 1. Transfer Destination Format Ensure your transfer number is in E.164 format (e.g.,
+12137771234
) or a valid SIP URI in the format
sip:username@domain
. [(1) ]() [(2) ]() 2. Transfer Type Setup - For **cold transfer**: The call is transferred to the destination and ends there. - For **warm transfer**: The AI agent can detect if the other side is human, leave private messages, etc. *3. SIP Trunk Configuration (if using custom telephony) * If you're using Elastic SIP Trunking, verify your termination settings in your SIP trunking provider. [(3) ]() For cold transfers, SIP REFER is used. You need to configure your SIP trunking provider to allow SIP REFER and PSTN transfer. 4. Required Fields A recent Discord thread revealed that missing the
transfer_option
field when creating the transfer call tool via API can cause issues—the API may not reject the request but the transfer won't work correctly. Make sure you're using the latest SDK and including all required fields. [(4) ]() ## Troubleshooting Steps - Check the logs in your telephony provider for any errors. [(3) ]() - Verify your termination SIP URI is correct and has no extra spaces. [(5) ]() - If using caller ID override (showing user's number to transfer destination) , confirm your telephony provider supports this—if not supported, the transfer may fail. [(1) ](https://
docs.retellai.com/build/single-multi-prompt/transfer-call) [(2) ]() ## If Using Dial to SIP Method Note that if you're using the "Dial to SIP URI" method instead of Elastic SIP Trunking, you cannot use Retell's built-in transfer call feature. You would need to implement your own transfer logic via a custom function. [(3) ]() Can you share more details about your setup (Retell numbers vs. imported numbers, SIP trunk provider, cold vs. warm transfer) ?
​ To learn more, see the sources I considered: [[1] Transfer call](https://docs.retellai.com/build/single-multi-prompt/transfer-call) [[2] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) [[3] Custom Telephony Overview](https://docs.retellai.com/deploy/custom-telephony) [[4] GeneralToolTransferCallTool is being created but the agent is calling the wrong number.](https://discord.com/channels/1186424376300679209/1392948823155933214) [[5] I’m trying to use a toll-free number (connected from Twilio through a SIP trunk)](https://retell.discourse.group/t/i-m-trying-to-use-a-toll-free-number-connected-from-twilio-through-a-sip-trunk/127) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
where do i need to use the API exactly
@AI Evy where do i need to use the API exactly for call transfering
a
Thanks for the follow-up, @Dom4o. I'll get back to you soon.
### Answer You don't necessarily need to use the API for call transfers—there are two main approaches: ## Option 1: No-Code (Dashboard UI) You can set up call transfers directly in the Retell dashboard without any API calls: For Single/Multi-Prompt Agents: - Click "+ Add" in the tools section and select "Transfer Call" from the dropdown menu [(1) ]() - Configure the transfer number in E.164 format (e.g.,
+12137771234
) or SIP URI - Choose cold or warm transfer For Conversation Flow Agents: - Add a Call Transfer Node to your flow [(2) ]() - Configure the transfer destination and settings in the node ## Option 2: Using the API (Programmatic Setup) If you're creating agents programmatically, you would use the API when creating the LLM with general tools. Here's an example from the documentation: [(3) ]()
Copy code
python
general_tools = [
    {
        "type": "transfer_call",
        "name": "transfer_to_maddie",
        "description": "Transfer the call to Maddie, our consultant.",
        "transfer_destination": {
            "type": "predefined",
            "number": settings.HUMAN_TRANSFER_PHONE_NUMBER,
        },
    },
]

llm_response = self.client.llm.create(
    model="gpt-4o",
    general_prompt=system_prompt,
    general_tools=general_tools,
)
Important: Make sure to include the
transfer_option
field and use the latest SDK—missing required fields can cause transfers to silently fail. If you're just getting started, the dashboard approach is simpler. Which method are you currently using?
​ To learn more, see the sources I considered: [[1] Transfer call](https://docs.retellai.com/build/single-multi-prompt/transfer-call) [[2] Call Transfer Node](https://docs.retellai.com/build/conversation-flow/call-transfer-node) [[3] GeneralToolTransferCallTool is being created but the agent is calling the wrong number.](https://discord.com/channels/1186424376300679209/1392948823155933214) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy we are using option one but the call doesnt go through to the number we are trying to transfer to. when i check the logs in twillio i cannot see any logs for an outbound call to the transfer number
a
Thanks for the follow-up, @Dom4o. I'll get back to you soon.
### Answer If no outbound call attempt is appearing in Twilio logs at all, the issue is likely with your **SIP trunk termination configuration**—the transfer request isn't reaching Twilio. ## Key Things to Check 1. Verify Termination Settings in Twilio [(1) ]() For outbound calls (including transfers) , you need proper termination settings configured on your elastic SIP trunk. Check that: - Your termination SIP URI is correct and has no extra spaces [(2) ]() - Authentication credentials (username/password) match what you provided when importing the number to Retell 2. Confirm the Number Was Imported Correctly [(1) ]() When you imported your Twilio number to Retell, you needed to supply the termination SIP URI. If this wasn't configured correctly, outbound transfer calls won't route through Twilio. [(3) ]() 3. Check Retell's Call Logs [(4) ]() The SIP connection log is available in Retell's call logs and is useful for diagnosing the failure reason. Look there for any error messages about the transfer attempt. 4. International Dialing Permissions [(2) ]() If you're transferring to an international number, verify you've enabled Voice Geographic Permissions in Twilio (search "geo" in Twilio settings) . ## Workaround [(5) ]() If call transfers aren't working on your current setup, one temporary workaround mentioned in the co
mmunity is to set up Elastic SIP trunking fresh or switch to warm transfers instead of cold transfers. Can you check Retell's call logs for the SIP connection details and share what error (if any) appears there?
​ To learn more, see the sources I considered: [[1] Custom Telephony Overview](https://docs.retellai.com/deploy/custom-telephony) [[2] I’m trying to use a toll-free number (connected from Twilio through a SIP trunk)](https://retell.discourse.group/t/i-m-trying-to-use-a-toll-free-number-connected-from-twilio-through-a-sip-trunk/127) [[3] Import Phone Number](https://docs.retellai.com/api-references/import-phone-number) [[4] Debug call transfer failure](https://docs.retellai.com/reliability/call-performance) [[5] Discord message from @deleted_user_0146c9cc2de2 on 2025-02-28](https://discord.com/channels/1186424376300679209/1186462578310910112/1344910139475497053) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
d
@AI Evy what do we use for the termination sip uri exactly?
a
Thanks for the follow-up, @Dom4o. I'll get back to you soon.
### Answer The termination SIP URI is the unique identifier for your elastic SIP trunk that Retell uses for outbound calls (including transfers) . [(1) ]() [(2) ]() ## For Twilio Specifically The termination URI for Twilio elastic SIP trunks always ends with
.pstn.twilio.com
. [(2) ]() [(3) ]() The format is:
Copy code
someuri.pstn.twilio.com
[(2) ]() ## Where to Find It You get this URI from your Twilio console when you create your elastic SIP trunk. It's set up in the Termination section of your SIP trunk configuration. [(3) ]() ## When Importing to Retell When you import your phone number to Retell, you provide this termination URI:
Copy code
javascript
const phoneNumberResponse = await client.phoneNumber.import({
  phone_number: '+14157774444',
  termination_uri: 'someuri.pstn.twilio.com',
}) ;
[(2) ]() The
termination_uri
field is required when importing a phone number for custom telephony. If you haven't set up a termination SIP URI in Twilio yet, you'll need to create one in your Twilio elastic SIP trunk settings first, then use that URI when importing the number to Retell.
​ To learn more, see the sources I considered: [[1] Custom Telephony Overview](https://docs.retellai.com/deploy/custom-telephony) [[2] Import Phone Number](https://docs.retellai.com/api-references/import-phone-number) [[3] I’m trying to use a toll-free number (connected from Twilio through a SIP trunk)](https://retell.discourse.group/t/i-m-trying-to-use-a-toll-free-number-connected-from-twilio-through-a-sip-trunk/127) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.