chatleadr Docs

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 TypeUse it whenPorts 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 WhatsAppTrue and False
Match a value (one route per value)The answer is one of a known list: a plan tier, a region, a product codeOne per route, then Anything else

Check a condition is the default, and every Decision saved before 2 September 2026 is one.

Did we find it?Decision Lookup.status==shipped TrueFalse
A Decision node. The condition is drawn in the card: variable, operator, value.
Did we find it? Check variable Lookup.status Condition Equals (==) Value to Match Type Text / Template shipped Done
The panel behind the gear, on Check a condition. Three controls: the variable to check, how to compare it, and what to compare it against.

Check a Condition for a Yes or No Answer#

Name the variable under Check variable, then pick a Condition:

ConditionTakes the True port whenWatch for
Equals (==)The two values are the sameTwo values that both look like numbers are compared as numbers, so 007 matches 7
Not Equals (!=)The two values differCase-sensitive, the same as Equals
ContainsThe value appears somewhere inside the variableCapitals are ignored on both sides
Does Not ContainThe value appears nowhere inside itCapitals are ignored on both sides
Greater Than (>)The variable is the larger numberNumeric, so convert a date to a number first
Less Than (<)The variable is the smaller numberNumeric, so convert a date to a number first
Is Set (Has Value)The variable holds any value at allThe editor hides the comparison field
Is Not Set (Empty)The variable is empty or was never writtenThe 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 holdsThe route saysResult
GoldgoldMatches
7, or the number 77Matches
0077No match
7.07No match
truetrueMatches

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.

text
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.