Flow builder

Design exactly what your bot says and does — visually, no code. Drag in blocks, connect them, insert variables, preview, and publish.

Chat flow vs voice flow

When you create a flow you first choose Chat bot or Voice bot. This decides which blocks and channels are available — chat flows walk step-by-step through buttons and menus; voice flows drive a spoken conversation.

On a voice call the agent follows your flow's steps naturally and performs the real actions — it will create a live payment link, look up an order over your API, save a CRM lead, send an email, hit a webhook or update a Google Sheet at the right moment in the call, not just talk about it.

Adding blocks

On the left of the canvas is the Add a block panel — search it or browse by category:

  • Core — Send Message, AI Reply, Ask a Question.
  • Interactive — Buttons, List Menu, Send Media (upload an image/video/PDF or paste a link — we host it), Show Form (web).
  • Logic & data — Set Variable, Condition, Wait / Delay, HTTP request, Google Sheets, JavaScript.
  • Contacts & actions — Add to Group (or remove; pick an existing group or type a name and it's created on first use — pairs with the “added to a group” trigger so one sequence can hand off to the next), Save CRM lead, Send Email, Send SMS, Webhook.

Click a block to drop it on the canvas, then drag from a block's handle to another to connect the steps.

Menus that build themselves (dynamic options)

A Buttons or List Menu block can build its options while the bot is running, from a variable holding rows — a Google Sheet read, an API response or a JavaScript block. Add a row to the sheet and the menu grows on its own; you never touch the flow.

On the block, fill in:

  • Build the options from a variable — the variable holding the rows (leave blank for a normal fixed menu).
  • Column to show as the option — e.g. Region. Repeated values collapse automatically, so a store sheet that repeats the region on every row still shows each region once.
  • Column to save when tapped — optional; defaults to the column being shown.
  • Only rows where … equals … — optional filter, e.g. only rows where Region equals {{region}}, so the second menu shows just the locations in the region they picked.

Because the options aren't known until the bot runs, a dynamic menu has one outgoing branch — Each option → — plus the usual No match branch. Wire the next step once and use the saved variable after it. WhatsApp's own limits are handled for you: 3 reply buttons or 10 list rows per screen, with a More ▸ row when there are more, and long names trimmed to fit.

A typical store locator: Google Sheets (read all rows → stores) → List Menu (options from stores, show Region, save to region) → List Menu (options from stores, show Location, only rows where Region = {{region}}, save to location) → Google Sheets (find the row for that region + location, save Address and MapLink to variables) → Send Message with {{Address}} and {{MapLink}}.

When a customer goes off script

People type sentences more often than they tap buttons, so a menu understands both. “mujhe gold chahiye” or “I want to book” picks the matching option, in English, Hinglish, Hindi or Marathi. If a sentence could mean two options, the bot asks again rather than guessing.

When a reply matches nothing, the bot does not move on and does not restart:

  1. First miss — it asks again and shows the options.
  2. Second miss — it asks again and adds “or type MENU to start over”.
  3. Third miss — it stops repeating itself and offers two buttons: Main menu and Talk to a person.

Main menu returns to the start and keeps the details the customer already gave. Talk to a person notifies your team and pauses the bot for that chat. If nobody else is on your workspace and the Support Desk is off, the button reads Leave a message instead and the bot stays on, so a customer is never left waiting for someone who is not there.

Want typed answers to go somewhere specific? Wire the menu’s No match output to any step. A menu with a single unlabelled wire accepts any typed answer and carries it forward.

Using variables & emojis

Inside any message box, use the + Variable button to insert a merge field like {{First Name}}, and the 😊 Emoji button to add emojis. The Save to variable field on many blocks captures what the customer says (email, choice, phone…) for reuse later or in an integration.

Preview & test

Hit Try it to run the flow in a live preview and click through it exactly as a customer would — before it goes live. The builder also flags broken links (steps with no next step).

When does a flow start? (triggers)

Step 3 of Create flow asks “When should it start?”. Pick one:

  • When a new chat or call starts — the main entry point; runs when someone first messages or calls.
  • When the user sends a keyword — runs only when the message matches one of your keywords (e.g. price, book).
  • When a contact is added to a group — pick one or more contact groups; the flow runs the moment a contact joins one of them (from the Contacts page, a flow's Add-to-group step, or the API). Perfect for a welcome or follow-up sequence. Bulk CSV imports deliberately do not fire it, and each contact runs a given flow at most once every 10 minutes, so a flow can't loop.
  • When a call comes in — incoming phone calls (voice bots).
  • Only when another flow calls it — a sub-flow; it never starts on its own.
  • Manually / via API — you trigger it from code, an inbound webhook or a payment event.

Wait steps & drip sequences

The Wait / Delay block (Logic & data) pauses the flow. A few seconds reads like a natural typing pause. Set it to minutes, hours or days and the flow becomes a drip sequence: “Welcome message → wait 2 days → tips → wait 3 days → offer”. The wait is saved on the server, so it survives restarts and can run up to 30 days.

  • Start it from a trigger — e.g. When a contact is added to a group, a keyword, or the API — and every contact walks through the sequence on their own timeline.
  • If the contact replies while waiting — by default the sequence keeps its schedule and your AI agent (or inbox) answers the message. Choose continue now to end the wait early and move to the next step instead. A greeting like “hi” or “menu” restarts the flow from the top.
  • Channels — long waits work on WhatsApp, SMS and the other messaging channels. Web chat can't be messaged later, so waits longer than 15 seconds are skipped there.

Waits in working hours and working days

Set the Wait block's Count to working time only and the wait is counted only while you are open. Pick your working days and hours in the same block (Monday to Saturday, 10:00 to 18:00 unless you change it).

  • Working hours and minutes pass only during opening hours: 4 working hours started at 5 pm on Saturday end at 1 pm on Monday.
  • Working days land at the same time of day, that many working days later: 3 working days from Friday 3:30 pm is Tuesday 3:30 pm when Sunday is off.
  • A wait that starts outside working time is counted from the next opening, so it never ends at night or on a day off.

Make AI call: ring people who have not responded

The Make AI call block (Logic & data) has one of your calling agents phone the contact and say what you write in What the call is for, in the agent's own voice and language. Write it the way you would brief a colleague, with the contact's details filled in: “Remind {{user_name}} to fill in their details on WhatsApp. Tell them you are sending the message again now.”

  • Call each person at most 1 to 6 times. The count is kept per person; after it the block leaves by Tried enough.
  • Do not call people in these groups, for example “Completed” and “Do not call”. Add people to the group with an Add to Group block when they finish; they then leave by No call needed and are never rung.
  • When may it ring: working time only (the default) or any time. A call that falls outside the hours waits for the next opening.
  • Three ways out: Called, No call needed and Tried enough. Wire Called to a message that re-sends your form or template, then to a Wait, then back into the same block, and you have a follow-up that repeats until the person responds or the tries run out.
  • At most three calls from flows are on the line at once for a workspace; the rest wait a minute and try again, so a large broadcast does not ring everybody in the same moment.
📞 The call uses your own phone, voice and AI accounts, exactly like any other AI call, and needs a plan with AI calling. It respects your DND / compliance settings. The flow carries on as soon as the call is placed; it does not wait for the conversation to end.

The ready-made template Follow up by AI call until they respond has the whole loop built: wait, check, call, re-send, repeat. In the Flow Builder, choose Voice bot / AI calls at the top and you will find it under AI calls. Because the flow itself runs on WhatsApp, it is listed with your Chat bot flows once created.

Ready-made flows are grouped by what they are: Chatbots without AI (buttons and questions, no AI key), AI chatbots, and AI calls.

Sub-flows & publishing

Use sub-flows for reusable pieces (order status, payment reminder, FAQ). When you're happy, click Publish — your draft becomes live, you can keep editing a new draft without affecting customers, and roll back to an earlier version any time.

✅ Start from a Template Store flow and tweak it — faster than building from scratch and it shows the patterns that work.

AI Reply with buttons and smart suggestions

An AI Reply block can now carry buttons: add up to three labels (one per line) and the answer and the buttons go out as one WhatsApp message, not an answer followed by a separate menu. Wire each button to its next step. Turn on Smart follow-up and the AI adds a suggested next question as a button — tapping it asks that question, so people can go deeper without typing. Anything typed is treated as a new question and answered in the same way, with the last few turns remembered. Use Don't send — only save when you want the answer in a variable for a later step.

⌨️ On WhatsApp the bot now marks the message as read and shows typing… while the flow or the AI prepares the reply; the web widget shows a typing bubble too.

Frequently asked questions

Can the AI answer and the buttons be sent as one WhatsApp message?
Yes. Add button labels to the AI Reply block and the answer goes out as a single interactive message with those buttons. Smart follow-up adds an AI-suggested next question as a button; typed text is answered as a new question with the last few turns remembered.
Do I need to code to build a bot?
No. The flow builder is fully visual — drag blocks onto a canvas, connect them, insert variables, and publish. Advanced blocks (HTTP request, Google Sheets, JavaScript) are optional for power users.
Can I test a flow before it goes live?
Yes. Use 'Try it' to run the flow in a live preview and click through it as a customer would. The builder also flags dead-end steps.
What is a sub-flow?
A reusable piece of conversation (like order status or a payment reminder) that a main flow jumps into, so you don't rebuild the same steps across bots.
Can a flow start automatically when I add a contact to a group?
Yes. Choose the trigger 'When a contact is added to a group' and pick the group(s). The flow runs as soon as a contact joins — from the Contacts page, another flow, or the API. Bulk CSV imports don't fire it, and each contact runs a given flow at most once every 10 minutes.
Can I build a drip sequence (messages spread over days)?
Yes. Add a Wait / Delay block between messages and set it to minutes, hours or days (up to 30 days). Waits are stored on the server, so they survive restarts. Start the sequence from a trigger such as 'When a contact is added to a group'. If the contact replies mid-wait, the schedule continues by default and your AI answers them, or set the block to 'continue now'.
Can I roll back a published flow?
Yes. Publishing creates a version; you can keep editing a separate draft and roll back to an earlier version at any time.
Do flow actions like payment links and API calls work on voice calls too?
Yes. On a voice call the agent performs the flow's real actions at the right moment — creating a payment link, looking up an order via your API, saving a CRM lead, sending an email, calling a webhook or updating a Google Sheet — the same integrations that run in chat, not just spoken descriptions.