Skip to Content
AgentsAgent Flows (WhatsApp Forms)

Agent Flows

Multi-screen forms an AI agent can hand to a customer mid-conversation. The agent decides when to ask for structured information — name, dates, an uploaded ID photo, a multi-step questionnaire — and your customer fills it in with a native form rather than a long back-and-forth chat.

Agent Flows runs on WhatsApp, Telegram, Messenger, and your website chat widget and is available on all paid plans (tier-limited — see the Tier limits table below). Build a flow once; it renders natively on every supported channel.

Supported channels

A flow is channel-neutral — you design it once and it renders natively wherever the agent runs.

ChannelHow the form opensNotes
WhatsAppThe agent sends a native WhatsApp Flow button; the form opens inside WhatsAppPublishes per-language to Meta; the only channel with native rich-text limits set by WhatsApp
TelegramThe agent sends an inline button that opens the form as a Telegram Mini AppFull rich-text (bold, headings, lists, tables)
MessengerThe agent sends a button that opens the form in a Messenger WebviewFull rich-text
Website chat widgetThe form opens inline in the embedded chat widget on your siteLightweight renderer; rich text is limited to bold, italic, links, and lists

The same components, screens, logic, and translations work on every channel — there’s nothing per-channel to maintain. Conditional logic (If / Switch) and screen routing are evaluated the same way on every renderer, so a flow behaves identically no matter where your customer fills it in.

Publish one flow to several channels at once. On the flow’s Distribute tab, each channel has its own publish card. Publish to a WhatsApp number, then publish the same flow to a Telegram bot and a Messenger page — each card stays published independently, and adding one channel never un-publishes another. Unpublish a single channel from its card without touching the others. Analytics blend across all the channels a flow is live on by default; when a flow is live on two or more channels, a channel filter appears on the Submissions, Heatmap, and Diagnose views so you can drill into one channel at a time.

When to use Agent Flows

Reach for a flow when chat alone is the wrong shape for the question:

  • Lead capture — name + email + business size + meeting preference, all in one screen the customer fills in once
  • Appointment booking — pick a date, pick a time slot, confirm
  • Document or photo upload — collect an ID, a receipt, a damaged-product photo
  • Multi-step intake — symptom checklists, application forms, surveys
  • Conditional questions — only ask “what kind of pet?” if they said yes to “do you have a pet?”

The agent recommends a flow when its system prompt + the conversation context match. You set up the flow once in the admin panel; the agent reuses it across every conversation.

Building a flow

Flows live under Agent Flows in the customer admin panel. Each flow has:

  • A name and description the agent reads to decide when to use it
  • One or more screens, each containing components (fields)
  • Optional screen logic (branch to different screens based on what the customer picks)
  • Optional A/B variants — split traffic between two versions of the same flow
  • Per-locale publications to WhatsApp (translate once, publish per language)

Starting from a template

You don’t have to start from a blank composer. Open the Templates tab on the Agent Flows list to browse a curated library of ready-made flows — lead capture, demo booking, support intake, product feedback, and more. Click Use this template and it creates an editable draft in your own workspace: the screens, fields, logic, and translations come pre-filled. Bind the draft to a WhatsApp number, tweak anything you want, and publish.

A template is just a starting point — once you’ve created your copy, it’s a normal flow you fully own and can edit freely. The template library is available to every plan that has Agent Flows.

Component library — 24 variants

The composer’s Add field menu groups all 24 components into seven categories. Pick the right shape for the data you need.

Display (chrome, no input)

These render text or images on the screen without asking the customer for input.

ComponentUse it for
Text HeadingA large title at the top of a screen (≤ 80 characters)
Text SubheadingA secondary title under the heading (≤ 80 characters)
Text BodyA paragraph of explanatory copy. Supports bold and strikethrough (≤ 4096 characters)
Text CaptionSmall supporting copy; markdown allowed (≤ 4096 characters)
Rich TextA markdown block — useful for terms, disclaimers, formatted instructions
ImageA single image (≤ 100 KB)
Image CarouselUp to 10 swipeable images with captions — product galleries, before/after, instructions

Inputs (single-line and multi-line text)

ComponentUse it for
Text InputA single-line text box — name, email, short answers
Text AreaA multi-line text box — comments, descriptions, longer answers (≤ 600 characters)
Embedded LinkAn inline tap-to-open link with custom text (≤ 25 characters)

Choices (pick from a set)

ComponentUse it for
DropdownPick one from a long list (10+ options)
Radio ButtonsPick one from a short list (≤ 20 options), all visible at once
CheckboxesPick any number from a list, with optional minimum and maximum
Chips SelectorPick from up to 20 tag-style chips — interests, categories, multi-select with a tight footprint

Date & time

ComponentUse it for
Date PickerA single date — booking date, date of birth
Calendar PickerA calendar surface with optional date range, min/max bounds, and unavailable dates greyed out — appointment booking, hotel stays

Both Date Picker and Calendar Picker are kept as distinct components. Use the Date Picker for a quick single date; use the Calendar Picker when you need a visible month grid, a range, or to grey out specific dates.

Media uploads

ComponentUse it for
Photo PickerCustomer uploads photos from the camera or gallery (up to 30 per submission)
Document PickerCustomer uploads documents — PDF, DOC, etc. (up to 10 per submission)

Mutex: A single screen can hold either a Photo Picker or a Document Picker, but not both. Put them on separate screens if your flow needs both kinds of upload.

Layout

ComponentUse it for
Navigation ListUp to 20 tappable rows with chevrons — choose a category, choose a product, choose a destination screen
Opt-InA consent checkbox — terms of service, marketing opt-in, GDPR consent
FooterThe submit affordance on the last screen of the flow

Logic (conditional rendering)

ComponentUse it for
IfRender some components only when a condition is true (then) — optionally with an alternative (else)
SwitchRender different components based on a value the customer picked earlier (multiple cases + optional default)
For EachRepeat a set of components once per item of an array already in form state — one block per selected item

If and Switch support up to 3 levels of nesting. If you find yourself nesting deeper than that, split the logic across multiple screens with screen-level routing instead.

Multi-screen flows and routing

A flow can have up to 10 screens. Each screen ends with a Footer that either submits the flow or moves to the next screen. Use the screen logic editor to route the customer to a different next screen based on what they picked — for example, customers who select “Refund” go to a refund-specific second screen; everyone else goes to the generic follow-up screen.

For component-level conditional rendering inside a single screen, use If / Switch instead.

Localisation

Translate the flow once and each customer sees the version that matches their language. On WhatsApp, you publish per language — pick the languages you ship it in from WhatsApp’s full supported-language list (every language Meta lets you publish a WhatsApp Flow in). The picker shows region-distinct options where it matters, so you can ship Português (Brasil) separately from Português (Portugal), or 中文 (简体) separately from 中文 (繁體). Each customer sees the version that matches their WhatsApp language; if a customer’s language isn’t published, the integration’s default locale is used as a fallback. (When the customer writes in a base language like Portuguese and you’ve only published a regional variant such as Brazilian Portuguese, they still get the localized form.) On Telegram, Messenger, and the website widget, there’s no separate publish step — the form renders in the customer’s language on the fly from the same translations.

A/B testing

If you want to test two versions of a flow against each other, configure them as variants in the Variants tab. Customers are split deterministically (same customer always sees the same variant); the Submissions view shows which variant each submission came from, and the Field Heatmap lets you compare drop-off and completion rates side by side.

AI generation

If you have a higher-tier plan, the composer offers AI form generation: write a one-line prompt (“a hotel booking form with date-range and photo upload”), or upload a PDF / image of an existing form, and the assistant drafts the flow for you. The draft is fully editable — every field is round-trippable in the composer (no opaque AI snapshots).

Submissions and analytics

Once a flow is published, every submission lands in the Submissions view for that flow. Each row shows:

  • Who submitted, when, and through which agent
  • The full field values from the form
  • An AI score (0–100) the assistant assigned to the submission — high-value leads bubble to the top
  • The chat turns from the conversation right before the form was opened (the conversation-context join — see why the agent decided to ask for this submission)

Aggregate analytics include a KPI strip (started / completed / drop-off rate), a Field-Level Heatmap showing where customers abandon, and a Narrative Diagnostic chat — an AI analyst you can ask “why are people dropping off on screen 2?” and it’ll trace the answer through the heatmap, submissions, and conversation context.

Notifications and the lead funnel

A submission is only valuable if someone acts on it fast. Each flow’s Distribute tab has a notification block so the right people hear about a lead the moment it lands:

  • Submission notifications — when a form is submitted, an in-app notification appears, deep-linked straight to that submission. Toggle it per flow.
  • Reply-after-takeover notifications — when one of your team replies to a lead in WhatsApp and the customer writes back, you get a second notification — the second beat of the speed-to-lead loop.
  • Email recipients — add up to ten email addresses and each submission also sends a deferred email deep-linking to the submission, so offline staff still catch the lead.

A chatty customer won’t spam you: a burst of messages right after a submission collapses into one notification, and a fresh one only fires after a human has actually replied and the customer comes back.

Each flow also has a funnel strip on its submissions page — a read-only, at-a-glance view of where leads stand:

StageMeaning
Submittedevery submission for the flow
Engaged by AIthe agent followed up in the conversation after the form
Human repliedsomeone on your team replied by hand
Resolvedthe conversation was archived
Awaiting human replynotified, but no human has replied yet — your at-risk leads

The funnel is a heuristic view to help you manage the pipeline at a glance, not a revenue-attribution model.

Contextual acknowledgments

When a customer finishes a flow, they see the form’s instant confirmation message you set on it (on WhatsApp, that’s the native completion screen). Shortly after, the agent also sends a separate message that references what they actually filled in — “Got it — I’ve put you down for 2pm Tuesday. Anything else?” — so the conversation picks up naturally instead of leaving the customer staring at a static “thanks.” The agent already knows the submitted values, so the acknowledgment is specific, not boilerplate. This follow-up message is sent on WhatsApp, Telegram, and Messenger.

This is on by default for every flow. If you’d rather the agent stay quiet after a submission, turn off Acknowledge submissions on the flow’s Distribute tab. The acknowledgment also stays silent automatically when one of your team has taken over the conversation — you won’t get an AI message stepping on a human reply.

Published flows don’t only live inside conversations the agent starts. Open the Campaign asset card on the flow’s Distribute tab and generate a shareable link — a standard WhatsApp click-to-chat link (plus a downloadable QR code) you can drop into an email, an Instagram bio, a “Book a demo” button, or print on a flyer.

When someone clicks the link, WhatsApp opens a chat with your number and a prefilled message; they tap send, and the exact form opens as the first reply — no guessing, no AI greeting in between. The person who clicked “Book Demo” gets the booking form straight away. The agent then handles the rest of the conversation normally.

Each link has a hit counter so you can see how many people launched the form through it, and you can revoke a link at any time. If a link’s text is edited or stripped before sending, or the link is revoked, the message simply falls through to a normal AI conversation — nothing breaks.

Tier limits

TierPublished flowsLocales per flowAI generation
Trial11
Starter11
PlusUnlimitedUnlimited
EnterpriseUnlimitedUnlimited

All 24 component types are available on every tier that supports Agent Flows — there is no per-component tier-gating.

Last updated on