Ciaran
12/19/2025, 3:05 PMAI Evy
12/19/2025, 3:05 PMAI Evy
12/19/2025, 3:05 PMcurrent_holiday) when initiating the call. Your backend logic would determine the value based on the date—for example, "christmas", "new_year", or "default". [(1) ]()
2. Use a Logic Split Node to branch the conversation based on that variable. The Logic Split Node evaluates conditions immediately upon entry and routes to the corresponding destination node. [(2) ]()
3. Configure your conditions in the Logic Split Node:
- Condition 1: current_holiday equals "christmas" → route to Christmas greeting node
- Condition 2: current_holiday equals "new_year" → route to New Year greeting node
- Else: route to default conversation node
Important note: Dynamic variables may not be fully "hydrated" (loaded) if the Logic Split Node runs too early in the flow. You can add a hydration guard condition like current_holiday exists or current_holiday != "" before comparing values, or add a brief initialization node before the split. [(3) ]()
The dynamic variables need to be passed when initiating the call or set as default_dynamic_variables in your conversation flow configuration. [(1) ]()AI Evy
12/19/2025, 3:05 PMAI Evy
12/19/2025, 3:05 PMCiaran
12/19/2025, 3:06 PMAI Evy
12/19/2025, 3:06 PMAI Evy
12/19/2025, 3:06 PMPOST request to your webhook endpoint with the caller information.
3. Your webhook handler determines the current date (Christmas, New Year, etc.) and returns a response with dynamic_variables set accordingly.
Example webhook response:
json
{
"call_inbound": {
"dynamic_variables": {
"current_holiday": "christmas"
}
}
}
4. Your Conversation Flow then uses a Logic Split Node to branch based on {{current_holiday}}.
System default dynamic variable alternative:
You can also use the built-in {{current_time}} system variable, which provides the current date/time (e.g., Monday, March 24, 2025 at 02:53:01 PM PDT) .
[(2) ]()
Your Logic Split Node could parse this to check if the date matches December 25 or January 1 and route accordingly.
The inbound webhook approach gives you the most flexibility since your backend can handle the date logic and pass the appropriate variable before the call connects.
[(1) ]()AI Evy
12/19/2025, 3:06 PMAI Evy
12/19/2025, 3:06 PMCiaran
12/19/2025, 3:08 PMAI Evy
12/19/2025, 3:08 PMAI Evy
12/19/2025, 3:09 PMcall_started) :
This is the Call Event Webhook, which sends real-time notifications about call events. It supports three event types:
[(1) ]()
| Event Type | Description |
|------------|-------------|
| call_started | Triggered when a new call begins |
| call_ended | Triggered when a call completes, transfers, or encounters an error |
| call_analyzed | Triggered when call analysis is complete |
The webhook `POST`s a payload to your endpoint with the event type and call object:
json
{
"event": "call_ended",
"call": {
"call_type": "phone_call",
"from_number": "+12137771234",
"to_number": "+12137771235",
"direction": "inbound",
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
...
}
}
For your holiday routing use case:
You need the Inbound Webhook, which is different—it triggers before the call connects and allows you to set dynamic variables.
[(2) ]()
The Inbound Webhook is configured on your phone number, not at the agent level. Check your number configuration to enable it and point it to your endpoint that determines the holiday and returns the appropriate dynamic_variables.AI Evy
12/19/2025, 3:09 PMAI Evy
12/19/2025, 3:09 PMCiaran
12/19/2025, 3:10 PMAI Evy
12/19/2025, 3:10 PMAI Evy
12/19/2025, 3:10 PMcall_started, call_ended, and call_analyzed webhooks are Call Event Webhooks that notify you after events occur. [(1) ]() They don't allow you to pass variables into the call.
For inbound calls, to inject dynamic variables before the call connects, you need to use the Inbound Webhook, which is a separate webhook configured on your phone number. [(2) ]()
Key difference:
- Call Event Webhooks (call_started, call_ended, call_analyzed) : One-way notifications about call events—you just acknowledge with a 2xx response. [(1) ]()
- **Inbound Webhook**: Triggers before the call connects, and your response can include dynamic_variables, override_agent_id, metadata, etc. [(2) ]()
To set up the Inbound Webhook:
Configure inbound_webhook_url on your phone number. When an inbound call arrives, Retell sends a request to that URL, and you respond with your variables:
json
{
"call_inbound": {
"dynamic_variables": {
"current_holiday": "christmas"
}
}
}
This is the mechanism you need for your holiday routing scenario.AI Evy
12/19/2025, 3:10 PMAI Evy
12/19/2025, 3:10 PMCiaran
12/19/2025, 3:15 PMAI Evy
12/19/2025, 3:15 PMAI Evy
12/19/2025, 3:15 PMAI Evy
12/19/2025, 3:15 PMAI Evy
12/19/2025, 3:15 PMAI Evy
12/19/2025, 3:28 PMCiaran
12/19/2025, 3:28 PMAI Evy
12/19/2025, 3:28 PMcall_inbound.dynamic_variables. [(1) ]()
2. Data types: All dynamic variable values must be strings. Booleans like false are not supported. [(2) ]()
Your corrected response should look like:
json
{
"call_inbound": {
"dynamic_variables": {
"christmas": "false",
"new_years_day": "false"
}
}
}
[(1) ]()
This exact issue (passing false as a boolean instead of "false" as a string) was reported by another user who found their dynamic variables weren't being passed to the call. [(3) ]()
Then in your Conversation Flow, reference them as {{christmas}} and {{new_years_day}} and check if they equal the string "true" or "false". [(2) ]()AI Evy
12/19/2025, 3:28 PMAI Evy
12/19/2025, 3:28 PMCiaran
12/19/2025, 4:20 PM