Skip to main content

Condition Node

The Condition node routes your flow with rules you define. You add one or more comparison rules — like "is the order total greater than 100?" or "does the message contain the word refund?" — and the flow takes the branch of the first rule that matches, or a final Else branch if none do. Use it when you can express the decision as a concrete comparison. For decisions that need the AI to interpret meaning, use the Condition Agent node instead.

Adding it to a flow

Drag a Condition node onto the canvas and connect the previous node to it. Then define one or more comparison rules. The node grows one output handle per rule, plus a final Else handle for runs where no rule matches — so N rules give you N+1 handles.

A Condition node with one output handle per rule plus a trailing Else handle

Inputs

ParameterDescriptionRequired
ConditionsOne or more comparison rules, evaluated top to bottom. Each rule has a Type (String, Number, or Boolean), a first value, an operation, and a second value to compare against. The flow follows the branch of the first rule that matches; if none match, it takes the Else branch.Yes
Show Output in ChatWhether this node's output appears in the chat history. Off by default.No

Each condition rule is built from:

  • Type — the kind of values you're comparing: String, Number, or Boolean.
  • Value 1 — the value to test, usually a variable like {{$flow.state.total}} or {{$question}}.
  • Operation — the comparison. For strings: Contains, Ends With, Equal, Not Contains, Not Equal, Regex, Starts With, Is Empty, Not Empty. For numbers: Smaller, Smaller Equal, Equal, Not Equal, Larger, Larger Equal, Is Empty, Not Empty.
  • Value 2 — the value to compare against (hidden for Is Empty / Not Empty).

A Condition rule comparing a string from flow state: {{$flow.state.plan}} equal to premium

Outputs & branching

The Condition node is a multi-output node with dynamic branches — it creates one output handle per rule, plus a trailing Else handle. The per-rule handles are numbered 0, 1, 2… in the order you list the rules; the Else handle is always last and always present. Add a rule and a new numbered handle appears before Else; remove one and it disappears. So N rules produce N+1 handles — this is not a fixed True/False split.

HandleWhen the flow takes it
0 (first rule)The first rule is true.
1 (second rule)The first rule was false and the second is true.
Else (always last)No rule matched.

Evaluation is first-match-wins. Flowera checks your rules top to bottom and stops at the first one that is true — the flow takes that rule's branch and the remaining rules are never checked. If no rule is true, the flow takes Else. This behaves exactly like an if / else-if / … / else chain, so rule order matters: put your most specific rules first.

How edges pick a branch: draw one edge from each handle to the node that should run in that case. Because only the first matching rule fires, each branch is mutually exclusive — a single run takes exactly one path.

Always connect the Else handle

Else is where every non-matching run goes. If you leave it unconnected, a message that matches none of your rules simply stops at the Condition node with nowhere to go — and the customer gets no reply.

Example

Route customers by cart value with two rules:

  1. Type: Number · Value 1: {{$flow.state.total}} · Operation: Larger · Value 2: 100
  2. Type: Number · Value 1: {{$flow.state.total}} · Operation: Larger · Value 2: 0

This gives three handles: 0 (cart over 100), 1 (cart 1–100), and Else (empty or zero cart). Because the first matching rule wins, a cart of 150 takes branch 0 — even though it also satisfies rule 2 — so rule order is what makes the tiers work. Wire branch 0 to an Agent that offers free shipping, branch 1 to a standard checkout reply, and Else to a "your cart is empty" message.

Tips

  • Rules are checked top to bottom, first match wins — order them from most specific to most general.
  • Always connect the Else handle so non-matching runs have somewhere to go.
  • Choose the right Type — comparing numbers as strings can give surprising results (for example, "9" is "larger" than "100" as text).
  • Use Is Empty / Not Empty to check whether a value was captured before continuing.
  • For fuzzy, meaning-based routing ("is the user frustrated?"), use the Condition Agent instead.