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:
Click Copy Flow JSON in the Playground.
Go to WhatsApp Manager > Flows > Create Flow.
Enter the Flow name, and select a category and template.
In the JSON editor, delete the existing content and paste in your copied JSON.
If the JSON appears on a single line, select all, right-click, and choose Format Selection.
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.
Open the Journey where you want to trigger the Flow, and add or open a Send message node.
In the message editor, click the link/button icon in the left toolbar to add a button block.
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.
Under WhatsApp Flow, select your published Flow from the dropdown. Only published Flows are listed.
(Optional) Click Preview WhatsApp flow to open Meta's preview of the Flow.
If the Flow is still a draft in Meta, a warning appears. Publish it in WhatsApp Manager first, then return here.
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
Select a flow. In the Variable mapping card, click Map variables.
The Map WhatsApp flow fields to charles properties modal lists every field detected in the flow, with its type.
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.
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.
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:
Add a "Condition node" to a flow canvas.
Assign a condition node to a message node.
In the condition node, Add a new condition.
Select Flow variables -> marketing_optin -> is true.
Add a "Manage subscribers node" to a flow canvas.
Select an Opt-in from the dropdown, you'd like to assign to a customer.
How to assign a tag:
Add a "Condition node" to a flow canvas.
Assign a condition node to a message node.
In the condition node, Add a new condition.
Select Flow variables -> <<Interests>> (variable, you're interested in) -> contains <<Make up>> (value, you're interested in).
Add a "Manage tags" to a flow canvas.
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:
Add the Flow to the Send message node and give the button a label ("Get started").
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)
(Optional) Add a Condition node on
marketing_optinfollowed 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.










