Skip to content

Flows & forms

A flow is an automated conversation: it greets a customer, asks questions, branches on their answers, tags the chat and hands it to a person when it is time. A form is a short questionnaire the customer fills in natively inside WhatsApp, without leaving the chat. A flow can send a form as one of its steps.

You find both in the sidebar: Flows under Automate, Forms under Engage.

When a customer writes in, whatbot decides who replies in this order. The same summary is on the Flows page under Who answers a customer’s message?

  1. A person is assigned to the chat? Flows and AI agents stay silent, and the person answers.
  2. A flow is already running for this customer: it takes the reply.
  3. A flow matches: a voice-note flow first, then a keyword flow (the longest matching keyword wins), then the first-message flow.
  4. Only if no flow matched, an AI agent can answer.

Automation rules and the out-of-hours reply run on every message alongside this. They don’t wait their turn, so a customer can get a rule’s message as well as a flow’s.

  1. Open Flows and press New flow, give it a name and press Create. Or open Start from a template and press Use template on a ready-made flow. Either way you get a draft.

  2. In the strip above the canvas, pick the Trigger (see below) and, optionally, an Idle timeout.

  3. Add steps from the card palette on the right: click a card, or drag it onto the canvas. Connect each step to the next by dragging from a step’s right edge to the next step.

  4. Click a step to edit it. Back to cards returns to the palette.

  5. Test it on the Playground tab, then press Publish.

The builder saves your draft as you work (“Saving…” / “Saved” in the top bar). Undo and Redo (Ctrl/⌘ + Z, Ctrl/⌘ + Shift + Z) and Auto-arrange, which lays the steps out as a tidy left-to-right tree, are in the top bar too.

TriggerWhen the flow starts
KeywordThe customer’s message contains one of your comma-separated keywords.
First messageThe first message from a customer who has never been through a flow in that chat.
Voice noteThe customer sends a voice note. It is transcribed, so later steps can use the words.
ManualOnly when someone starts it from a chat in the inbox, or through the public API.

How keywords match:

  • Case doesn’t matter, and a keyword matches at the start of a word: plot matches “plots” and “plot enquiry”, but not “teleplot”.
  • A keyword can be a phrase. When several keywords match, the longest wins, so book plots beats book and plot.
  • A keyword belongs to one flow or AI agent. The builder warns as you type if another flow or agent already uses it, and refuses to save the clash.

Only one flow or AI agent in the workspace can own the first-message trigger. The Message routing card at the top of the Flows page shows which one owns Customer’s first message and lets you change it. Picking a new one moves the old one to Manual.

If no flow has a Voice note trigger, a voice note’s transcript is checked against your keywords instead.

The palette groups the cards by what they do.

CardWhat it does
Send TextSends a text message. Use {{variable}} to fill in saved answers.
Send ButtonsSends a message with up to 3 reply buttons and waits for a tap. The flow branches on the button chosen.
Send FormSends one of your published forms (see Forms).
CardWhat it does
Ask TextAsks a question and waits for any typed reply.
Ask Number, Ask Phone, Ask Email, Ask Date, Ask LinkThe same, but the answer must look like a number, phone number, email, date or web link. An answer that doesn’t fit gets a short hint, and the question waits for a valid one.
Ask ButtonsThe same step as Send Buttons: up to 3 buttons, and the flow branches on the choice.

Each Ask step saves the reply under the name in Save answer as, for example city. Later steps can use it as {{city}}. A saved answer lasts only while that run of the flow lasts. It is not written to the contact.

Buttons hold at most 20 characters each. A button step also has a no match branch: connect it to handle a customer who types something instead of tapping. If it is not connected, the question is sent again.

CardWhat it does
Call APICalls an outside service mid-conversation and branches on success or error. See Call an API from a Flow.
CardWhat it does
ConditionBranches true or false on checks: the chat has a tag, the customer’s message contains a word, or a saved answer equals, contains, exists, or is greater or less than a value. Match all checks or any check. A Condition with no checks is always true.
Handoff to agentHands the chat to a person and stops the flow. Auto (least-loaded agent) assigns the least-busy teammate who is available; if nobody is, the chat stays unassigned. Leave in pool leaves it unassigned for anyone to claim; until someone does, an AI agent set to answer unhandled messages can reply to the customer. An optional internal note is added to the chat.
EndEnds the flow. Nothing after it runs.

These run in the background and send nothing to the customer.

CardWhat it does
Add Tag / Remove TagAdds or removes a tag on the chat.
Assign AgentAssigns the chat to the least-busy available teammate.
Add NoteAdds an internal note to the chat. {{variable}} works here.
Save FeedbackKeeps every typed answer collected so far as one feedback record for this customer. Put it after your questions.

The Action step’s dropdown has three more options that have no card of their own:

OptionWhat it does
opt outAdds the customer to your opt-out list so broadcasts skip them.
set lead fieldWrites a value onto the lead record linked to the chat, so it stays there after the flow ends. Enter the field and a value; {{variable}} works in the value. It only does something for chats linked to a lead from your CRM — on any other chat it is skipped.
enroll sequenceNot available. Sequences aren’t part of Whatbot, so this option does nothing — the flow carries on as if it had run. Don’t use it.
VariableHolds
{{name}}The contact’s name
{{phone}}The contact’s phone number
{{trigger_text}}The message that started the flow
{{voice_text}}For a voice-note start: the transcript

A placeholder with no value is sent as it is written, so a {{city}} that was never asked for appears to the customer as {{city}}.

A flow runs for real customers only once it is published. Until then it is a draft: saved, but inert.

Publish checks the flow first and lists anything that stops it:

  • there is exactly one trigger, and every step is connected to something;
  • button steps have 1 to 3 buttons, each no longer than 20 characters;
  • Ask steps have a question;
  • Send Form steps have a published form picked;
  • Call API steps have a URL.

Each publish saves a new numbered version, and the top bar shows Published v3. You can keep editing a published flow: changes go live only when you publish again. A customer who is in the middle of a flow finishes on the version they started, so publishing never changes a conversation already under way. The Logs tab shows which version each run used.

The Playground tab runs your draft, not the published version, in a chat window inside whatbot. Type as the customer and tap the buttons. Nothing is sent on WhatsApp and nothing is written to your inbox. Restart runs it again from the top. A Send Form step shows as a placeholder line.

A flow with the Manual trigger never starts on its own. To run it, open the chat in the inbox, press Flows/Forms in the chat header (on narrower screens it shows only the flow icon), choose Start flow and pick the flow. Only published manual flows are listed.

A customer can be in only one flow at a time. Starting another while one is still running is refused. Unassign the chat first if the flow asks questions: as above, a flow doesn’t answer replies in an assigned chat.

Idle timeout is how many minutes a flow waits for the customer to answer a question. When it runs out, the flow is abandoned and the run is marked expired. If the customer replies later, their reply is treated as a new message, so a matching keyword or voice-note trigger starts the flow again from the beginning. A first-message flow doesn’t restart: that trigger fires only in a chat that has never run a flow. Leave the box empty to wait for as long as it takes.

WhatsApp allows free-form messages only within 24 hours of the customer’s last message (see the messaging window). A flow almost always runs in reply to the customer, so the window is open. When it is not, for example a manual flow started on a chat that has been quiet for days, the next step that would send something waits instead, and the run shows as paused window. When the customer writes again, the flow picks up from that step.

The Logs tab lists every run of the flow, newest first: the contact, status, how many steps it got through, the version, when it started and its last step. Click the contact to open the chat. Click a row to see what the customer answered, question by question.

StatusMeaning
activeRunning right now
waiting inputWaiting for the customer to answer
paused windowWaiting for the customer to reopen the 24-hour window
paused handoffHanded to a person
completedReached the end
expiredThe idle timeout ran out
cancelledThe chat was closed while the flow was running
failedSomething went wrong. A flow that loops through 25 steps without stopping for an answer is also stopped as failed, and so is a run that reaches 500 steps in total over its whole life

Export CSV downloads the runs that are loaded, one row per answer: contact, phone, status, start time, question number, question and answer. The note under the button says whether that is all runs or only the ones loaded so far. Press Load more first to include older runs. Phone numbers follow your workspace’s privacy settings.

To get flow results into your own systems as they happen, subscribe to the flow.completed and flow.step_completed webhook events.

A flow always replies from the number the customer’s chat is on, so a workspace with several numbers needs no extra setup. A flow started through the public API can name its sending number with from; without it, the workspace’s default number is used.

A form is a single screen of fields with a Submit button that the customer opens and fills in inside WhatsApp. Answers come back to whatbot together.

  1. Open Forms and press New form.

  2. Give it a Form name and, optionally, a Description.

  3. Press Add field for each question. Give it a Label, pick a Type, and switch on Required if it must be answered. Drag fields to reorder them. The Preview on the right shows the form as you build it.

  4. Press Create form to save the draft, then Publish.

Field typeThe customer gets
TextA one-line text box
PhoneA text box for a phone number
EmailA text box for an email address
NumberA number box
Long textA multi-line text box
DateA date picker
DropdownA list to pick one option from
RadioOptions shown as a list of choices

Dropdown and Radio fields need at least one option.

Publishing registers the form with WhatsApp. After that it can be sent.

You can edit a published form and press Re-publish to send the change to WhatsApp. In the responses, submissions are then grouped into After the latest edit and Before the edit on date, so answers to old and new questions don’t get mixed up.

  • From a chat: press Flows/Forms in the chat header, choose Send form and pick a published form.
  • From a flow: add a Send Form step and pick a published form. The flow doesn’t wait for the form to be filled in. It moves on to the next step straight away.

The customer sees a message with a button carrying the form’s name. A form counts as a normal reply, so it can only be sent within the 24-hour window. From the inbox, a send outside the window is refused. In a flow, the step waits, as described in the 24-hour window.

When a customer submits a form, the answers show up in two places:

  • In the chat, as an internal note: ”📋 Form submitted — form name”, then each field and its answer. Customers never see notes.
  • On the form, under its Responses tab, newest first. The Forms list shows how many responses each form has.
  • Export CSV on the Responses tab downloads the responses on screen, or use the download button on the form’s row in the Forms list. Up to the most recent 1,000 submissions are loaded.
  • When a form has more than that, the Responses tab says so and offers Export full history. Admins and supervisors can use it to get every submission: the file is prepared in the background on the Downloads page at whatbot.in/analytics/exports; there is no menu link to that page yet, so open it by address and download the file from there when it is ready.

Phone numbers in exports follow your workspace’s privacy settings.