trxgames
12/14/2025, 10:40 PMAI Evy
12/14/2025, 10:40 PMAI Evy
12/14/2025, 10:40 PMAI Evy
12/14/2025, 10:40 PMAI Evy
12/14/2025, 10:40 PMAI Evy
12/14/2025, 10:41 PMtrxgames
12/14/2025, 10:42 PMtrxgames
12/14/2025, 10:42 PMAI Evy
12/14/2025, 10:42 PMAI Evy
12/14/2025, 10:43 PMinbound_agent_id set. If inbound_agent_id is null, the number will not accept inbound calls.
2. Confirm the agent is properly bound — You can retrieve your phone number details to check the configuration:
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const phoneNumberResponse = await client.phoneNumber.retrieve('+14157774444') ;
console.log(phoneNumberResponse.inbound_agent_id) ;
3. Assign an agent if missing — In your Retell dashboard, make sure you've assigned an agent to handle inbound calls on that number. [(2) ]()
If the inbound_agent_id shows as configured but you're still getting busy signals, this could indicate a temporary issue similar to what other users have experienced with inbound calls suddenly not working. [(7) ]()AI Evy
12/14/2025, 10:43 PMAI Evy
12/14/2025, 10:43 PMAI Evy
12/14/2025, 11:15 PMtrxgames
12/14/2025, 11:15 PMAI Evy
12/14/2025, 11:15 PMAI Evy
12/14/2025, 11:15 PMAI Evy
12/14/2025, 11:15 PMtrxgames
12/14/2025, 11:16 PMAI Evy
12/14/2025, 11:16 PMAI Evy
12/14/2025, 11:16 PMAI Evy
12/14/2025, 11:16 PMcall_ended webhook includes:
- call_id
- from_number (caller phone)
- to_number
- transcript
- metadata (for custom data like email)
- All fields from the call object except call_analysis
Sample payload structure:
json
{
"event": "call_ended",
"call": {
"call_type": "phone_call",
"from_number": "+12137771234",
"to_number": "+12137771235",
"direction": "inbound",
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
"agent_id": "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD",
"call_status": "registered",
"metadata": {},
"retell_llm_dynamic_variables": {
"customer_name": "John Doe"
},
"start_timestamp": 1714608475945,
"end_timestamp": 1714608491736,
"disconnection_reason": "user_hangup",
"transcript": "..."
}
}
For email or custom data:
Pass it via metadata or retell_llm_dynamic_variables when initiating the call—these will appear in the webhook payload.
For post-call analysis (summary, sentiment, etc.) :
Subscribe to the call_analyzed webhook event, which includes the call_analysis object with summary, sentiment, and custom analysis data. [(2) ]()
Webhook setup:
Configure your webhook URL in the agent settings, and Retell will POST to your endpoint. The webhook has a 10-second timeout and retries up to 3 times if no 2xx response is received. [(1) ]()AI Evy
12/14/2025, 11:16 PMtrxgames
12/14/2025, 11:18 PMAI Evy
12/14/2025, 11:18 PMAI Evy
12/14/2025, 11:18 PMAI Evy
12/14/2025, 11:18 PMAI Evy
12/14/2025, 11:18 PMtrxgames
12/14/2025, 11:21 PMAI Evy
12/14/2025, 11:21 PMAI Evy
12/14/2025, 11:21 PM1427703 is your event type ID
API Key:
- Go to "Settings" → "Developer" → "API Keys" to retrieve your API key
Step 4: Add Functions in Retell
Add both the Check Calendar Availability and Book Calendar functions to your agent with: [(1) ]() [(2) ]()
- Tool name (must be unique within that agent)
- API Key from Cal.com
- Event Type ID
- Tool description
- (Optional) Timezone
Step 5: Update Your Prompt
Include explicit instructions for when to invoke each function. Example prompts:
When user stated a time range, please check the calendar availability by calling the `check_calendar_availability` function and let user know whether that range work or not.
[(2) ]()
When user selected a slot, please book the appointment by calling the `book_appointment` function.AI Evy
12/14/2025, 11:21 PMAI Evy
12/14/2025, 11:21 PMtrxgames
12/14/2025, 11:24 PMAI Evy
12/14/2025, 11:24 PMAI Evy
12/14/2025, 11:25 PMcall_analyzed webhook event — this carries the transcript and call details after the call ends [(2) ]()
3. Connect to an email service via your automation tool to send the transcript
Webhook payload includes:
The call_ended and call_analyzed webhooks contain the transcript field. [(3) ]() [(4) ]() [(5) ]()
Example transcript format from the payload:
json
"transcript": "Agent: hi how are you doing?\nUser: Doing pretty well. How are you?\nAgent: That's great to hear! I'm doing well too, thanks! What's up?\nUser: I don't have anything in particular.\nAgent: Got it, just checking in!\nUser: Alright. See you.\nAgent: have a nice day"AI Evy
12/14/2025, 11:25 PMtranscript and call_id fields
- Sends an email using an email module (Gmail, SMTP, etc.)
Note: Make sure your Data Storage Settings are set to "Everything" or "Everything except PII" — if set to "Basic Attributes Only", transcripts won't be stored or available. [(3) ]()AI Evy
12/14/2025, 11:25 PMAI Evy
12/14/2025, 11:25 PMAI Evy
12/15/2025, 12:04 AMtrxgames
12/15/2025, 12:04 AMAI Evy
12/15/2025, 12:05 AMAI Evy
12/15/2025, 12:05 AMcall_analyzed webhook event, you register a webhook endpoint and Retell automatically sends all event types (including call_analyzed) to that endpoint. [(1) ]()
Steps:
1. Create your server endpoint
Set up an HTTP/HTTPS endpoint that accepts POST requests:
javascript
import { Retell } from "retell-sdk";
import express, { Request, Response } from "express";
const app = express() ;
app.use(express.json() ) ;
app.post("/webhook", (req: Request, res: Response) => {
const {event, call} = req.body;
switch (event) {
case "call_started":
console.log("Call started event received", call.call_id) ;
break;
case "call_ended":
console.log("Call ended event received", call.call_id) ;
break;
case "call_analyzed":
console.log("Call analyzed event received", call.call_id) ;
break;
default:
console.log("Received an unknown event:", event) ;
}
// Acknowledge the receipt of the event
res.status(204) .send() ;
}) ;
2. Deploy your endpoint online
Use a service like Ngrok to make your local endpoint accessible:
bash
ngrok http <http://localhost:8080>
3. Register your webhook endpoint
You have two options:
- **Account level webhook**: Set up through system settings → webhooks tab (applies to all agents)
- **Agent level webhook**: Set up through the dashboard's agent detail page (overrides account level for that agent)
4. Verify your webhook
Start a web call in the dashboard to verify the webhook triggers correctly.AI Evy
12/15/2025, 12:05 AMtrxgames
12/15/2025, 1:24 PMAI Evy
12/15/2025, 1:24 PMAI Evy
12/15/2025, 1:24 PMcall_id, from_number, to_number, direction
- transcript, transcript_object (with word-level timestamps)
- start_timestamp, end_timestamp, duration_ms
- recording_url, call_analysis (summary, sentiment)
- metadata, retell_llm_dynamic_variables
Note: The webhook has a 10-second timeout and retries up to 3 times if no 2xx response is received. [(1) ]()AI Evy
12/15/2025, 1:24 PMcall_ended — triggered when a call completes, includes transcript, caller phone, call_id, timestamps, etc.
- call_analyzed — triggered when post-call analysis is complete, includes call summary, sentiment, and custom analysis data
Sample webhook payload structure:
json
{
"event": "call_ended",
"call": {
"call_type": "phone_call",
"from_number": "+12137771234",
"to_number": "+12137771235",
"direction": "inbound",
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
"agent_id": "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD",
"call_status": "registered",
"metadata": {},
"retell_llm_dynamic_variables": {
"customer_name": "John Doe"
},
"start_timestamp": 1714608475945,
"end_timestamp": 1714608491736,
"disconnection_reason": "user_hangup",
"transcript": "..."
}
}AI Evy
12/15/2025, 1:24 PMAI Evy
12/15/2025, 1:24 PMtrxgames
12/15/2025, 10:36 PMAI Evy
12/15/2025, 10:36 PMAI Evy
12/15/2025, 10:36 PMfrom_number (your Retell number) and to_number (destination) :
javascript
const registerCallResponse = await retell.call.createPhoneCall({
from_number: '+14157774444', // replace with the number you purchased
to_number: '+12137774445', // replace with the number you want to call
// Optional: per-call agent selection and overrides
override_agent_id: 'agent_abc123',
override_agent_version: 0, // or omit to use latest
agent_override: {
agent: {
voice_speed: 1.1,
enable_backchannel: true,
},
// retell_llm or conversation_flow overrides are also supported
},
retell_llm_dynamic_variables: { // dynamic variables (optional, string values only)
name: 'John Doe',
blood_group: 'B+'
},
custom_sip_headers: { // replace with custom sip headers you want to send (optional)
X-Custom-Header: 'Custom Value'
}
}) ;
console.log(registerCallResponse) ;AI Evy
12/15/2025, 10:36 PMAI Evy
12/15/2025, 10:36 PMAI Evy
12/15/2025, 10:36 PMAI Evy
12/15/2025, 10:48 PMtrxgames
12/15/2025, 10:48 PMAI Evy
12/15/2025, 10:48 PMagent_id, agent_version, from_number, and to_number. [(1) ]()
For full call details (transcript, notes, etc.) :
You need to use a different webhook at the agent level that listens for call_ended or call_analyzed events—not the inbound webhook. [(2) ]()
The call_analyzed webhook provides: [(3) ]()
- transcript (full text)
- transcript_object (with timestamps)
- call_analysis (summary, sentiment, custom analysis data)
- from_number, to_number, call_id, duration_ms, etc.
For email and full name:
These aren't automatically captured. You have two options:
1. Pass them via the inbound webhook response using dynamic_variables or metadata if you already have this data in your system: [(1) ]()
json
{
"call_inbound": {
"dynamic_variables": {
"customer_name": "John Doe"
},
"metadata": {
"email": "john@example.com"
}
}
}
2. Use Post-Call Analysis to extract name/email from the conversation—configure custom fields in your agent's post-call analysis settings, then access them in the call_analyzed webhook. [(2) ]()
Summary: Set up a separate webhook at the agent level for call_analyzed to get transcripts and analysis data. The inbound webhook is only for pre-call routing/context injection.AI Evy
12/15/2025, 10:48 PMAI Evy
12/15/2025, 10:48 PMtrxgames
12/15/2025, 10:51 PMAI Evy
12/15/2025, 10:51 PMAI Evy
12/15/2025, 10:51 PMwebhook_url parameter: [(2) ]()
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const agentResponse = await client.agent.create({
response_engine: { llm_id: 'llm_234sdertfsdsfsdf', type: 'retell-llm' },
voice_id: '11labs-Adrian',
webhook_url: '<https://webhook-url-here',>
webhook_timeout_ms: 10000,
}) ;
Key parameters:
- `webhook_url`: The webhook URL for the agent to listen to call events. If set, it binds webhook events for this agent to the specified URL and ignores the account level webhook. Set to null to remove.
- `webhook_timeout_ms`: Timeout for the webhook in milliseconds. Default is 10,000 ms.
Webhook events sent to your endpoint: [(3) ]()
- call_started — when a call begins
- call_ended — when a call completes (includes transcript, from_number, etc.)
- call_analyzed — when post-call analysis is complete (includes full call_analysis object)
The webhook has a 10-second timeout and retries up to 3 times if no 2xx response is received.AI Evy
12/15/2025, 10:51 PMAI Evy
12/15/2025, 10:51 PMtrxgames
12/15/2025, 11:31 PMAI Evy
12/15/2025, 11:31 PMAI Evy
12/15/2025, 11:31 PMfrom_number parameter. [(1) ]()
Most common cause:
The from_number must be a phone number purchased through Retell or imported to Retell—you cannot use an arbitrary number. [(2) ]()
Verify your HTTP request in Make:
1. Endpoint URL: ` [(1) ]()
2. Headers:
- Authorization: Bearer <your_api_key>
- Content-Type: application/json
3. Payload structure:
json
{
"from_number": "+14157774444",
"to_number": "+12137774445",
"override_agent_id": "agent_71724df7636716ceb3a7e244c8"
}
[(2) ]()
Key things to check:
- from_number must be a Retell-managed number (purchased or imported) , not just any phone number [(2) ]() [(1) ]()
- The phone number should have an outbound_agent_id configured, or you need to use override_agent_id in your request [(2) ]()
- Use override_agent_id (not agent_id)
- All phone numbers must be in E.164 format (e.g., "+14157774444") [(3) ]()
If using Twilio numbers:
Ensure you've completed the Twilio profile verification—create a primary customer profile, verify it, and assign the phone number to that profile. [(7) ]()AI Evy
12/15/2025, 11:31 PMAI Evy
12/15/2025, 11:31 PM