Skip to main content
Flow variables carry information between steps. Refer to a value with {{name}}, for example {{caller_email}}. Use a clear name and identify which step supplies it before another step reads it.

Where values come from

  • Flow variables: initial values configured in the flow.
  • Variable nodes: literal or composed text.
  • Extraction nodes: values collected from conversation history.
  • Request nodes: response text and status under the response name you choose.
  • Runtime context: session information and values supplied by the assistant or connected channel.
The variable picker lists useful names; it does not prove every listed value is present in every session. A standalone editor test and a conversation attached to a contact can have different context.

Built-in flow variables

Use the exact, case-sensitive name inside double braces: {{system.flow_id}}. Values are text. Names can contain letters, digits, underscores, and dots; dots are part of a flat name, not automatic nested-object lookup. Unknown placeholders remain unchanged. Do not put spaces or hyphens in a variable name you intend to substitute. The flow computes the following 28 values each turn. Date/time values use the flow’s timezone; without a supplied timezone, the engine uses UTC. The assistant’s channel can supply a timezone when the flow has none. Examples below illustrate 20 October 2026 at 02:03:04 PM in New York; they are not current-time values. These built-ins overwrite same-named defaults at the start of a turn. Keep your own state under distinct names. The history window is capped at 40 entries and repaired to keep valid tool-call pairs, so message and turn counts can stop growing or decrease.

Context names shown in the picker

The picker also lists the following names. They are not computed by the flow engine: a channel integration, initialization webhook, or explicit value must supply them. For example, a standalone editor test does not automatically fetch a GHL contact. For the full channel-specific CRM maps and their actual formats, see assistant and CRM variables. A name appearing in both lists does not make its availability identical.

Values produced by nodes

Initialization webhook options

Open Variables, then use the webhook controls in Default Variables. Return {"variables":{"caller_name":"Sarah","plan":"premium"}}. Returned keys overwrite existing keys before built-ins are refreshed. Each returned value is converted to text with string conversion, so use scalar values or explicitly serialized JSON strings when a later node needs structured data. Failure or invalid/missing variables does not stop the flow. Check required values before an external action and provide a recovery branch.

Check values before use

An unknown placeholder can remain visible as {{name}}. If that appears in a message, confirm the spelling and ensure the assignment ran before the message. Check required data with Logic and ask for it when missing. Treat _last_function_result as a transient tool-result value, not durable application storage. For a record that must outlive the conversation, write it through an explicit integration and verify that write. See Extraction and Variable nodes and Request nodes.