Use this file to discover all available pages before exploring further.
Every node has a list of edges. After each customer message, the framework picks the next node by checking deterministic edges first (instant, free), then handing off to the routing LLM if nothing deterministic matches.
Lower priority fires first. Defaults if not set: deterministic edges (expression, unconditional, event) get priority 0; LLM edges get priority 100. Within the deterministic bucket, the first matching edge wins. For mutually-exclusive rules (e.g. working-hours vs after-hours), set distinct priorities to make ordering explicit.
These variables are populated automatically and can be referenced in any expression.
Variable
Type
Notes
recipient_data.current_hour
int (0-23)
Hour in the call’s timezone.
recipient_data.current_minute
int (0-59)
recipient_data.current_weekday
string
Lowercase, e.g. "wednesday".
recipient_data.current_day
int (1-31)
recipient_data.current_month
int (1-12)
recipient_data.current_year
int
recipient_data.current_date
string
Display string for prompts only, not for comparisons.
recipient_data.current_time
string
Display string for prompts only.
recipient_data.timezone
string
e.g. "Asia/Kolkata".
recipient_data.user_number
string
E.164 phone number.
detected_language
string
Top-level, not under recipient_data. e.g. "hindi", "en".
_node_turns
int
User messages on the current node. Resets on every transition.
_total_turns
int
User messages in the entire call.
_silence_repeats
int
Times the current node has replayed because the user stayed silent past repeat_after_silence_seconds. Resets on transition. See Static nodes.
Time variables (current_hour, current_weekday, etc.) are populated only when recipient_data.timezone is set on the call. Without a timezone, time-based expressions silently never match. Always set timezone when creating a call that uses time-based routing.
Edges can capture typed values from the user’s reply during routing. The routing LLM treats them as required parameters; on a successful transition the values are merged into context_data and become available everywhere.
{ "to_node_id": "confirm_order", "condition": "Customer provided their order id", "parameters": { "order_id": "string" }}
After the transition, context_data["order_id"] is set and you can:
Reference it in node prompts via {order_id}.
Use it in downstream expression edges: { "variable": "order_id", "operator": "exists" }.
Pass it to API tools as %(order_id)s.
Prefer parameters over a separate “extract” node. One LLM call routes and captures data.
The routing_instructions field is prepended to every routing request. Keep it short and directive:
You are the Routing System for this conversation. Analyze the user's inputand the available edges. Select the edge whose condition best matches.If no edge matches, stay on the current node.
You can include {variable} placeholders. They are substituted from context_data (and the flattened recipient_data) at runtime. Missing keys render as NULL.