The Decision Node
Sends the run down one branch or another, on a value the workflow already holds. Every comparison is literal text, so a Decision can tell you what a value is and never what the visitor meant.
Choose How This Node Branches#
Decision Type is the first control on the panel, and it changes both what the rest of the panel asks for and how many ports the node draws:
| Decision Type | Use it when | Ports it draws |
|---|---|---|
| Check a condition (True / False) | The answer is yes or no: a figure is over 500, a field was filled, the channel is WhatsApp | True and False |
| Match a value (one route per value) | The answer is one of a known list: a plan tier, a region, a product code | One per route, then Anything else |
Check a condition is the default, and every Decision saved before 2 September 2026 is one.
Check a Condition for a Yes or No Answer#
Name the variable under Check variable, then pick a Condition:
| Condition | Takes the True port when | Watch for |
|---|---|---|
| Equals (==) | The two values are the same | Two values that both look like numbers are compared as numbers, so 007 matches 7 |
| Not Equals (!=) | The two values differ | Case-sensitive, the same as Equals |
| Contains | The value appears somewhere inside the variable | Capitals are ignored on both sides |
| Does Not Contain | The value appears nowhere inside it | Capitals are ignored on both sides |
| Greater Than (>) | The variable is the larger number | Numeric, so convert a date to a number first |
| Less Than (<) | The variable is the smaller number | Numeric, so convert a date to a number first |
| Is Set (Has Value) | The variable holds any value at all | The editor hides the comparison field |
| Is Not Set (Empty) | The variable is empty or was never written | The editor hides the comparison field |
Value to Match Type decides where the comparison value comes from. Leave it on Text / Template to type literal text with {{variables}} interpolated into it. Choose Variable Reference to point at another variable by name. Both compare as text, or as numbers when the values are numeric.
The two differ when the variable you compare against is empty or was never written. Variable Reference compares against an empty value, which matches a Check variable that is also empty. Text / Template compares against the {{name}} you typed, left standing as you typed it, so it matches nothing at all.
Name the single value you need, such as Order.status, rather than a whole object. A comparison against a whole object matches only by accident: Variable Reference reads every object as the same text, and Text / Template compares the whole of it as JSON.
Match a Value and Give Each Answer Its Own Port#
Reach for this when one variable decides which of several messages to send: a plan tier that picks one of sixteen images, a region that picks a phone number, a product code that picks a price list. Sixteen chained Decision nodes and one match node route identically, and only one of them fits on a screen.
Add a row under Routes and the node grows a port. Twenty routes is the limit, plus Anything else.
A route matches when the text is the same, ignoring capitals and surrounding spaces, and it never converts to a number:
| The variable holds | The route says | Result |
|---|---|---|
Gold | gold | Matches |
7, or the number 7 | 7 | Matches |
007 | 7 | No match |
7.0 | 7 | No match |
true | true | Matches |
So an order reference of 007 stays an order reference.
The first matching route wins, so a value written on two rows only ever reaches the first, and the panel says so while you are typing. Deleting a route removes its wire with it. Route values are literal text and cannot hold {{variables}}; the variable being checked is a variable as usual.
Branch on the Channel#
Set Check variable to channel and the panel replaces the value box with Channel to Match, a picker of the four values, and fixes the condition on Equals. The same workflow can then send a short message on WhatsApp and a richer one on the website.
The values are web for the website snippet and the WordPress plugin, whatsapp for WhatsApp, and instagram for Instagram DMs. Matching web covers a widget installed either way.
To branch on every channel except one, wire the False port. There is no not equals for a channel, because the False port already covers it.
Connect Every Port or the Run Ends Silently#
A run that reaches a port with nothing wired to it stops where it stands, says nothing to the visitor, and is still recorded as completed. The editor warns until every port a Decision draws has a connection.
On a match node that includes Anything else, which takes every value that matches no route, a variable that is empty or was never written included. An empty route row draws no port at all. See execution limits.
Extract Meaning Before the Workflow Starts#
A Decision cannot judge intent, sentiment or meaning, because no model runs once the workflow starts. Capture the judgement as a workflow parameter, which the assistant fills from the conversation, then branch on the value it extracted.
Wrong: Decision -> is the customer angry?
Right: workflow parameter "sentiment", extracted by the assistant
Decision -> sentiment equals "negative"Common Questions#
Can I Test Two Conditions at Once?#
Not in one node. Chain two Decision nodes, which also draws the two conditions on the canvas as separate branches. Match a value does not change this: it tests one variable against many values, which is a different thing from testing two variables.
Which Should I Use?#
If the answer is yes or no, check a condition. If the answer is one of a known list, match a value.
How Do I Check Whether a Form Field Was Filled?#
Use Is Set (Has Value) against the field's variable. A required field is always set, so this is for the optional ones.
Does Greater Than Work on Dates?#
It compares numerically. Convert the date to a comparable number in a Function node first, then branch on the result.
Is the Comparison Case-Sensitive?#
Equals and Not Equals are. Contains and Does Not Contain are not, because both sides are lower-cased before the test, and a route on a match node is not either.
Can Both Branches Rejoin Later?#
Yes. Two branches may connect to the same downstream node. A variable produced on one branch is not readable from the other, only from the point where they rejoin onward, and only if it was produced before the split. See variables in a workflow.