Skip to main content

WhatsApp Flows

A WhatsApp Flow is a form your customer fills in without leaving the chat. Instead of asking for a name, then an email, then a date across five messages — and hoping the answers come back in a usable shape — you send one button. The customer taps it, a small multi-screen form opens inside WhatsApp, and when they submit, every answer arrives in your agentflow at once.

Typical uses: lead capture, appointment booking, support intake, feedback surveys, sign-ups.

Before you start

  • A connected WhatsApp Business number (Credentials → WhatsApp accounts). See WhatsApp trigger for the channel basics.
  • A flow message can only be sent inside the 24-hour customer service window — within 24 hours of the customer's last message. Outside it, send an approved template first to re-open the conversation.

Create a flow

  1. Go to Credentials → WhatsApp accounts and click Manage WhatsApp Flows on the number you want to send from.

  2. Click New flow — or pick one of the ready-made use cases (lead capture, appointment booking, survey, contact form) and edit it.

  3. Give the flow a name and one or more categories. Meta uses the category when it reviews the flow, so pick the one that matches what you are actually collecting.

  4. Build your screens. Each screen is a list of components you add from the palette:

    ComponentUse it for
    Heading / Subheading / Body / CaptionExplaining what you're asking and why
    Text input / Text areaShort answers, long answers
    Dropdown / Radio buttons / CheckboxesChoosing from options
    Date pickerDates and appointment days
    Opt-inConsent checkboxes (terms, marketing permission)
    Footer (CTA)The button that ends the screen — go to the next screen, or complete the flow
  5. Watch the preview on the right as you build. It shows the form as the customer will see it, plus a validation panel listing anything Meta would reject. Meta preview opens the real interactive rendering.

  6. Click Save & publish.

Draft vs published

A draft can be edited freely but cannot be sent. Publishing runs Meta's checks and makes the flow sendable — and freezes it: to change a published flow you clone it into a new draft. Editing and saving a flow changes only your copy; customers keep seeing the last published version until you publish again.

Flows created outside this builder

A flow cloned at Meta, or authored in Meta's own Flow Builder, has no copy of its screens here — Meta's API does not return them. Opening such a flow shows a warning banner and a blank starter flow, and Save is blocked until you press Replace anyway: saving would overwrite the real design at Meta, which keeps no version history. Edit those flows where they were made, or accept the replacement deliberately.

The builder also keeps components it has no editor for — Meta ships new ones faster than we add editors. They appear as a dashed "Unknown component" card, are published exactly as they are, and can be edited in the JSON view.

Nothing is discarded by accident

Closing the builder with unsaved changes — including by pressing Escape or clicking outside it — asks first. So does picking a template once you have started building, because a template replaces every screen. Delete and Deprecate in the flow list also ask, and name the flow: neither can be undone, and Meta offers no undelete.

Send a flow from an agentflow

Flows are sent with the WhatsApp tool, from a Tool node or inside an Agent node:

  1. Add the tool and select your WhatsApp account.
  2. Enable the Send Flow operation.
  3. Pick the flow in Select Flow. Only published flows are safe to send — the list marks each flow's status.
  4. Set Flow Button Label (CTA) — the text on the button that opens the form, 30 characters max, no emoji (e.g. Book now).
  5. Set Flow Message Text — the message shown above the button.

That's it. The rest — which version to open, how to route the answers back to this flow — is handled for you.

Billing

Flow messages are billed as request-based WhatsApp sends (not token-based). In Flowera pricing, sendFlowMessage uses whatsapp_send_flow_message, and it is intentionally priced the same as whatsapp_send_template_message.

Receive the answers

A submitted form arrives as its own event type, not as a normal message. In your Start node's WhatsApp trigger, enable Form Responses 📝 — a flow listening only for text, buttons or lists will never see submissions.

The trigger then gives you:

VariableWhat it holds
{{$webhook.<name>.formResponse}}The answers as an object — one entry per field the customer filled in
{{$webhook.<name>.formResponseText}}The same answers as readable label: value lines — drop it straight into a reply or a prompt
{{$webhook.<name>.flowToken}}The form session's token
{{$webhook.<name>.flowChatflowId}}Which agentflow sent the form — useful when several flows send forms to the same number

A typical follow-up is one LLM node with {{$webhook.whatsapp.formResponseText}} in the prompt ("thank the customer and confirm these details"), and a Tool node that writes the answers wherever you keep them.

Static and endpoint-powered flows

When you create a flow you choose its type:

  • Static (navigate) — every screen, option, and validation rule is fixed when you publish. The form runs entirely on the customer's phone. This covers most forms and needs no setup beyond publishing.
  • Endpoint (data exchange) — each step calls your server, so a screen can be built from live data (today's free appointment slots, current prices, options that depend on an earlier answer).

Endpoint flows need encryption set up once per number: open the flow builder's Endpoint encryption (Tier 2) section and click Generate & upload public key. Flowera creates the key pair, stores the private key encrypted, and uploads the public key to Meta. Ask your administrator if the button reports missing configuration — it needs server-side keys.

Flow status

StatusWhat it means
DraftEditable, not sendable.
PublishedLive and sendable. The form itself is frozen.
DeprecatedRetired. Forms already open still finish; new sends are refused.
Blocked / ThrottledSet by Meta for policy or quality reasons — temporarily unsendable.

Troubleshooting

The customer submitted the form but no answers arrived

The form's submit button doesn't map its fields, so WhatsApp had nothing to send back. Open the flow — a warning names the missing fields — then save and publish again. Saving alone is not enough; until you re-publish, WhatsApp keeps serving the old version.

The flow message is rejected

Either the 24-hour window has closed (send an approved template first), or the flow is not Published.

"Parameter value is not valid" when sending

The first screen expects data the send didn't provide. Either make that screen static, or use an endpoint flow so the screen is filled in when the customer opens it.

The answers reach the wrong flow

Form sessions expire after 24 hours. If the customer submits an old form, use flowChatflowId to see which agentflow it belongs to, and re-send the form to start a fresh session.