Back to the journal
Momo Business Guides

Flow steps: Route

Hand to a human, assign, tag, switch the AI, record consent, verify a code, ask for approval, hold a lock or wrap writes in a transaction.

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.

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

Thanks for reading.Explore more stories