Skip to content
MotherBot
Core Features

WhatsApp Flows

Design interactive multi-screen forms and guided experiences that run natively inside WhatsApp — no links, no redirects.

What are WhatsApp Flows?

WhatsApp Flows (part of the official Meta Flows API) let you build interactive screens that appear inline in a WhatsApp conversation. They're ideal for:
  • Lead capture forms (name, email, phone, interest)
  • Appointment booking and scheduling
  • Product catalog browsing and ordering
  • Customer satisfaction surveys (NPS, CSAT)
  • Registration and onboarding questionnaires
  • Support ticket creation

Note

Flows run entirely within WhatsApp — the contact never leaves the app or opens a browser. This dramatically increases completion rates compared to external form links.

Flow Builder

1

Create a new Flow

Go to Dashboard → Flows → New Flow. Give it a name and select the category (Sign Up, Appointment, Customer Service, Survey, etc.). The category is reported to Meta and affects how the flow is reviewed.
2

Add Screens

A Flow is made of one or more Screens. Each screen is a page the contact sees. Use the + Add Screen button and drag to reorder. Common patterns:
  • Single screen — simple lead form
  • Two screens — collect info → confirmation
  • Multi-screen — wizard / booking flow
3

Add Components to each Screen

Drag components from the right panel onto your screen:
ComponentUse case
Heading / Subheading / Body / CaptionStatic text.
Rich TextMarkdown — headings, lists, links, tables.
Text InputSingle line. Text, number, email, phone, password or passcode, with an optional validation pattern.
Text AreaMulti-line text.
DropdownPick one from a long list (up to 200).
Radio ButtonsPick exactly one (up to 20).
CheckboxesPick any number (up to 20).
ChipsMulti-select chips.
Date PickerA single date.
CalendarA date or a date range, with blocked dates and selectable weekdays.
Photo UploadCamera or gallery. Up to 25 MB per file.
Document UploadFile attachments. Cannot share a screen with Photo Upload.
Image / Image CarouselOne picture, or swipe through up to three.
Opt-inA consent checkbox, optionally linking to your terms.
LinkAn inline tappable link.
Navigation ListA rich list where each row opens a different screen.
If / SwitchShow different components depending on an earlier answer.
Footer ButtonThe screen's primary action — next screen, or finish.
4

Configure routing

Each screen's footer button can route to the next screen or complete the flow. On completion, you define what data is sent back to MotherBot and how it's used (store in contact fields, trigger a chatbot action, send a template reply).
5

Add live data (optional)

A plain form shows the same thing to everyone. Turn on Live data in the flow's settings and each screen can load information that only exists when the customer opens it — your products, the appointment times still free today, or what you already know about that contact. The same setting lets you check answers before the customer moves on, send different people to different screens, and write answers straight onto their contact record. There is nothing to host and no code to write.
6

Publish the Flow

Click Submit for Review. Meta reviews Flows (usually within 24 hours for standard categories). Once approved, the Flow status changes to Published.

Attaching Flows to Messages

Published Flows can be triggered in two ways:
  • Template button — add a Flow button to a message template. Works in a broadcast, so you can collect structured data from a large audience.
  • Chatbot — a Send Flow node opens the form mid-conversation, and a Receive Data node picks the answers back up.
  • Live chat — an agent can send a form straight into an open conversation.
  • API — POST /v1/messages with an interactive message of type flow.

Tip

However it is sent, the answers come back linked to the contact who filled it in — and to the chatbot run, broadcast or agent that sent it.

Tip

Combine a campaign with a Flow button template to collect structured data from a large audience. This is powerful for surveys, registrations, and appointment booking at scale.

Live Data From Your Connected Apps

With Live data on, a screen can load its lists from the apps you have already connected — no code, and no API token pasted into a form.
AppWhat a screen can show
Shopify / WooCommerceLive products, or this customer's own orders.
Zoho CRMThis customer's leads, contacts, deals — or any module you use, by its API name.
HubSpotThis customer's record, or the deals attached to it.
SalesforceThis customer's contact, leads, cases or opportunities.
LeadSquaredThis customer's lead record, matched on their number.
Zendesk / Zoho DeskYour groups or departments, or this customer's own tickets.
ShiprocketThis customer's shipments, or one consignment's tracking history.
CalendlyYour event types, or the real free times for one of them.
TrelloLists on a board, or the cards in a list.
Google SheetsRows from a tab, filtered on any column.
Your own APIAny HTTPS endpoint, with the response mapped to a list.

Showing One Customer Only Their Own Records

Every list of records that belongs to a person — orders, tickets, deals, leads, shipments — asks whose before it will run. The answer defaults to whoever opened the form, matched on their WhatsApp number, so “your orders” means theirs.

Warning

There is no “show everything” option, and that is deliberate. If we cannot work out whose records to show, the screen shows none. A list that quietly widened to the whole account would hand one customer another customer's name, order value or complaint — on a screen nobody would think to check.
Set Whose records to someone else when the person filling the form in is not the record's owner — a receptionist booking for a patient, a dealer looking up an end-customer — and give the number or email to match on. It takes a token, so it can read an answer from an earlier screen.
  • Numbers are matched on their last ten digits, so a record saved as 9876543210 still matches a customer who arrives as 919876543210.
  • Zendesk finds a ticket by its requester's email address — a contact with no email on file sees nothing rather than everything.
  • HubSpot deals are read through the matched contact, because a deal carries no phone number of its own.

Reacting While the Customer Is Still Filling It In

A form that only reports back at the end is a form. A form that answers as the customer moves through it is an application — and every screen component that can be picked, cleared or tapped can ask your server what to do about it.
  • When they pick an option — a dropdown, radio, checkbox, chips or date changed.
  • When they clear one — they took a choice back.
  • When they tap something — a link, an opt-in, or a row in a navigation list.
  • When the screen opens — before they have touched anything.
Turn on Live data, set the component's On select (or On deselect, or On tap) to Ask the server, then add a rule under Rules for this screen that says when they pick an option. The customer stays exactly where they are; only what the screen shows changes.

Tip

Scope the rule to one component when a screen has several. A country, state and city cascade fires from all three, and a rule left unscoped answers for every one of them.
What you wantHow it is built
A dependent list — pick a country, the city list reloadsBind the second list to a data source filtered by the first answer. Nothing else is needed: the list is re-read on every selection, with the new answer already in scope.
A live total — quantity × price, with taxA Do a calculation rule on select, writing into a data field the screen displays.
Real availability — the slots still free for that dateThe Slots data source, plus a rule on select so it refreshes when the date changes.
Stock, price or eligibility from your own systemA Call a URL rule on select, then Set a value from what it returns.
Telling them straight away that something will not workA Show an error rule on select. They stay on the screen and see why.
Jumping ahead when they choose “something else”A Go to a screen rule on select. Routing on an interaction is allowed — it is just not the default.

What a Button Sends

WhatsApp sends your server — and returns to you at the end — exactly what the button is set to carry, and nothing else. It does not attach the rest of the form on your behalf.

Tip

Left alone, every finish button and every “ask the server” action sends every answer on its screen, plus anything carried in from an earlier one. That is almost always what you want. Open What to send on the button only when you need to send something different.
Answers from an earlier screen are not carried automatically either. A button that moves to the next screen has its own What to carry to the next screen list, and what you carry arrives there as that screen's data.

Accessing Submitted Responses

Every submission is stored. You can read it in:
  • Responses — each flow has its own list of submissions, with a CSV export.
  • Contact profile — answers you mapped to contact fields are written onto the contact.
  • Conversations — the thread shows the completed form with the answers.
  • Chatbots — a Receive Data node reads the answers into variables and carries on the conversation.
  • Workflows — a “Form submitted” trigger, which can be pointed at one particular form.
  • Webhooks — a flow.submitted event carries the answers both as typed values and as display strings.

Reading the Answers in a Chatbot

Use a Receive Data node set to Flow response, or a Send Flow node set to wait for the reply. Either way the answers arrive as variables named after the fields, under the prefix you choose:
  • {{flow_email}} — one variable per field, ready to put in a message.
  • {{flow_interests}} — a multiple-choice answer as a readable list, e.g. “pricing, demo”.
  • {{flow_interests_count}} — how many were ticked, for branching without parsing text.
  • {{flow_json}} — everything at once, for a Call a URL step.
  • {{flow_name}} — which form it was, when one node handles several.

Reading the Answers in a Workflow

Choose the Form submitted trigger and, if you want, pick which form. Then insert the answers anywhere a workflow takes text:
  • {{trigger.values.email}} — an answer as it reads, which is what you want in a message.
  • {{trigger.responses.interests}} — the same answer with its type intact, for a step that needs a real list.
  • {{trigger.flowName}} — which form was submitted.
  • {{trigger.contactPhoneNumber}} — who submitted it.

Tip

The Insert button beside any text box lists every one of these for the trigger you picked, so there is nothing to memorise or spell correctly.

Flow Limits

LimitValue
Components per screen50
Screens a single screen can lead to10
Dropdown options200 (100 when options carry images)
Radio / checkbox / chips options20
Option label30 characters
Footer buttons per screen1
Links per screen2
Opt-ins per screen5
Images per screen3
Uploaded file size25 MB
Whole flow10 MB