https://retellai.com/?utm_source=discord&utm_medium=seo logo
I am configuring a Retell Voice Agent via the Dash...
# ❓・ai-evy-support
e
@AI Evy I am configuring a Retell Voice Agent via the Dashboard (using JSON configuration). My goal: I need to implement Time-Based Routing logic. The agent is allowed to use the "transfer_call" tool on Mondays, Tuesdays, and Thursdays. However, on Wednesdays and Fridays (closed days), the agent MUST NOT use the transfer tool and should instead offer a callback. My constraint: The LLM (GPT-4o) does not know the current real-time date/day by default. Question: 1. Is there a built-in system variable like {{call.start_time}} or {{current_day}} available in the System Prompt? 2. If not, can you provide the JSON example for an "Inbound Webhook" that calculates the day and returns a dynamic variable like "is_office_open": false?
a
Thanks for tagging me @enes (ekkovoice). I'll look through relevant sources and get back to you shortly.
### Answer --- 1. Built-in System Variable for Current Time/Day Yes, Retell provides a default system variable
{{current_time}}
that includes the current day of the week. [(1) ]() The format is:
"Thursday, March 28, 2024 at 11:46:04 PM PST"
You can also use timezone-specific variants like
{{current_time_America/New_York}}
. You can reference
{{current_time}}
directly in your System Prompt to enable the LLM to determine the day and apply your routing logic. --- 2. Inbound Webhook for Dynamic Variables If you prefer to calculate the day server-side and pass a custom variable like
is_office_open
, you can use the Inbound Call Webhook. [(2) ]() Your webhook receives a POST with the inbound call details, and you respond with
dynamic_variables
under the
call_inbound
key. Example webhook response:
Copy code
json
{
  "call_inbound": {
    "dynamic_variables": {
      "is_office_open": "false",
      "current_day": "Wednesday"
    }
  }
}
Your server-side logic would determine the day and set
is_office_open
accordingly before returning this response. --- Prompt Tip: In your System Prompt, you can then include logic like: > "If
{{is_office_open}}
is false, do not use the transfer_call tool. Instead, offer to schedule a callback." Or if using the built-in variable: > "Check
{{current_time}}
for the current day. If it is Wednesday or Friday, do not transfer—offer a callback instead." ---
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) [[2] Inbound webhook](https://docs.retellai.com/features/inbound-call-webhook) ​
e
@AI Evy How do I know for sure the agent knows what time it is when it's talking with the client? He needs to transfer_call at the right times/days.
a
Thanks for the follow-up, @enes (ekkovoice). I'll get back to you soon.
### Answer --- To ensure the agent knows the current time/day during the call, use the
{{current_time}}
system variable directly in your prompt. [(1) ]() How it works: The
{{current_time}}
variable is a default system variable that Retell automatically provides—it outputs the current time including the day of the week. Example output:
"Thursday, March 28, 2024 at 11:46:04 PM PST"
You can also specify a timezone: -
{{current_time_America/New_York}}
for Eastern time -
{{current_time_Australia/Sydney}}
for Sydney time To verify the agent is using it correctly: 1. Include it explicitly in your prompt, for example: > "The current time is {{current_time}}. If the day is Wednesday or Friday, do not use the transfer_call tool—offer a callback instead." 2. Test in the LLM Playground before deploying—you can see how the variable resolves and how the agent responds to different scenarios. 3. Review call transcripts after test calls to confirm the agent referenced the correct day/time in its decision-making. The variable is evaluated at runtime, so the agent will always have access to the real current time during the conversation. ---
​ To learn more, see the sources I considered: [[1] Dynamic Variables](https://docs.retellai.com/build/dynamic-variables) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
e
@AI Evy I'm using Conversation Flow with equation-based transitions to route calls based on day of the week. Setup: HUMAN_TRANSFER_NODE has 3 equation transitions: Transition 1 (operator: OR): -
{{current_time_Europe/Amsterdam}} contains "Monday"
-
{{current_time_Europe/Amsterdam}} contains "Tuesday"
-
{{current_time_Europe/Amsterdam}} contains "Thursday"
→ destination: TRANSFER_CALL_TO_HUMAN Transition 2 (operator: OR): -
{{current_time_Europe/Amsterdam}} contains "Wednesday"
-
{{current_time_Europe/Amsterdam}} contains "Friday"
→ destination: CALLBACK_WEEKDAY_CLOSED Transition 3 (operator: OR): -
{{current_time_Europe/Amsterdam}} contains "Saturday"
-
{{current_time_Europe/Amsterdam}} contains "Sunday"
→ destination: CALLBACK_OUTSIDE_HOURS Problem: When testing today (Friday, January 17, 2025), the agent incorrectly routes to TRANSFER_CALL_TO_HUMAN instead of CALLBACK_WEEKDAY_CLOSED. What I've verified: - Removed all
default_dynamic_variables
- HUMAN_TRANSFER_NODE instruction: "Say NOTHING - wait for transition" - Transitions are ordered 1→2→3 as shown above Questions: 1. Is
contains
the correct operator for matching day names in
{{current_time_Europe/Amsterdam}}
? 2. How can I debug the actual runtime value of
{{current_time_Europe/Amsterdam}}
during a call? 3. Why would Friday match Transition 1 instead of Transition 2?
a
Thanks for the follow-up, @enes (ekkovoice). I'll get back to you soon.
### Answer --- Based on the documentation, here's what I can address: 1. Is
contains
the correct operator?
Yes,
CONTAINS
is a valid operator for equation-based transitions. The documentation shows examples like: [(1) ]()
Copy code
"New York, Los Angeles" CONTAINS {{user_location}}
However, note that the
CONTAINS
operator performs string comparisons. 2. How to debug the runtime value: You can view node transitions in the call transcript within the History tab—it shows the node names the agent transitions from and to. Additionally, you can track how a past call transitioned through each node in the conversation flow using "View Call History in LLM Playground." [(2) ]() 3. Why Friday might match Transition 1: The documentation states that all equation conditions are evaluated from top to bottom, and the agent travels on the first condition that evaluates to true. [(1) ]() The issue is likely the order of evaluation within your OR conditions. Since Transition 1 is evaluated first and contains multiple OR conditions, if any of those conditions unexpectedly evaluates to true, it will take that path before ever checking Transition 2. Potential causes: - There may be an issue with how the
{{current_time_Europe/Amsterdam}}
variable is being resolved at runtime - Community users have reported similar issues where equation-based transitions with dynamic variables don't evaluate as expected [(3) ]() Recommended debugging steps: 1. Check the call transcript in the History tab to see which nodes were traversed [(1) ]() 2. Consider using the LLM Playground to test how variables resolve [(4) ]() 3. Try adding a conversation node before the split that outputs the value of
{{current_time_Europe/Amsterdam}}
to verify what the agent actually sees Alternative approach: If equation-based transitions continue to be unrelia
ble, you could use prompt-based transition conditions instead, which let the LLM evaluate the logic. Example: [(1) ]()
Copy code
User said something about booking a meeting
Or calculate the day server-side via an Inbound Webhook and pass a simpler boolean like
is_office_open
as a dynamic variable, then use:
Copy code
{{is_office_open}} == "true"
---
​ To learn more, see the sources I considered: [[1] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) [[2] Platform Changelogs | Retell AI](https://www.retellai.com/changelog) [[3] Transitions do not work with equations and dynamic variable](https://discord.com/channels/1186424376300679209/1430615179967856663) [[4] Debug guide](https://docs.retellai.com/build/conversation-flow/debug-guide) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.
e
@AI Evy I'm implementing time-based routing for a Retell voice agent using Make.com webhooks and dynamic variables, but the agent verbalizes transition instructions instead of executing them silently. Setup: - Retell Conversation Flow agent (Dutch) - Inbound webhook → Make.com Router with 3 routes - Make.com returns:
{"dynamic_variables": {"is_office_open": "true"}}
(or `receptie_closed`/`is_weekend`) - Welcome Node → edge to
HUMAN_TRANSFER_NODE
(when user asks to transfer) -
HUMAN_TRANSFER_NODE
has 3 equation transitions: -
{{is_office_open}} == "true"
→ TRANSFER node -
{{receptie_closed}} == "true"
→ CALLBACK node -
{{is_weekend}} == "true"
→ OUTSIDE_HOURS node -
HUMAN_TRANSFER_NODE
instruction: "Say NOTHING - silent checkpoint, wait for transition" Problem: Agent says:
"(Transition naar HUMAN_TRANSFER_NODE)"
instead of remaining silent. Tried: ✅ Verified webhook JSON is correct ✅ Used equation-based (not prompt) transitions ✅ Added "NEVER use transfer_call tool" to global prompt ✅ Changed instruction from English to Dutch ❌ Agent still announces the instruction text Questions: 1. Why does the agent speak the instruction instead of following it silently? 2. Is there a special format for silent routing nodes in Conversation Flow? 3. Could Retell be parsing the webhook response incorrectly? 4. Should we use a function node instead of conversation node for silent routing? The webhook works (browser test confirmed), but dynamic variables seem not evaluated during transitions.
a
Thanks for the follow-up, @enes (ekkovoice). I'll get back to you soon.
### Answer --- The issue you're experiencing—where the agent speaks the instruction text instead of remaining silent—is likely related to how Conversation Nodes work. When inside a Conversation Node, the agent will generate content based on the instruction, even if you tell it to "say nothing." [(1) ]() Why this happens: Conversation Nodes are designed for having conversations with users. The agent will attempt to generate a response based on the instruction you provide. Writing "Say NOTHING" as an instruction doesn't prevent the agent from speaking—it just gives the LLM that text to interpret, which can lead to unexpected verbalization. Recommended solution: Use the "Skip Response" setting Enable Skip Response on your
HUMAN_TRANSFER_NODE
. When this setting is enabled, the transition will only have one edge you can connect, and when the agent is done (in this case, immediately since there's nothing to say) , it will transition to the next node via that specific edge. However, note that Skip Response only allows one outgoing edge, which conflicts with your need for 3 conditional transitions. Alternative approach: Restructure your flow Since you need multiple equation-based transitions, consider: 1. Use a Function Node instead for silent routing logic—Function Nodes can execute without the agent speaking during execution. [(2) ]() 2. Pre-evaluate the routing before reaching this node. Have your Make.com webhook return a single variable like
route_destination
with values
"transfer"
,
"callback"
, or
"outside_hours"
, then use separate paths earlier in your flow. Regarding dynamic variable evaluation: For equation conditions, you can only use variables that are passed in as dynamic variables.
[(3) ]() Verify your webhook response is being received correctly by checking the call transcript in the History tab—it shows node transitions so you can see the actual path taken. Debug steps: - Review call transcripts in the History tab to see which nodes were traversed - Add a test conversation node that explicitly speaks the value of
{{is_office_open}}
to confirm the variable is being set correctly - Consider using the LLM Playground to test variable resolution [(2) ]()
​ To learn more, see the sources I considered: [[1] Conversation Node](https://docs.retellai.com/build/conversation-flow/conversation-node) [[2] Debug guide](https://docs.retellai.com/build/conversation-flow/debug-guide) [[3] Step 3: Add transition conditions](https://docs.retellai.com/build/conversation-flow/transition-condition) ​
Feel free to tag @AI Evy with additional questions. I also appreciate feedback, it helps me improve.