Flow Builder: build conversational flows visually

Conversa Labs

Last updated on Oct 13, 2026

Overview

The Flow Builder is the ConversaLabs visual builder for conversational flows. Instead of writing code, you assemble the dialogue by connecting nodes on a canvas: a message leads to an option menu, which leads to a condition, which can call an API and take different paths based on the contact's reply.

It's the right tool when automation needs multiple steps and interaction β€” menu self-service, lead qualification, scheduling, data capture, and integrations β€” beyond what a simple rule can do.

Prerequisites

  • The Flow Builder module enabled for your account (an optional capability, enabled by plan/flag). If it isn't in the menu, talk to an administrator.
  • Admin permission to create and publish flows.
  • An inbox (for example, WhatsApp) where the flow will be triggered.
  • For nodes that depend on other modules (Payments, Follow-ups, CRM, Contracts), the matching module must be active.

Step by step

  1. Open the Flow Builder and create a new flow (you can start from a gallery template).
  2. Configure the flow trigger (the event that starts it) in the start node.
  3. Drag nodes from the palette onto the canvas and connect them to draw the conversation path.
  4. Configure each node in the side panel (message text, menu options, condition rule, request URL, etc.).
  5. Use variables to store and reuse the contact's replies and integration data.
  6. Test the flow (there are request-testing and session-trace tools) and publish it.

Settings & options

Most-used node types:

Node What it's for
Text message Sends text to the contact.
Option menu Presents buttons or a list for the contact to choose from.
Media Sends an image, video, audio, or document.
Condition Takes different paths based on a rule/variable.
HTTP request Calls an external API and uses the response in the flow.
A/B variation Splits traffic across paths to test messages.
Payment Creates/sends a charge and waits for payment (Payments module).
Follow-up Enrolls or cancels the contact in a sequence (Follow-ups module).
Contract Sends a contract for signature (Contracts module).
Contact action Runs actions on the contact: label, note, and custom attribute (Contacts category).
Create contact Creates a contact (name, email, phone), with native deduplication.
Create conversation Opens a conversation in an inbox, with optional status and first message.
Private note Leaves a private note on the conversation (available in flows too).
  • Variables: capture replies and API data and reuse them in messages and conditions.
  • Calendar booking trigger: starts the flow when a booking is created or changes state in the Calendar module; its linked contact and conversation are available when present.
  • Calendar appointment trigger: starts the flow when an appointment is created, rescheduled or cancelled β€” including ones made from the dashboard, from Maestro, from an automation, or changed directly in Google Calendar. Use this one when the appointment does not come from the public booking page (which is the trigger above). The status reaches the flow, so a Condition can tell created, rescheduled and cancelled apart.
  • Template gallery: start from a ready-made flow and adapt it.
  • Testing and session trace: validate behavior before publishing.

Buttons and lists on WhatsApp

The Send buttons and Send list nodes arrive as a native interactive message on WhatsApp Cloud, Coexistence, WhatsApp Web and the unified hybrid inbox. Besides the message and the items, you can set:

Field Node What shows on WhatsApp
Header Buttons and list Bold title above the message, up to 60 characters.
List button text List Text of the button that opens the list, up to 20 characters.
Description List items Smaller text below each item, up to 72 characters.
Section title List (Advanced) Heading above the items when the list is open, up to 24 characters.
Footer Buttons and list (Advanced) Small gray text below the message, up to 60 characters.

Every field is optional and accepts variables. Leave the header empty for the list to arrive with no title. When the list button text is empty, "Choose an item" is used in the account language. On WhatsApp Web, buttons always show a title: with no header, "Options" is used in the account language. The value of each item identifies the chosen option: it is what the flow compares in an option wait. In any other wait, the flow receives the item title.

Reply waits and human handling

In Wait for reply and Wait for follow-up reply, set the input type and valid options. While attempts remain, an invalid reply sends the Invalid-reply message; if it is empty, the Re-prompt message is used. Fill in at least one to guide the contact, for example: "I did not understand. Reply 1 to confirm or 2 to cancel". Processing the same contact message again does not consume another attempt or send the notice twice.

Under Human handling, the default is End wait and session: when an agent sends a public reply in the conversation, that reply wait and its session are canceled. Private notes, bot messages, campaigns and messages identified as automation do not count as human handling. Cancellation sends no message, does not reopen the conversation and does not change its assignment. A later contact reply does not resume the canceled session or execute its next steps. In the session history, the node output records the reason human_takeover and the trigger agent_message.

Sessions of the same flow already queued for this conversation are also canceled, with the same reason in their history. They do not start later and reply over the agent.

A macro sent manually by an agent and a follow-up draft approved by that agent count as human replies. A scheduled-message delivery does not count, even if its sender is an agent or the delivery is brought forward with send now. An immediate copy outside that scheduled delivery counts when it uses the agent's user. A meeting link sent automatically by Calendar does not count.

This default also applies to published flows that do not have the setting. To keep waiting after an agent replies, choose Keep waiting in the node and publish a new version. The choice is recorded when the wait begins; editing the node does not change waits that already started. This rule does not change Wait until or event waits.

Resolving the conversation without replying does not end the wait: the flow may still consume the contact's next message. Send a public reply before resolving or cancel the session from the sessions screen. Automatic resolution does not cancel this wait either.

An integration or MCP tool that sends a public reply using an agent's user counts as human handling and ends the wait. To keep the previous behavior in that case, select Keep waiting in the node. Handling from a phone or an external message echo without an identified agent user does not end the wait under this rule; the echo may also confirm a message that the platform itself sent.

Use cases

  • Menu self-service: the contact picks a topic and is routed to the right team.
  • Lead qualification: a sequence of questions that store answers in variables and the CRM.
  • Scheduling and billing: collect data, create a charge, and confirm after payment.
  • Integration: look up an order via an HTTP request and reply with the status to the customer.

Tips, limits & best practices

  • Sketch the flow on paper before building β€” map the paths and exit points.
  • Always offer a path to talk to a human; not everything should stay automated.
  • Test every path, including unexpected replies from the contact.
  • Watch out for loops and excessive messages (WhatsApp anti-ban best practices).
  • Keep flows short and focused β€” split very large flows into reusable parts.

Troubleshooting

  • I don't see the Flow Builder: the module may not be enabled for the account or your role.
  • The flow doesn't start: check the trigger and that the flow is published and bound to the right inbox.
  • The flow stops midway: a node likely has no exit path for the reply received β€” cover every option and add a default path.
  • The HTTP request failed: use the request tester to check the URL, headers, and response.
  • The list arrived with a title or button in another language: set the Header and the List button text in the node. Empty fields use the default texts in the language configured for the account.
  • The button or header text arrived cut off: WhatsApp limits these fields and emojis take more space. Shorten the text or the variable you used.

See also