At a glance
Anything can follow anything — a code step after a send is fine. An exit left unconnected ends the run there. The workflow cannot loop back on itself: every message has to reach an end.
Start
Every message begins here. Connect it to the first step.Run code
Your Python, written in the step:async def run(), returning a dict. It can call your APIs, read the chat and the contact, and save values on the contact. What it returns is kept under the step’s result key for every later step.
See Run code steps.
Condition
One or more rules, then Otherwise. Checked top to bottom by code; the first that holds wins. A rule reads a code result, a contact attribute, the message itself (its text, type, tapped button) or a count over the chat, and compares it — equals, contains, has any of these words, matches a pattern, greater than… See Conditions.Update contact
Saves values on the contact’s CRM record. Each row is an attribute (from Contacts → Attributes) and a source: a fixed value, another contact attribute, a code result or the message. Later steps see the new values. In Test Chat nothing is written.Send text
One WhatsApp message, sent word for word. It can hold values filled in when it is sent:Send template
An approved WhatsApp template — the one kind of message WhatsApp delivers outside the 24-hour window. Every variable gets a source (fixed, contact attribute, code result or the message); a media header has an Upload button. Track link clicks for templates with URL buttons.Send media
An image, video, audio clip or document. The link is a source — upload a file for a permanent link, or take it from a code result. Documents have a file name; everything but audio can have a caption.Send buttons
A message with up to 3 reply buttons, or a list of up to 10.
The buttons are not branches. A tap comes back as the user’s next message, which runs the workflow again from Start with the button’s id in it. Branch on it with a Condition near the start: The message → Tapped button id equals
buy.
Assign chat agent
Hands the message to one of your Basic or Advanced WhatsApp agents, which replies with its own model at its published version. The run ends here; anything the workflow sent first goes out before the agent’s reply.
The agent’s replies are stored as its own, so its follow-ups, billing and reports work as if the number were its own.