Condition
A condition is a list of rules plus a Match setting.- Match: all — every rule must be true to take the Yes branch.
- Match: any — one true rule is enough.
Rule subjects
Operators
The value you compare against is itself interpolated, so a rule can compare a contact
field against an earlier step’s output rather than only a literal. See
Variables and expressions.
A rule that cannot be answered is false. A deleted tag, a missing field, a segment
that no longer exists — all of them make the rule false, and the run takes the No
branch. They do not fail the run: the branch you wrote for “no” is a branch you thought
about.
Random split
Random split sends a percentage of runs down the Yes branch and the rest down No. The slider is the percentage taking the first path. Use it for an A/B test: two versions of a follow-up message, one in each branch. Both branching steps publish which way they went, as{{ steps.<name>.branch }}, so a
later step can say something different to each half.
Branches on the canvas
- The Yes and No ports sit in a two-column footer on the branching card.
- Dragging from one of them moves the target step to the top of that branch.
- A branch with nothing in it does nothing at all. If both are empty the checks panel warns; if one is empty it says so as information, because that is often deliberate.
- The parent sequence resumes after whichever branch ran. That is what the dashed edge shows.
Wait
Wait pauses for a duration — minutes, hours or days — and then carries on. It does not hold anything open: the run is parked, along with everything it has collected so far, and resumes later. A step after a three-day wait can still read what a step before it fetched. While a run is parked, its log row reads partial, with the step recorded as resuming in …. It becomes success or failure when the rest of the run finishes.Wait until
Wait until waits for a moment rather than a duration, and has two modes. A time of day. Set Wait until (HH:mm, 24-hour), a Timezone (UTC if you
leave it), and optionally Only on these days. The run resumes at the next matching
time — “reply at 9am on a weekday” rather than “reply in 12 hours”, which from 10pm is
not the same thing.
A moment carried by the run. Set Moment to a token such as
{{ vars.booking.starts_at }} and an Offset (minutes), where a negative number is
before: -30 is half an hour before the appointment starts. This has to be a token —
a fixed date would be the same moment for every run, and would silently stop working the
day after it passed. A value that cannot be read as a date/time fails the step visibly
rather than firing at a random time; a moment that has already passed fires immediately.
A held run can outlive what it is about. A reminder waiting on an appointment is
dropped if that booking is cancelled, deleted or moved — a reschedule fires its own
trigger, so the new reminder is scheduled from that.