Flow Builder
The Flow Builder is the visual editor for deterministic conversational flows. It lets you build complete conversation journeys without coding, by connecting nodes that represent each step of the user interaction.
General Flow Structure
[Start Node] ──► [Greeting]
│
┌──────┴──────┐
▼ ▼
[#buy] [#support]
│ │
▼ ▼
[Collect ID] [Open Ticket]
│
▼
[Confirm Order]
│
┌─────────┴─────────┐
▼ ▼
[✅ Success] [%anything_else]A flow is composed of:
- Nodes: decision and response points
- Edges: connections between nodes
- Responses: content sent to the user
- Triggers: special events (start, fallback)
- Intents: trained example phrases
- Entities: capturable values (numbers, dates, names)
Nodes
Each node represents a state of the conversation. A node has:
| Field | Description |
|---|---|
| Title | Internal name (not sent to the user) |
| Condition | Rule that activates this node |
| Responses | List of responses to send |
| Context Actions | Variables to define/capture |
| Actions | Integrations (webhooks, CRM, etc.) |
| SkipUserInput | Executes without waiting for a user message |
| SelectChildrenByPriority | Evaluates children in order, not by match |
Start Node
The flow always begins at the Start Node, which has the fixed ID 000000000000000000000000. It is the entry point for every new conversation.
SkipUserInput
When enabled, the node is processed immediately after the previous node, without waiting for a new user message. Useful for:
- Intermediate transition nodes
- Automatic confirmations
- Chained message sequences
SelectChildrenByPriority
When enabled, child nodes are evaluated in the order they appear in the flow, and the first one whose condition is satisfied is activated. Without this flag, the system evaluates all children and may pick the most relevant one.
Conditions
Every node (except the start node) needs a condition to be activated.
Intents (`#`)
Represent the intention behind the user's message. They are trained with example phrases:
#buy → "I want to buy", "I'm interested", "can you send me the price?"
#cancel → "cancel order", "I don't want it anymore", "give up"
#support → "it's not working", "I need help", "problem"To use: #intent_name
Entities (`@`)
Represent specific values within the user's message. They are configured with synonyms and values:
@number → "42", "one hundred and twenty", "3" (numbers in general)
@ssn → formatted SSN/ID number
@date → dates in various formats
@product → "t-shirt", "sneakers", "pants" (with synonyms)To use: @entity_name
System Condition (`%`)
Special conditions predefined by the platform:
| Condition | Description |
|---|---|
%anything_else |
Any message that doesn't match any other node (global fallback) |
Operators
You can combine multiple conditions:
| Operator | Syntax | Example |
|---|---|---|
| AND | E- |
#buy E- @product |
| OR | OU- |
#yes OU- #confirm |
| Equals | =- |
@status =- active |
| Not equals | !=- |
@status !=- cancelled |
Response Types
Each node can have one or more responses. The type defines how the content is presented to the user.
`text`: Single Response
Sends a simple text message:
Hello! Welcome to Company X. How can I help you?`multiple`: Random Response
Defines several text options. The system randomly picks one each time. Great for varying repetitive responses:
Option 1: "Understood! I'll look into that for you."
Option 2: "Got it, let me check here."
Option 3: "Perfect! One moment while I look this up."`options`: Buttons / Selectable Options
Shows quick-reply buttons for the user to choose:
Which service do you need?
┌──────────────┐
│ 💰 Financial │
├──────────────┤
│ 🔧 Support │
├──────────────┤
│ 📦 Orders │
└──────────────┘Each button creates an edge to the corresponding node.
Connections (Edges)
Edges are the connections between nodes. Each type defines how the flow moves:
| Type | Description |
|---|---|
flow |
Normal transition after response |
jump |
Jumps directly to another node without processing |
button |
Automatically created by options buttons |
jump_and_process |
Jumps to another node and processes it as a new message |
jump_and_response |
Jumps and sends the destination node's response |
Triggers
Triggers are special events that fire actions independent of the node flow.
`START_CONVERSATION`
Executed when a new conversation begins. Ideal for:
- Sending a welcome message
- Capturing initial data
- Setting initial context variables
Available actions in the trigger:
RESPONSE: sends a responseJUMP_TO: goes to a specific nodeSET_CONTEXT: defines context variablesJUMP_AND_PROCESS: goes to a node and processes it
`MISSING_ANYTHING_ELSE`
Executed when the system finds no matching node for the user's message (and there is no node with %anything_else). This is the last-resort fallback.
Context Actions
Context Actions allow you to save and capture data during the flow. They are executed when the node is activated.
User: "My ID is 123-45-6789"
↓
[Node: Capture ID]
Context Action:
type: set_entity
key: user_id
value: @ssn
↓
Variable $user_id = "123-45-6789"See full documentation at Variables ($).
Intents and Entities: Training
For the system to recognize #intents and @entities, you need to train the chatbot with examples:
Intents
Each intent needs at least 3 example phrases that express that intention:
Intent: #buy
Examples:
- "I want to buy"
- "I'm interested in purchasing"
- "how much does it cost?"
- "is it available?"
- "can you send me the price?"The more varied the examples, the better the recognition.
Entities
Each entity needs synonyms or accepted values:
Entity: @clothing_size
Values: XS, S, M, L, XL
Synonyms:
S → "small", "S"
M → "medium", "M"
L → "large", "L"Snapshot Versions
Each time you publish a flow, a new version (snapshot) is created. The platform keeps a version history, allowing:
- Rollback to a previous version
- Comparison between versions
- A/B testing of flows
The flow only becomes active for new users after publishing.