Skip to main content

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.

End

Ends the run. Anything sent before it still goes out. Ending without sending anything is how a workflow stays quiet — on a flood of repeated messages, for example.