🤖 Automations & Chatbots

Buttons, lists or free text: how to ask a customer something

The three-button limit shapes more of your flow design than anything else — and a tap is worth more than an answer.

The Ask a Question step is the workhorse of any WhatsApp flow: it sends a question, waits for the answer, and gives each possible answer its own branch on the canvas. It accepts four reply types — buttons, list, free text and date — and choosing between them decides how many customers actually answer.

One hard limit shapes everything: WhatsApp allows a maximum of three interactive buttons. Build a five-button menu in the canvas and you will discover this in production.

The four reply types

TypeLimitCustomer effortBest for
Buttons3 optionsOne tapYes/no, confirm/cancel, a short menu
ListMany options, scrollableTap, scroll, tapSizes, reasons, ratings, longer menus
Free textAnything typedTypingOrder numbers, addresses, open questions
DateGenerated day optionsOne tapDelivery slots, appointments

The effort column is the one that predicts response rate. Every additional action loses people, so a three-option button question reliably outperforms the same question as a list, which outperforms the same question as free text.

Why a tap is worth more than the answer

This is the part that is easy to miss. A tap is a message from the customer, so it opens a fresh 24-hour customer service window — and inside that window everything you send is free text at no charge, per Meta's pricing documentation. Service conversations have been free and unlimited since 1 November 2024.

So a question does two jobs: it collects information, and it converts the rest of the conversation into free messages. That is why our order confirmation flow asks Confirm or Cancel rather than announcing that the order was received. A statement ends the conversation; a question buys a day.

Writing options people tap

  1. Keep them short. Long labels get truncated on a phone, and a truncated button is a button nobody taps.
  2. Make them distinct. "Track my order" and "Order status" are the same option written twice.
  3. Put the likeliest first. Most people take the first plausible option rather than reading all three.
  4. Always include an exit. "Talk to a person" belongs on any menu that could strand someone.
  5. Never make the customer guess. If none of your three options fits, they will type something, and your flow needs to cope with that.

When to use a list instead

Any time you need more than three options. The obvious cases are a 1–5 satisfaction rating, a set of return reasons, sizes, or a menu with more than three destinations.

Lists cost you a little engagement — a scroll is friction — so do not reach for one where three options would do. A common mistake is offering eight menu items when the top three cover ninety per cent of enquiries and the rest could sit behind "Something else".

Saving the answer

The question step has a save reply to setting that stores the answer straight onto a contact field. Use it rather than adding a separate save step afterwards — the extra step is not needed and can overwrite the value with a blank.

The field must exist first, under Settings → Contact Attributes. If it does not, the save silently does nothing and the variable reads back empty, which is the single most common cause of a flow sending "Hi ," with nothing after it. See saving customer answers to contact fields.

Every option becomes a branch. That is the whole branching model — one exit per answer. A question with three options and only two wired branches leaves one group of customers staring at a conversation that went silent, so walk every path in the simulator before publishing.

Asking on a cold chat

A flow started by a store event or your own system lands on a conversation the customer may never have written to, so the window is shut and free-form interactive messages are not allowed. The question step handles this with an ask via template option: it sends an approved template carrying quick-reply buttons instead.

Two requirements come with it. The template must be approved, and each option in your flow must match a quick-reply button title character for character. A mismatch means the tap resolves to nothing and the flow stalls — the most common reason an order-confirmation flow appears to work and then goes quiet.

Asking for a date

The date reply type generates day options for you rather than making the customer type one, which removes an entire class of parsing problem. It can also skip today entirely, or drop today once a daily cutoff has passed — useful for a dispatch deadline, where offering today after 2pm is a promise you cannot keep.

Handling the answer you did not offer

Real customers type things. Someone offered three buttons will still write "how much is delivery?" instead of tapping, and a flow with nowhere for that to go strands them.

Rating questions

A buttons or list question can be flagged to record a satisfaction score, with the number carried in each option's label — "5 - Excellent" down to "1 - Bad". The digit matters: the score is read from the label text, so "Excellent" alone does not score. Scores appear under Analytics → Customer satisfaction, and the mechanics are in collecting satisfaction scores.

A checklist before publishing a question

  1. Three options or fewer? Use buttons. More? Use a list.
  2. Every option has a branch wired to it.
  3. There is a way to reach a person.
  4. Any contact field you save into already exists.
  5. If sent as a template, the option labels match the button titles exactly.
  6. Walked in the simulator, including the paths you think nobody will take.

How long a question stays open

A question does not wait forever. It carries an expiry, after which the flow stops treating the next message as an answer — which matters because a customer who replies two days later should reach a person, not be silently slotted into a branch they have forgotten choosing.

Set it to match how the question behaves in real life. An order confirmation can reasonably wait a day; a "which of these three do you want?" during a live chat should expire much sooner, because a stale pending question is what swallows a customer's later, unrelated message.

Questions on Instagram and Messenger

The same step works across channels, but the rendering differs: WhatsApp shows interactive buttons and lists, while Instagram and Messenger use quick replies. Templates are WhatsApp-only, so a question set to send via template falls back to quick replies on the other two.

Practically this means a flow you build once works on all three, but you should check how a long option label renders on each before assuming it looks right.

What a question costs

SituationWhat is sentCost
Customer messaged you firstInteractive buttons or listFree
Cold chat, asked via templateApproved template with quick repliesCharged once
Everything after they tapFree textFree

The middle row is the only charged one, and it buys the bottom row. Meta's sending messages documentation confirms the window opens on any customer message — including a button tap — and resets each time.

Three questions worth building first

  1. "What would you like to do?" — three buttons on a first message, routing to order status, a product question, or a person.
  2. "Confirm or cancel?" — on a new order, which catches bad orders before you ship and opens a free window either way.
  3. "Did that answer your question?" — after an automated answer, which gives you a route to a human and a quality signal in one tap.

All three are short, all three earn a tap, and none of them needs anything configured beyond the text.

The mistake worth avoiding

Asking a question you cannot act on. A menu offering "Check stock" when nothing in your flow can see stock levels produces a customer who taps it and then waits for an answer that never comes.

Before adding an option, check that the branch behind it can genuinely finish the job — with a lookup, an answer, or a person. If it can only apologise, the honest version is not to offer it.

The same applies to the question itself. Asking "how can I help?" as free text invites answers your flow has no path for, whereas three concrete options set an expectation you can actually meet. Constrain the question to what you can handle, and let the knowledge base or a person take everything else.

Frequently asked questions

How many buttons can a WhatsApp message have?

Three. For more options, switch the reply type to list, which shows a scrollable menu instead — at the cost of a little engagement, since a scroll is extra friction.

Should I use buttons or free text?

Buttons wherever the answer is a choice. Every extra action loses people, so a tap outperforms typing — and a tap also opens a fresh 24-hour window, making the rest of the conversation free.

How do I ask a question on a chat the customer never started?

Use the 'ask via template' option, which sends an approved template carrying quick-reply buttons. Each option in your flow must match a button title character for character.

Why does my flow go quiet after the customer taps a template button?

Almost always a label mismatch. If the flow's option text differs from the template's quick-reply button title by even a word, the tap resolves to nothing.

Need help? Message us