WhatsApp flow builder
Free · no signupSet a trigger keyword, write the greeting and up to three buttons with their replies. Tap the buttons in the preview to test it, then export the JSON.
Flows that actually run.
DMly runs this flow live on your number, with conditions, human handover and booking built in.
Three Buttons, and That Is the Whole Design Problem
Three is the ceiling. Not four, not a scrolling menu, not a list with categories in it: three tappable buttons on an interactive reply message, which is WhatsApp’s own limit and the constraint the WhatsApp flow builder above is built around. Everything difficult about designing a first reply comes out of that number, because it forces you to decide what your three most common questions actually are rather than covering everything.
Most businesses, asked to name them, get two right immediately and argue about the third for ten minutes. That argument is the useful part.
What the WhatsApp Flow Builder Gives You
A trigger keyword, a greeting, three buttons with a reply behind each one, a preview you can tap to test it, and a JSON export.
What it does not give you is a running flow, and it is worth saying that at the top rather than at the bottom. Nothing here connects to WhatsApp. The panel is where you design and argue about the wording, and the JSON is what you hand to whatever is going to run it.
That is more useful than it sounds. Most flows that go wrong went wrong at the design stage, in a conversation nobody wrote down, and the value of a page like this is that the argument happens somewhere you can see the result.
The Trigger Keyword
One word starts the flow, and the panel opens on HI.
In the preview it appears as the customer’s own message, which is the right way to read it: this is not a menu you push at somebody, it is what happens when they say something. The keyword you choose should be a word people would naturally send.
Two things worth deciding here rather than later. Whether the keyword is something you advertise, printed on a card or in an ad, or whether it is simply the first thing anybody says. And whether one keyword is really enough, because HI, HELLO and HEY are three different words and a customer picks one without thinking. The panel gives you a single field, so if the answer is that you need several, that is a note to carry into whatever builds the flow for real.
The Greeting Is a Question, Not a Welcome
The greeting is the message that carries the buttons, and the commonest mistake is writing it as a welcome.
The default reads: thanks for messaging us, what can we help you with. That works because it ends on a question the three buttons answer. A greeting that ends on a full stop leaves the buttons floating underneath as decoration, and people reply with text instead of tapping.
Keep it to a line or two. This is the message where somebody decides whether the conversation is going to be easy, and a paragraph in a chat window reads as a form.
Choosing the Three Buttons
The panel opens on book an appointment, see prices, and opening hours. For a very large number of small businesses those are genuinely the right three, which is why they are the default rather than a placeholder.
If you want to choose yours properly, do not do it from memory. Open your actual inbox, read the last forty first messages from customers, and count what they were asking. Most businesses find one of their three assumed questions barely appears, and something they had never thought of as a category comes up constantly.
Keep the titles to two or three words. The panel does not cap their length, but whatever finally sends the message will have its own limit, and a title that gets cut in half is worse than a shorter one you chose.
One button should almost always be the one that makes you money. Prices, booking, availability. It is easy to build a helpful flow that never once offers to sell anybody anything.
Writing the Reply Behind Each Button
Each button carries one reply, and the test of a good one is whether the conversation can continue after it.
Look at how the defaults are written. Which day suits you best, reply with a day and we will send back the times we have free. Tell us what you are after and we will confirm the exact price before you book. Both of them end by asking for something specific, so the customer has an easy next move and you get information you need.
The opening hours reply is the exception, and it is the exception on purpose. It answers the question and stops, because somebody asking when you are open wanted the hours and not a conversation. Not every branch has to lead somewhere.
Avoid replies that end in an open invitation to say anything. Let us know if you need anything else is where a flow goes to die.
Testing It in the Preview
The right hand side is a chat with your keyword sitting in it as the customer’s message, your greeting underneath, and your three buttons drawn as buttons.
Tap one and the reply appears below it. The panel opens with the first button already selected, so there is a complete exchange on screen before you touch anything.
Read it as a conversation rather than as a form you have filled in. The question worth asking is whether a person who tapped that button now knows what to do next. If the answer is that they would probably type a question instead, the reply needs rewriting.
Empty button rows simply do not appear. If you only want two buttons, leave the third blank and it disappears from the preview and from the export.
What the JSON Actually Contains
The block at the bottom is the flow written out as data, and it is short enough to read.
There is a trigger object holding a type of keyword and the keyword itself. There is the greeting as a single string. Then an array of buttons, each with an id, a title and a reply, numbered btn_1 through btn_3 so that the ids line up with the row labels in the form rather than counting from zero somewhere.
That is the entire structure. No conditions, no branching beyond one level, no variables, no timing and no fallbacks, because none of those things exist in the panel either.
It is worth being clear about what this file is. It is a tidy, portable description of a flow in this panel’s own shape. It is not an import format for any particular platform, and nothing will swallow it whole. Treat it as a specification you hand to whoever is building the thing, which is exactly what a two minute design document should be.
What the WhatsApp Flow Builder Will Not Do
The panel is a design surface, and the honest list of what that excludes is long enough to matter.
- It does not run anything. No connection to WhatsApp, no number, no account, no send.
- One level of branching. A button leads to a reply, and the reply leads nowhere. There are no buttons on the second message.
- No conditions. Nothing changes by customer, by time of day, by whether they have bought before, or by anything else.
- No handover. There is no way to say that this button should fetch a human.
- No variables. Every reply is fixed text, so no names, no order numbers and no dates.
- No fallback. Which is the big one, and it gets its own section below.
- Nothing is stored. Close the tab and the flow is gone, so copy the JSON before you do.
The whole panel is built on the server before any script runs, which is why the preview and the JSON are already complete and correct when the page appears.
The Message That Matches No Button
Somebody will type a question. They will type it instead of tapping, and they will type it after tapping, and they will type it in the middle of the night.
This panel has nothing for that, because a flow this shape assumes everybody stays on the rails. A flow that runs for real needs an answer to it, and the answer is usually one of three: a catch-all reply that says a person will pick this up, a handover to whoever is on shift, or a genuine attempt to answer the question.
Decide which one before you build it, because the fallback is what customers experience on the days your flow does not fit them, and it is the part that gets designed last if it gets designed at all.
The wording of that catch-all is worth its own ten minutes. The welcome message generator covers what a first reply should say when it is carrying the whole conversation on its own.
Making It Actually Run
A three button flow that answers the three questions you really get is worth more than a clever one that covers everything, and this panel is a good way to reach the first without drifting into the second.
Turning it into something live is the other half. DMly runs a flow like this on your own number with the parts the panel deliberately leaves out: conditions, handover to a person, and booking inside the conversation rather than a link out to somewhere else.
Two things worth having ready first. The greeting the flow opens with, which is the same problem the welcome message generator solves for a plain first reply, and a way for people to start the conversation at all: the WhatsApp chat button generator gives you a floating button that opens the chat with your keyword already typed in the box.
Frequently asked
The ids are row numbers, not positions in the finished list. Button 1 has no title, so that row is skipped and the two below it keep the numbers printed on their labels, which leaves a gap at the front. The reply you typed in the skipped row does not travel either. Move the wording up into the first row if you want the export to start at btn_1.
Because a button with no title is no longer tappable, so the panel moves the selection to the first row that still has a name rather than leaving a reply on screen that nobody could reach. The bubble underneath changes to match. Type a title back in and tap the row you wanted, and it stays where you put it.
Both are real, in different places. The break is kept in the text you typed and it travels into the export, where it is written inside the reply string as an escaped character rather than as an actual new line. The chat bubble does not honour it, so the reply wraps as one paragraph there. If the break matters to you, check it in the JSON block rather than in the preview.
Not to this panel. The field opens on HI, and the capitals are just how the default is written. Whatever you type is exported exactly as it stands, with only the spaces at either end taken off. Nothing here changes the case, checks it is a single word, or warns you that a phrase is not really a keyword. Whether the match is case sensitive is decided by whatever runs the flow, not by anything on this page.
A link yes, as characters. There are only two kinds of field here, a line for the title and a box for the reply, so a web address goes in as plain text and comes out of the export as plain text. The preview draws it as words rather than as something tappable, because the bubble is filled as text. There is nowhere to attach an image, a document or a location, and no second message behind a reply to hang one on.
More WhatsApp tools
All 45 tools →WhatsApp link generator
Build a click-to-chat wa.me link with your message already typed, ready for your bio, ads and site.
Broadcast cost calculator
What one campaign to your whole list actually costs to send.
WhatsApp QR code generator
A scannable code that opens a chat with your message already typed. Print it anywhere.
