🔀 Condition Node¶
Preview — not yet executed by the live assistant
The Condition node can be placed and configured in the designer and passes publish validation, but the live WhatsApp assistant does not execute it yet. A customer reaching a Condition node sees a polite "not yet supported" message instead of branching. Keep Condition nodes out of published flows until this feature goes Live — use separate Menu options to branch in the meantime.
Purpose¶
The Condition node checks a variable's value and branches the flow into two paths: Yes (condition is true) and No (condition is false). This lets you create personalised, intelligent conversations that respond differently based on what the customer has said or done.
Business Scenario¶
Use the Condition node when you need to:
- Route by customer preference — send different product info based on their selection
- Check if data was provided — if the customer gave their email, send a confirmation; if not, ask again
- Personalise the experience — greet returning customers differently from new ones
- Validate input — check if a captured value matches expected criteria
Configuration¶
| Field | Description |
|---|---|
| Title | Internal name (e.g., "Check Interest Area") |
| Variable to Check | The variable name to evaluate (use {{variable_name}} format) |
| Condition | The comparison operator |
| Value | The value to compare against (not shown for is_set / is_not_set) |
Operators¶
| Operator | Description | Example |
|---|---|---|
| Equals | Variable exactly matches the value | {{city}} equals "London" |
| Does not equal | Variable does not match the value | {{plan}} does not equal "free" |
| Contains | Variable contains the value as a substring | {{message}} contains "urgent" |
| Starts with | Variable begins with the value | {{phone}} starts with "+91" |
| Is set (any value) | Variable has been captured (not empty) | {{email}} is set |
| Is not set (empty) | Variable hasn't been captured yet | {{name}} is not set |
Properties¶
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
title |
Text | No | "Check Condition" |
Internal node name |
variable |
Text | Yes | "" |
Variable to check (e.g., {{name}}) |
operator |
Select | Yes | equals |
Comparison type |
value |
Text | Depends | "" |
Value to compare against (not needed for is_set/is_not_set) |
Inputs¶
| Handle | Type | Description |
|---|---|---|
| Top (↑) | Target | Receives a connection from any preceding node |
Outputs¶
| Handle | Type | Description |
|---|---|---|
| ✓ Yes (→ right) | Condition Branch | Connects to the node that runs when the condition is true |
| ✗ No (→ right, below) | Condition Branch | Connects to the node that runs when the condition is false |
Two outputs
Unlike most nodes, the Condition node has two output handles — "Yes" and "No" — both on the right side. There is no "continue" handle at the bottom.
Connection Rules¶
- ✅ Can receive connections from any node type
- ⚠️ Should have both Yes and No paths connected (warning if either is missing)
- ✅ Yes and No can connect to the same node if both paths lead to the same next step
- ✅ Can connect to any node type on both branches
Example Flow Diagram¶
Check if Email Was Captured¶
flowchart TD
A["📥 Ask Email<br/><em>What's your email?</em>"] --> B["🔀 Email Provided?<br/><em>{{email}} is set</em>"]
B -->|"✓ Yes"| C["💬 Confirmation<br/><em>Great! We'll send details to {{email}}</em>"]
B -->|"✗ No"| D["💬 No Problem<br/><em>No worries! Here's our website instead.</em>"]
C --> E["📋 Main Menu"]
D --> E
style B fill:#fef9c3,stroke:#eab308,stroke-width:2px
style C fill:#dbeafe,stroke:#60a5fa,stroke-width:2px
style D fill:#dbeafe,stroke:#60a5fa,stroke-width:2px
Route by Customer Interest¶
flowchart TD
A["📥 Ask Interest<br/><em>Which plan? (basic/premium)</em><br/>→ {{plan}}"] --> B["🔀 Premium?<br/><em>{{plan}} equals premium</em>"]
B -->|"✓ Yes"| C["💬 Premium Details<br/><em>Our Premium plan includes...</em>"]
B -->|"✗ No"| D["💬 Basic Details<br/><em>Our Basic plan includes...</em>"]
style B fill:#fef9c3,stroke:#eab308,stroke-width:2px
Best Practices¶
Use descriptive titles — "Check if VIP Customer" is clearer than "Condition 1".
Use "Is set" / "Is not set" to check if a variable has been captured before using it.
Always connect both branches — even if one path just loops back to the menu. Missing branches cause warnings.
Place after a Question node — the most common pattern is Question → Condition → different responses.
Chain conditions for complex logic — connect a "No" branch to another Condition for if/else-if patterns.
Common Mistakes¶
| Mistake | What Happens | Fix |
|---|---|---|
| Missing "Yes" route | Warning: "Condition has no Yes route" | Connect the ✓ Yes handle to a node |
| Missing "No" route | Warning: "Condition has no No route" | Connect the ✗ No handle to a node |
| Variable name typo | Condition always evaluates to "No" | Double-check the variable name matches the Question node that captures it |
Forgetting {{}} around variable |
Literal text comparison instead of variable | Use {{variable_name}} format |
| Using before the variable is captured | Variable is always empty ("not set") | Place the Question node before the Condition in the flow |
Related Nodes¶
- 📥 Question — Capture the variable that the Condition checks
- 💬 Message — Common target for both Yes and No branches
- 📋 Menu — Route both branches back to a menu
- 👤 Human Handoff — Escalate on the "No" branch (e.g., if validation fails)