Skip to main content

WhatsApp Flows

This article explains what WhatsApp Flows are, how to build one in Meta, how to connect it to a Journey in charles, and what to do with the answers customers submit.

Before you start

To use WhatsApp Flows, make sure you have:

  • A WhatsApp Business Account connected to charles.

  • Access to WhatsApp Manager (Meta) for the account you're working in.

  • A Journey in charles where you want the Flow to appear (or permission to create one).

If you're missing any of these, contact our Customer Support team.

1. What is a WhatsApp Flow?

A WhatsApp Flow lets you show customers a structured, app-like form directly inside a WhatsApp chat. Instead of asking questions one message at a time, you present a single form with fields such as text inputs, dropdowns, date pickers, and selection menus.

Flows are useful anywhere you need structured information from a customer, for example:

  • Lead generation

  • Appointment booking

  • Customer surveys

  • Product configuration

  • Event registration

How it works, in short: a Flow is triggered by a button inside a Journey message. When the customer taps the button, the form opens inside WhatsApp. When they finish, their answers are sent back to charles and into your Journey, where you can save them to the contact.

2. Creating a WhatsApp Flow in Meta

Before you can use a Flow in a Journey, it needs to exist in Meta. You create a WhatsApp Flow by building it in the WhatsApp Flows Playground and importing the JSON into WhatsApp Manager. Here is a recording of building a flow within the playground.

Step 1: Design your Flow in the Playground

The Playground lets you visually build and preview your Flow before importing it into WhatsApp Manager.

  • Start by outlining the number of screens your Flow needs.

  • Name each screen descriptively (for example "Beauty and Wellness" or "Product Preferences") to make tracking easier later.

  • Each screen has editable content. Click + Add Content to add elements. We recommend no more than 3 items per screen to keep the experience clean.

The content types available are:

Type

Description

Text

Headers, body text, and captions

Media

Photos only (JPEG/PNG, max 300KB)

Text Answer

Short answer, paragraph, date picker, email, phone, number. This data is sent to charles.

Selection

Single choice, multiple choice, dropdown, opt-in. This data is sent to charles.

Step 2: Configure your screens

For each screen, configure the questions and answer options relevant to that step of the Flow. In the example above, the "Product Preferences" screen uses a Single Choice question for skin type (Oily, Dry, Mixed, Normal) and a Checkbox Group for product categories.

Step 3: Import into WhatsApp Manager

Once your Flow is ready:

  1. Click Copy Flow JSON in the Playground.

  2. Go to WhatsApp Manager > Flows > Create Flow.

  3. Enter the Flow name, and select a category and template.

  4. In the JSON editor, delete the existing content and paste in your copied JSON.

  5. If the JSON appears on a single line, select all, right-click, and choose Format Selection.

  6. Click Save, then Publish.

Tips and customization:

  • You can edit a Flow after publishing. Make your changes in the JSON editor, then Save and Publish again.

  • Resolve all errors before publishing. Flow JSON errors appear at the bottom of the editor.

You never paste JSON or manage flow definitions inside charles. Building and publishing always happen in WhatsApp Manager; charles just connects to what you have published.

3. Connecting a WhatsApp Flow to a Journey in charles

Once your Flow is published in Meta, you add it to a Journey as a button on a message node.

  1. Open the Journey where you want to trigger the Flow, and add or open a Send message node.

  2. In the message editor, click the link/button icon in the left toolbar to add a button block.

  3. Click the button to open the Manage button panel on the right, then enter the label the customer will see (for example, "Start" or "Sign up"), up to 20 characters. A label is required — without one, the message sends without the Flow.

  4. Under WhatsApp Flow, select your published Flow from the dropdown. Only published Flows are listed.

  5. (Optional) Click Preview WhatsApp flow to open Meta's preview of the Flow.

  6. If the Flow is still a draft in Meta, a warning appears. Publish it in WhatsApp Manager first, then return here.

  7. To save your customers' answers, click Map variables. *see the 5th section

    When a customer taps the button and completes the Flow, their answers are saved to the contact under the properties you set in the mapping card.

4. Which data can be collected, and what it looks like

The fields available in a WhatsApp Flow are:

Field type

Example use

Text input

First name, email address

Date picker

Birthdate

Opt-in

Marketing consent checkbox

Single-select

Skin type

Multi-select

Product preferences

Dropdown

Dermatologist visit frequency

Number

Customer ID

Numbers, dates, and Yes/No answers keep their real type, and selections come through with the names you set in Meta. To keep an answer on the contact or use it for segmentation, map it to a contact property (see the next section).

5. Saving Flow answers to a contact

Mapping each flow field to a contact property is the recommended way to use flow answers. charles stores every answer in the right place and format for messaging, segmentation, and exports, with no extra condition or Update Contact nodes needed.

5a. Storing answers: map fields to properties

  1. Select a flow. In the Variable mapping card, click Map variables.

  2. The Map WhatsApp flow fields to charles properties modal lists every field detected in the flow, with its type.

  3. For each field you want to keep, pick a Contact property to store it in. Select an existing custom property or choose Create new property… to make one on the spot.

  4. charles only offers properties whose type is compatible with the field (e.g. a Date field maps to a date property, a Yes/No field to a checkbox property). Incompatible properties are shown but not selectable.

  5. Use the Save toggle per row to include or exclude a field, then save. The card then shows how many variables you have mapped; use Configure to edit or Reset to clear.

Flow field

Maps to

Text

Text property

Number

Number property

Email / Phone

Text / phone property

Date

Date property

Single-select / Dropdown

Select property

Multi-select

Multi-select property (stores all chosen options)

Opt-in

Checkbox property

Multi-select is simple now. A multi-select answer maps to a multi-select property, so all chosen options are stored together in one property automatically, with no separate step per option.

5b. Taking actions: opt-ins and tags

How to assign an opt-in:

  1. Add a "Condition node" to a flow canvas.

  2. Assign a condition node to a message node.

  3. In the condition node, Add a new condition.

  4. Select Flow variables -> marketing_optin -> is true.

  5. Add a "Manage subscribers node" to a flow canvas.

  6. Select an Opt-in from the dropdown, you'd like to assign to a customer.

How to assign a tag:

  1. Add a "Condition node" to a flow canvas.

  2. Assign a condition node to a message node.

  3. In the condition node, Add a new condition.

  4. Select Flow variables -> <<Interests>> (variable, you're interested in) -> contains <<Make up>> (value, you're interested in).

  5. Add a "Manage tags" to a flow canvas.

  6. Select a Tag from the left-side menu, you'd like to assign to a customer.

6. Use case sample: Beauty and Wellness lead generation flow

Here's how the pieces fit together in a real scenario.

A skincare brand wants to capture new leads and their preferences through WhatsApp.

Flow fields, across 3 screens:

  • Screen 1: Full name, email, birthday, opt-in consent

  • Screen 2: Skin type (single-select) and product preferences (multi-select)

  • Screen 3: Dermatologist visit frequency (dropdown)

How it's handled in charles:

  1. Add the Flow to the Send message node and give the button a label ("Get started").

  2. Open Map variables and map each field to a property:

    • Full name → text property, email → text property, birthday → date property (personalization and CRM sync)

    • Opt-in → checkbox property (controls whether marketing messages are sent)

    • Skin type → select property

    • Product preferences → multi-select property (all selected options stored together, ready for segmentation)

    • Dermatologist visit frequency → select property (used to route contacts into follow-up Journeys)

  3. (Optional) Add a Condition node on marketing_optin followed by a Manage subscribers node to subscribe consenting contacts to your marketing opt-in.

Every answer is now on the contact profile and ready to use in messages, segments, and exports.

Did this answer your question?