Message flows run on WhatsApp in this release. Other channels are on the roadmap; a flow bound to any other channel is refused at publish.
Route steps move the conversation between people and states: hand to a human, assign, tag, switch the AI, record consent, verify a code, ask for approval, or wrap several writes in a transaction.
This is the reference for the Route group of the flow builder's palette. Every step below is listed with what it does, the settings it takes, the branches it can leave by and the one thing to keep in mind. Settings marked "templated" accept {{vars.x}}, {{contact.name}} and {{last.text}}.
Hand to human
Mark the thread as needing a person and end the session.
| Setting | What it does |
|---|---|
body |
Optional message to send before handing over. |
reason |
Why a person is needed; shown to the team. |
Branches: (none — the flow ends)
Keep in mind: Ends the session; a person picks the thread up in the inbox.
Assign
Assign the conversation to a user or a team.
| Setting | What it does |
|---|---|
client_user_id |
Id of the person to assign to. |
team_id |
Or the team id to assign to. |
Branches: next
Keep in mind: Assigns the thread; it does not end the session.
Tag
Add tags to the conversation.
| Setting | What it does |
|---|---|
tags |
List of tag names to add. |
Branches: next
Keep in mind: Adds tags; it never removes one.
Set AI mode
Turn the AI on or off for the rest of the thread — and end this session, because the flow is no longer the one answering. Set continue: true only for non-waiting steps that must still run.
| Setting | What it does |
|---|---|
mode |
on or off — whether the AI answers for the rest of the thread. Either one ends the session (reason ai_mode_changed): a flow that has handed the thread over cannot ask another question. |
continue |
true to carry on to next instead of ending — for a tag, a record write or a goodbye that must still run. Nothing that waits for a reply may follow; publish refuses it. |
Branches: next
Keep in mind: Ends the session unless continue is set — a flow that handed the thread over cannot ask another question.
Consent
Record an opt-in or opt-out, with its wording and moment.
| Setting | What it does |
|---|---|
action |
grant (an opt-in, leaves by granted) or withdraw (an opt-out, leaves by refused). |
purpose |
What the consent is for, e.g. marketing. |
body |
The wording the customer agreed to (stored with the record). |
confirmation |
Optional message sent back to confirm. |
Branches: granted refused
Keep in mind: The wording and the moment are kept with the record; export them with flows:export-consents.
Verify code
Send a one-time code and check the answer.
| Setting | What it does |
|---|---|
body |
The message carrying the code; must contain {{code}}. |
expires_minutes |
Minutes until the code stops working. |
retries |
Wrong answers allowed before leaving by wrong (1–5). |
retry_prompt |
What to say after a wrong code when a try is left. |
timeout_minutes |
Give up waiting for the code after this many minutes. |
Branches: ok wrong expired timeout
Keep in mind: The code goes out by SMS and is priced like one.
Approval
Ask a colleague to sign this off, and hold the conversation until they answer.
| Setting | What it does |
|---|---|
policy |
Who has to say yes: {mode: single|any_one|all|levels, approvers: {users, roles, teams}, levels, amount_rules, expires_after_minutes, on_expiry: reject|approve|escalate, escalate_to}. roles are workspace roles (owner, manager, agent, viewer), teams are agent-group ids. |
title |
What is being approved, in a few words — the first thing the approver reads. |
summary |
The detail behind the title (templated): who, how much, and why. |
amount |
The number the policy's amount_rules are compared against (templated), e.g. {{vars.kiasi}}. |
link |
Where the approver should go to see the whole thing (templated). |
Branches: approved rejected expired failed
Keep in mind: Holds the conversation until a colleague answers in Approvals, or the policy expires.
Transaction
Wrap several record writes so a failure part-way through undoes the ones that already landed.
| Setting | What it does |
|---|---|
body_entry |
The first node INSIDE the block. Point the body's last step back at this node to close it — the for_each shape. |
on_error |
rollback (the default — undo the writes and leave by rolled_back) or continue (keep them and leave by failed). |
compensate |
Optional node to run after the undo, for the effects a journal cannot reverse — a refund, a "sorry" message. Point its last step back here and the flow leaves by rolled_back. |
Branches: done rolled_back failed
Keep in mind: Only record writes roll back; a message sent or money moved inside it needs a compensating step.
Lock
Hold a named lock while a stretch of the flow runs, so two conversations cannot do it at once.
| Setting | What it does |
|---|---|
name |
What the lock is called (templated), namespaced per workspace. Blank locks this node against itself. |
body_entry |
The first node inside the guarded stretch. Point its last step back at this node to release the lock. |
ttl_seconds |
How long the lock survives a session that never comes back, 1–900 (default 60). There is no renew: a body that waits longer LOSES the lock. |
wait_seconds |
Queue this long for the lock instead of leaving by busy straight away, 0–60 (default 0). |
Branches: locked busy
Keep in mind: There is no renew — a body that waits longer than ttl_seconds loses the lock.
Business rule
Ask a rule from Settings → Business rules: a limit, a fee, an eligibility test, opening hours or a routing choice.
| Setting | What it does |
|---|---|
key |
The rule's key from Settings → Business rules, e.g. daily_withdrawals (templated). |
inputs |
What the rule is asked about: {name: value} or [{key, value}], templated, and values keep their type so a quantity arrives as a number. |
store_as |
Variable receiving {passed, value, reason, key, kind, rule_id, error, details} (default rule). |
Branches: passed failed error
Keep in mind: Needs a rule under Settings → Business rules.
Where next
- Open the builder at Message flows and drag any of these onto the canvas — the panel on the right shows the same settings.
- New to flows? Start with Build your first WhatsApp flow.
- The other groups: Say · Ask · Think · Decide · Wait · Do.
- The rules every flow lives under: the 24-hour window, payments, what we keep and why a flow stops.