Skadoo
12/23/2025, 2:40 PMAI Evy
12/23/2025, 2:41 PMAI Evy
12/23/2025, 2:41 PMsip:sip.retellai.com
2. Move Numbers to Elastic SIP Trunk
- Purchase new numbers or move existing numbers to your trunk in Twilio
3. Import Number to Retell
- Supply the termination SIP URI you configured
- If using credential auth, provide the username and password
You can import via the dashboard or programmatically:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const phoneNumberResponse = await client.phoneNumber.import({
phone_number: '+14157774444',
termination_uri: 'someuri.pstn.twilio.com',
}) ;
[(2) ]()
Once imported, the number appears in your dashboard and can make/receive calls like a Retell-purchased number. [(1) ]()
Common Issues
- Remove any spaces in your Termination SIP URI
- Verify the username (not the friendly name) and credentials are correctAI Evy
12/23/2025, 2:41 PMAI Evy
12/23/2025, 2:41 PMSkadoo
12/23/2025, 2:43 PMAI Evy
12/23/2025, 2:43 PMAI Evy
12/23/2025, 2:43 PMAI Evy
12/23/2025, 2:43 PMAI Evy
12/23/2025, 2:43 PMSkadoo
12/23/2025, 2:46 PMAI Evy
12/23/2025, 2:46 PMAI Evy
12/23/2025, 2:46 PM+12125551234)
3. Choose Transfer Type
- Select Cold transfer — the call transfers directly without AI interaction
4. Update the Prompt
- In your agent prompt, add an instruction like:
> "Immediately use the transfer_call tool to transfer every incoming call. Do not engage in conversation."
This tells the agent to transfer right away without speaking to the caller. [(1) ]() [(2) ]()
Optional: Caller ID Configuration [(1) ]()
- You can configure which caller ID shows up to you:
- **Retell Agent's number**: You'll see your Retell number
- **User's Number**: You'll see the original caller's number (Retell Twilio numbers support this on both warm and cold transfer)
Once configured, when Yelp calls your Retell number, the AI will immediately transfer to your personal phone so you can complete verification.AI Evy
12/23/2025, 2:46 PMAI Evy
12/23/2025, 2:46 PMSkadoo
12/23/2025, 2:54 PMAI Evy
12/23/2025, 2:54 PMAI Evy
12/23/2025, 2:54 PMbegin_message so the agent speaks first (e.g., "Hello, please hold while I connect you.")
- This ensures the agent initiates the conversation rather than waiting silently
2. Set Agent to Speak First
- Set start_speaker to "agent" so the AI begins the conversation immediately
3. Update Your Prompt [(2) ]()
- Make the instruction explicit:
> "Say 'Hello, one moment please' and then immediately use the transfer_call tool to transfer the call."
4. If Using User Speaks First [(1) ]()
- You can set begin_after_user_silence_ms to a value like 2000 (2 seconds) so the agent will begin speaking if the user is silent for that duration
The key is ensuring the agent has a reason to speak and trigger the tool call. Without a begin message or prompt to speak first, the agent may wait indefinitely for user input, causing silence. [(1) ]()AI Evy
12/23/2025, 2:54 PMAI Evy
12/23/2025, 2:54 PMSkadoo
12/23/2025, 3:04 PMAI Evy
12/23/2025, 3:04 PMAI Evy
12/23/2025, 3:05 PMAI Evy
12/23/2025, 3:05 PMbegin_message and remove dynamic generation [(1) ]() [(2) ]()
- Set begin_message to exactly what you want (e.g., "Please hold while I connect you.")
- This prevents the LLM from dynamically generating additional messages [(2) ]()
2. Simplify your prompt
- Make the prompt extremely direct:
> "Immediately transfer the call using the transfer_call tool. Do not say anything else. Do not respond to the caller."
3. Reduce responsiveness [(3) ]() [(4) ]()
- Lower the responsiveness value (e.g., 0.5 or lower) to slow down how quickly the agent tries to respond again [(5) ]()
4. Remove the begin message delay
- Set begin_message_delay_ms to 0 so there's no pause before speaking [(3) ]() [(4) ]()
- The 2-second pause may be giving the LLM time to generate additional responses
5. Set reminder_max_count to 0
- This disables reminder messages if the user is silent
The key is ensuring the prompt instructs the agent to only call the transfer tool immediately after the begin message and say nothing else.AI Evy
12/23/2025, 3:05 PMSkadoo
12/23/2025, 3:09 PMAI Evy
12/23/2025, 3:10 PMSkadoo
12/23/2025, 3:10 PMAI Evy
12/23/2025, 3:10 PMbegin_message_delay_ms is the "pause before speaking" setting. [(1) ]() [(2) ]()
begin_message_delay_ms
- If set, will delay the first message by the specified amount of milliseconds, so that it gives user more time to prepare to take the call. Valid range is [0, 5000]. If not set or set to 0, agent will speak immediately. Only applicable when agent speaks first.
- Note: The value is in milliseconds, so 2 seconds = 2000. [(3) ]()
responsiveness
- Controls how responsive the agent is. Value ranging from [0,1]. Lower value means less responsive agent (wait more, respond slower) , while higher value means faster exchanges (respond when it can) . If unset, default value 1 will apply. [(1) ]() [(2) ]()
Both settings are configured at the Voice Agent level (not the LLM level) . In the dashboard, look for these in your agent's settings. Via API, you set them when creating or updating the agent:
javascript
const agentResponse = await client.agent.update('YOUR_AGENT_ID', {
begin_message_delay_ms: 0,
responsiveness: 0.5
}) ;
[(1) ]()AI Evy
12/23/2025, 3:10 PMAI Evy
12/23/2025, 3:10 PMSkadoo
12/23/2025, 3:15 PMAI Evy
12/23/2025, 3:15 PMAI Evy
12/23/2025, 3:15 PMskip response turned on that says "Let me transfer you right away"
2. Connect it directly to a Call Transfer Node
3. The Call Transfer Node executes the transfer without waiting for user response
Why this works better:
- The Call Transfer Node transfers immediately without LLM turn-taking behavior
- Transition only happens if transfer fails (there's a pre-populated edge for handling failures)
Alternative if staying with Single/Multi Prompt:
You can also try using the Inbound Call Webhook to immediately return a transfer destination without engaging the AI at all. [(3) ]()
The Conversation Flow approach gives you deterministic control over when the transfer happens, bypassing the LLM's tendency to wait for responses.AI Evy
12/23/2025, 3:15 PMAI Evy
12/23/2025, 3:15 PMSkadoo
12/23/2025, 3:17 PMAI Evy
12/23/2025, 3:17 PMAI Evy
12/23/2025, 3:17 PMbegin_message dynamically that triggers the transfer.
Important Notes:
- The webhook has a 10-second timeout and retries up to 3 times
- The call stays in ringing state until your webhook responds
- If the webhook fails and no inbound agent is set, the call disconnects
- Your response must include call_inbound.override_agent_id to pick up the call; omit it to rejectAI Evy
12/23/2025, 3:17 PMinbound_webhook_url field.
[(2) ]()
2. Webhook Behavior
[(3) ]()
When an inbound call comes in, Retell will POST to your endpoint with this payload:
json
{
"event": "call_inbound",
"call_inbound": {
"agent_id": "agent_12345",
"agent_version": 1,
"from_number": "+12137771234",
"to_number": "+12137771235"
}
}
3. Your Response
Respond with a JSON object containing call_inbound. You can override the agent, set dynamic variables, or use agent_override to modify behavior for this specific call:
json
{
"call_inbound": {
"override_agent_id": "agent_12345",
"override_agent_version": 1,
"agent_override": {
"agent": {
"voice_id": "11labs-Adrian",
"max_call_duration_ms": 1800000
},
"retell_llm": {
"model": "gpt-4o-mini",
"begin_message": "Hi {{customer_name}}, thanks for calling."
}
},
"dynamic_variables": {
"customer_name": "John Doe"
},
"metadata": {
"random_id": "12345"
}
}
}AI Evy
12/23/2025, 3:17 PMAI Evy
12/23/2025, 3:17 PM