Sending
plain text out
Sends text. Supports Liquid templating, so you can interpolate captured variables and contact
attributes rather than sending a fixed string.
rich Apple message out
Sends an Apple Messages for Business primitive. Configured with a
primitive_type and the primitive’s
own payload. See Channel-native nodes.Waiting and branching
pause
Pauses until the customer responds. Flow execution state is persisted, so a flow can wait as long as it
needs to — this is not an open connection held for hours.The
timeout_seconds field is coming soon. The builder lets you set it, but nothing reads it
today — there’s no timeout job. A wait persists indefinitely until the customer replies, however long
that takes, regardless of what you enter here.route on what they said
Routes on the customer’s reply using match clauses, with a
fallback for anything that matches
nothing. The fallback can loop back or escalate.The fallback is the important part. Customers say things you did not anticipate; a branch without
a sensible fallback is where flows strand people.if/else on state
Branches on variables rather than on a reply — what you already know, not what they just said.
Configured with a condition and true/false next nodes.
timed pause
Waits a fixed
duration_seconds before continuing. Use sparingly — a deliberate pause can make a bot
feel less robotic, but it is also just latency the customer experiences.Changing state
The two nodes in this section —
set_conversation_attribute and add_label — run correctly in
the engine but are not yet in the builder palette. A flow authored through the API can use them.write a value
Sets a
key to a value on the conversation, with Liquid support in the value. This writes a
conversation attribute — not an entry in the execution’s variable bag.Reading it back through {{ variables.<key> }} is coming soon. Liquid’s variables scope is
populated only by last_reply, the trigger, and two internal counters the engine writes — nothing
set_conversation_attribute writes reaches it yet, so a later node’s {{ variables.<key> }} will not
resolve a value you captured here. See Captured variables and Liquid for exactly
what variables exposes today.tag it
Applies a label to the conversation. Labels feed automation and reporting, so this is
how a flow hands context to everything downstream.
Answering
hand the opening message to the AI
Hands the customer’s opening message to the AI agent once, so a flow can welcome a customer
and still answer the question they started with. A bare greeting such as “hi” gets nothing extra, and an
answer leaves the flow running.It only acts on Apple Messages conversations where the account setting
answer_opening_question is on
and the AI agent is available; otherwise it passes through and the flow carries on. It is backend-only
for now, with no builder UI, so a flow created through the API is the only way to use it.Place it right before the first wait_for_reply. The answer is sent after the messages the flow already
sent, but the nodes after this one are not held back while the AI works. If the AI escalates to a person,
the flow ends. No flow starts while a person owns the conversation, so after the handoff the customer’s next message does not start this flow or any other. If the conversation is resolved and the customer later writes again, the conversation is no longer person-owned, so a flow can start again (an initial flow only if it is marked to restart on reopen). A takeover that is still active keeps it person-owned. The customer’s opening message is not treated as
a reply to the flow’s own question, so it does not feed branch_on_reply.Ending
hand to a human
Escalates. Three strategies:
round_robin_inbox, specific_agent, or team.round_robin_inbox is coming soon. It’s a no-op stub today — selecting it sets the assignee to
nobody. Only specific_agent and team actually assign an agent — use one of those two until round
robin ships.Once a human messages the customer, the resolution is not billable at all — see
AI-to-human handoff.Not yet available
This is the single most common thing people expect a flow to do that it cannot. Worth knowing before you design around it.Choosing between a flow and the agent
Next
Branching and variables
Conditions, captured variables and Liquid.
Channel-native nodes
Which AMB primitives a flow can emit.
Testing and simulation
Running the graph before a customer does.
AI agents
Everything the node set deliberately does not cover.