TheScrutiniser
01/19/2026, 11:49 AMAI Evy
01/19/2026, 11:49 AMAI Evy
01/19/2026, 11:50 AMcallback_ts is likely related to how the prompt instructs the agent to interpret and confirm date/time information from the user.
Based on the multi-prompt agent approach, you should explicitly define confirmation logic in your prompt to ensure the agent correctly captures and verifies the date/time before storing it. [(1) ]()
Here's how you can address this:
1. Add explicit confirmation in your callback prompt — similar to how appointment booking is handled:
3. Confirm the date, time, and timezone selected by user: "Just to confirm, you want to book the appointment at ...". Make sure this is a time from the available slots.
4. Once confirmed, call function book_appointment to book the appointment.
2. Apply the same pattern to your callback prompt — have the agent repeat back the full date (day, month, year) and time before calling the function that stores callback_ts.
3. Consider timezone handling — ensure your prompt specifies that the agent should confirm the timezone with the user, as date/time mismatches often stem from timezone confusion.
If the issue persists after prompt adjustments, you may need to review how your custom function parses and stores the date/time value passed from the agent.
Check out these potentially useful sources for more details:
- [Build a multi-prompt agent]()
Would you like me to provide a general answer on date/time handling patterns that might help?AI Evy
01/19/2026, 11:50 AMAI Evy
01/19/2026, 11:50 AMTheScrutiniser
01/19/2026, 12:05 PMAI Evy
01/19/2026, 12:05 PMAI Evy
01/19/2026, 12:05 PM{{current_time}} system variable, or there may be a conflicting dynamic variable overriding it. [(1) ]()
How to fix this:
1. Use the system default variable {{current_time}} in your prompt to provide the agent with the current date and time. This variable automatically returns the current time in America/Los_Angeles format (e.g., "Thursday, March 28, 2024 at 11:46:04 PM PST") .
2. Check for conflicting dynamic variables — if you have a test/custom variable set (like a hardcoded date) , it could be overriding the system variable. One community user resolved a similar issue by deleting a test data variable that was causing the wrong date to appear. [(2) ]()
3. Specify timezone if needed — you can use {{current_time_[timezone]}} (e.g., {{current_time_America/New_York}}) to get the time in your specific timezone. [(1) ]()
Add something like this to your prompt:
The current date and time is: {{current_time}}
If you already have {{current_time}} in your prompt and it's still wrong, check your agent's dynamic variable configuration for any overrides that might be conflicting.AI Evy
01/19/2026, 12:05 PMAI Evy
01/19/2026, 12:06 PMTheScrutiniser
01/19/2026, 12:23 PMAI Evy
01/19/2026, 12:23 PMAI Evy
01/19/2026, 12:23 PM{{current_time_Europe/London}}
[(1) ]()
The format is {{current_time_[timezone]}} where you replace [timezone] with your desired timezone identifier.
For example, just as the documentation shows {{current_time_Australia/Sydney}} for Sydney time, you use Europe/London for London.AI Evy
01/19/2026, 12:23 PMAI Evy
01/19/2026, 12:23 PMTheScrutiniser
01/19/2026, 12:33 PMAI Evy
01/19/2026, 12:33 PMAI Evy
01/19/2026, 12:33 PM{{current_time_Europe/London}} variable returns the date/time in a format like "Thursday, March 28, 2024 at 11:46:04 PM PST" [(1) ]()
2. For Google Sheets integration, you would typically handle the date/time formatting in your middleware (like N8N or Make) between Retell and Google Sheets, rather than within Retell itself. [(2) ]()
The workshop on [Personalization with Google Sheets]() covers connecting Retell to Google Sheets through N8N, where you can transform the date/time format before writing to your spreadsheet.
Recommended approach:
- Capture the date/time from the agent using an Extract Dynamic Variables node or through your custom function
- Use your middleware (N8N, Make, etc.) to convert the string to a Google Sheets-compatible format (e.g., YYYY-MM-DD HH:mm:ss or ISO 8601)
Would you like a general answer on common date/time formats that Google Sheets accepts?AI Evy
01/19/2026, 12:33 PMAI Evy
01/19/2026, 12:33 PMTheScrutiniser
01/19/2026, 2:00 PMAI Evy
01/19/2026, 2:00 PMAI Evy
01/19/2026, 2:00 PM"type": "object" — defines the expected output as a JSON object
- "properties" — lists the fields to extract:
- callback_ts — a string field for capturing the callback timestamp
- "description" — tells the LLM what this field should contain ("The timestamp of the best time to callback")
- "required": ["callback_ts"] — makes this field mandatory before the transition can occur
Regarding dynamic variables:
Yes, you can include dynamic variables in tool descriptions. [(1) ]()
Dynamic variables work in:
- Tool descriptions
- Property descriptions
So you could modify the description to include context like:
json
{
"type": "object",
"properties": {
"callback_ts": {
"type": "string",
"description": "The timestamp of the best time to callback. Current time is {{current_time_Europe/London}}. Format as YYYY-MM-DD HH:mm."
}
},
"required": [
"callback_ts"
]
}
By adding {{current_time_Europe/London}} to the description, you give the LLM awareness of the actual current date/time, which should help it calculate and store the correct callback timestamp.AI Evy
01/19/2026, 2:00 PMAI Evy
01/19/2026, 2:00 PMTheScrutiniser
01/19/2026, 2:07 PMTheScrutiniser
01/19/2026, 2:08 PMAI Evy
01/19/2026, 2:08 PMAI Evy
01/19/2026, 2:09 PMbest_tel as an optional dynamic variable to your Agent Edge schema, update your JSON like this:
json
{
"type": "object",
"properties": {
"callback_ts": {
"type": "string",
"description": "The timestamp of the best time to callback. Current time is {{current_time_Europe/London}}. Format as YYYY-MM-DD HH:mm."
},
"best_tel": {
"type": "string",
"description": "The phone number to call back on, if provided by the user."
}
},
"required": [
"callback_ts"
]
}
[(1) ]()
Key points:
- best_tel is optional because it's not included in the "required" array — only callback_ts is mandatory
- The agent will extract and pass best_tel to Make.com only if the user provides a phone number [(2) ]()
- In your "callback" prompt, instruct the agent to confirm both values before proceeding: "Just to confirm, you'd like a callback at [callback_ts] on [best_tel]?"
Dynamic variables can be used in property descriptions, so you could enhance the best_tel description with context if needed (e.g., referencing {{user_number}} as a default) . [(1) ]()
When passing these to Make.com, both values will be available in the retell_llm_dynamic_variables object for your scenario to process. [(2) ]()AI Evy
01/19/2026, 2:09 PMAI Evy
01/19/2026, 2:09 PMTheScrutiniser
01/19/2026, 3:45 PMAI Evy
01/19/2026, 3:45 PMAI Evy
01/19/2026, 3:46 PMWhen speaking a phone number, transform the format as follows:
- Input formats like 4158923245, (415) 892-3245, or 415-892-3245
- Should be pronounced as: "four one five - eight nine two - three two four five"
- Important: Don't omit the space around the dash when speaking
- Example: "Let me confirm: four one five - eight nine two - three two four five. Is that correct?"
2. Disable Speech Normalization
Go to Speech Normalization in settings and disable speech normalization for numbers — this prevents automatic conversion of phone numbers to numeric format.
However, be aware that disabling normalization means:
- Numbers, dates, currencies won't be automatically converted to spoken form
- TTS models might occasionally mispronounce unnormalized text
- You'll need to manually format text in prompts for proper pronunciation
3. Adjust voice speed [(2) ]()
You can also reduce the overall voice_speed parameter (value ranging from 0.5 to 2, where lower = slower speech) .
The prompting approach (option 1) combined with disabled speech normalization tends to work best for phone number clarity.AI Evy
01/19/2026, 3:46 PMAI Evy
01/19/2026, 3:46 PMTheScrutiniser
01/20/2026, 11:09 AM11}}"
}
]
}AI Evy
01/20/2026, 11:09 AMAI Evy
01/20/2026, 11:09 AMreg_plate field that can be passed as a dynamic variable and used after the call ends, you would include it in retell_llm_dynamic_variables. [(1) ]()
Here's your updated JSON:
json
{
"from_number": "+441244727227",
"tasks": [
{
"to_number": "{{1.`11`}}",
"retell_llm_dynamic_variables": {
"reg_plate": "YOUR_REG_PLATE_VALUE"
}
}
]
}
Replace "YOUR_REG_PLATE_VALUE" with your Make.com variable (e.g., {{1.reg_plate}}) .
The retell_llm_dynamic_variables object allows you to pass custom data to your agent that can be referenced in prompts using {{reg_plate}} and will be available in post-call webhooks.
Note: The default_dynamic_variables structure shown in the Retell LLM documentation demonstrates how dynamic variables are passed as key-value pairs within an object.AI Evy
01/20/2026, 11:09 AMAI Evy
01/20/2026, 11:09 AMTheScrutiniser
01/21/2026, 11:11 AMAI Evy
01/21/2026, 11:11 AMAI Evy
01/21/2026, 11:12 AMreg_plate as a whisper to a human agent during a warm transfer, you can use dynamic variables in the warm transfer instructions.
[(1) ]()
Step 1: Pass reg_plate as a dynamic variable when creating the call
In your Make.com scenario, include reg_plate in `retell_llm_dynamic_variables`:
[(2) ]()
json
{
"from_number": "+441244727227",
"tasks": [
{
"to_number": "{{1.`11`}}",
"retell_llm_dynamic_variables": {
"reg_plate": "{{1.reg_plate}}"
}
}
]
}
Step 2: Use the dynamic variable in warm transfer instructions
Dynamic variables can be used in warm transfer instructions.
[(1) ]()
When configuring your Transfer Call tool, set up the warm transfer prompt to include {{reg_plate}}. For example:
The caller's registration plate is {{reg_plate}}. Please assist them with their inquiry.
This whisper message will be spoken to the human agent before connecting both parties, giving them the reg_plate context.
[(3) ]()
Where dynamic variables work:
- Warm transfer instructions
- Transfer call phone numbers
- Tool descriptions
- Prompts
[(1) ]()AI Evy
01/21/2026, 11:12 AMAI Evy
01/21/2026, 11:12 AMTheScrutiniser
01/21/2026, 11:21 AMAI Evy
01/21/2026, 11:21 AMAI Evy
01/21/2026, 11:21 AM{{reg_plate}} literally because the dynamic variable has no assigned value in your test chat. [(1) ]()
Default Behavior:
When a dynamic variable has no assigned value, it remains in its raw form with the curly braces intact.
For example:
- If reg_plate is not provided: "Their reg plate is {{reg_plate}}"
- If reg_plate is set to "AB12 CDE": "Their reg plate is AB12 CDE"
Why this happens in test chat:
In a test chat, dynamic variables like {{reg_plate}} are only substituted if you:
1. Set agent-level default dynamic variables in your agent configuration
2. Pass them via the API when creating the call
To fix this for testing:
Configure agent-level default dynamic variables as a fallback. These will be used when specific variables aren't included in the call request.
In production, when Make.com triggers the call with retell_llm_dynamic_variables containing reg_plate, the value will be substituted correctly.
Alternatively, you can add defensive prompting to handle unset variables:
If {{reg_plate}} appears with curly braces, say "I don't have the registration plate on file."
Otherwise, say "Their reg plate is {{reg_plate}}."AI Evy
01/21/2026, 11:21 AMAI Evy
01/21/2026, 11:21 AMTheScrutiniser
01/21/2026, 11:25 AMAI Evy
01/21/2026, 11:25 AMAI Evy
01/21/2026, 11:25 AMreg_plate — for example, set reg_plate to a sample value like "AB12 CDE" in the default dynamic variables configuration
3. Test your agent — when you run the test chat, the agent will use your default value instead of reading {{reg_plate}} literally
Before deploying to production, you can test your dynamic variables using the web interface.
Important note: One community user reported that dynamic variables don't always populate correctly in chat-only test mode for multi-prompt agents — they worked in voice testing but not chat testing. [(2) ]() If you experience this, try testing via voice call instead, or ensure the variable is being set correctly in your agent configuration.
In production, when Make.com triggers the call with retell_llm_dynamic_variables containing the actual reg_plate value from Google Sheets, it will override the default and substitute correctly.AI Evy
01/21/2026, 11:26 AMAI Evy
01/21/2026, 11:26 AMTheScrutiniser
01/21/2026, 11:34 AMAI Evy
01/21/2026, 11:34 AMAI Evy
01/21/2026, 11:34 AM{{variable_name}} is the correct syntax for dynamic variables in Retell AI. [(1) ]()
The issue is that the variable must have a value assigned for it to be substituted. If reg_plate has no assigned value, it remains in its raw form with the curly braces intact.
Troubleshooting steps:
1. Verify the default variable is set correctly — When you configure agent-level default dynamic variables, ensure the variable name matches exactly (case-sensitive) . The variable name should be reg_plate without the curly braces in the configuration.
2. Check where you're setting the test variable — In one Discord thread, a user found that variables need to be referenced in tool/property descriptions with the full syntax {{variable_name}} for proper substitution. [(2) ]()
3. Confirm the variable exists — You can check if a variable is set using this equation in conversation flow conditions: [(1) ]()
Equation: {{reg_plate}} exists
Result: True if variable is set
If you've set the default dynamic variable but it's still reading literally, the variable name in your warm transfer instructions may not match exactly what you configured, or the default variable configuration may not have saved properly. Double-check the spelling and ensure there are no extra spaces around the variable name (spaces are trimmed when evaluating) .AI Evy
01/21/2026, 11:34 AMAI Evy
01/21/2026, 11:34 AMTheScrutiniser
01/21/2026, 11:42 AMAI Evy
01/21/2026, 11:42 AMAI Evy
01/21/2026, 11:43 AM{{reg_plate}} may not be evaluating dynamic variables at the time the whisper is spoken, but the agent's prompt/context does have access to the variable value (which is why it can retrieve it when asked directly) .
Where dynamic variables are documented to work: [(1) ]()
- Prompts
- Begin message
- Tool configurations (URLs, tool descriptions, property descriptions)
- Voicemail prompts and messages
- Transfer call phone numbers
- Warm transfer instructions
- Webhook URL
The whisper message is listed under warm transfer capabilities, but based on your transcript, it appears the variable substitution may not be happening correctly in that specific field.
Potential workarounds:
1. Pre-compose the whisper content in your prompt — Instead of relying on variable substitution in the whisper field itself, have the agent dynamically construct what to say. Instruct the agent in your prompt to include the reg plate information when transferring.
2. Use a static whisper with a prompt-based handoff — Keep the whisper simple (e.g., "Incoming transfer for a car sale") and use the three-way message feature to have the agent verbally introduce the context including {{reg_plate}} once all parties are connected. [(2) ]()
3. Contact Retell support — This may be a bug where whisper messages don't evaluate dynamic variables as expected, even though warm transfer instructions are listed as a supported location.AI Evy
01/21/2026, 11:43 AMAI Evy
01/21/2026, 11:43 AMTheScrutiniser
01/21/2026, 4:55 PMAI Evy
01/21/2026, 4:55 PMAI Evy
01/21/2026, 4:56 PMAI Evy
01/21/2026, 4:56 PMAI Evy
01/21/2026, 4:56 PMTheScrutiniser
01/21/2026, 5:32 PMAI Evy
01/21/2026, 5:32 PMAI Evy
01/21/2026, 5:32 PMAI Evy
01/21/2026, 5:32 PMAI Evy
01/21/2026, 5:32 PMTheScrutiniser
01/23/2026, 10:32 AMAI Evy
01/23/2026, 10:32 AMAI Evy
01/23/2026, 10:32 AMAI Evy
01/23/2026, 10:33 AM