# Chatbot flow design: 12 best practices for conversations people actually finish

> Good chatbot flows have one goal, say they are a bot, accept typed answers as well as buttons and never leave the Other branch empty. They reuse what the customer already said, bring in live data and always offer a route to a person.

URL: https://on-chat.live/guides/chatbot-flow-design-best-practices/
Last updated: 2026-10-27

A visual [flow builder](https://on-chat.live/flow-builder/) makes it easy to build a chatbot. It also makes it easy to build a frustrating one. The difference is almost never the tool. It's the design of the conversation.

These twelve practices come from how real customers behave in WhatsApp, SMS and Messenger conversations. Use them as a checklist before you launch a flow.

## 1. Start with one goal per flow

Every flow should finish one job: book an appointment, track an order, qualify a lead. When a flow tries to do everything, its branches multiply and nobody can maintain it.

If customers need several things, build a short **menu flow** that sends them into focused flows with **Enter another flow**. Each sub-flow stays simple, and you can reuse it from anywhere.

## 2. Say who you are and what you can do

The first message sets expectations. Compare:

> ❌ Hello! How can I help you today?

> ✅ Hi Sara 👋 I'm the Nile Store assistant. I can track orders, change deliveries or connect you to our team.

The second tells the customer it's a bot, names the options, and promises a way to reach a person. People are much more patient with a bot that's honest about being one.

## 3. Offer choices, but accept free text

Quick replies are faster than typing, and they steer customers onto paths you've planned. But many people still type, especially on SMS, where buttons don't exist.

So for every **Wait for the contact to respond**, add rules for the typed equivalents too. If your quick replies are `Track my order` and `Talk to someone`, also match **has any of the words** `track, status, where` and `agent, human, person`.

## 4. Never leave "Other" empty

**Other** is where every unexpected reply goes, and it is used more than you think. A good pattern:

1. First miss: rephrase the question and show the options again.
2. Second miss: offer a person by opening a ticket.

Never send someone back to the same question three times with the same words. That's the moment customers give up.

## 5. Validate answers at the moment you ask

If you need a number, date, email or phone number, use the matching split rule: **has a number**, **has a date**, **has an email** or **has a phone number**. Customers fix mistakes far more willingly right after a question than three steps later.

Make the retry message specific: "Please send the date like 14/11" works better than "Invalid input."

## 6. Personalise with what you already know

Asking for information the customer already gave you is the fastest way to feel robotic. Use expressions:

- `@contact.first_name` for their name
- `@fields.city` or any contact field you've saved
- `@results.order_number` for an answer from earlier in this flow

And save useful answers back to the contact with **Update the contact**, so the next flow doesn't ask again.

## 7. Bring in live data instead of generic replies

"Your order is on the way" is a script. "Your order 48213 is with Aramex and arrives Thursday" is service.

A **Call a webhook** step can fetch order statuses, balances, appointment slots or anything else your systems know, and the response is ready in the next message as `@webhook`. See our guide on [making chatbots dynamic with webhooks](https://on-chat.live/guides/dynamic-chatbot-webhooks/).

## 8. Keep messages short, then shorter

Messaging isn't email. Aim for:

- one idea per message,
- no more than 2–3 short lines,
- no more than 3 quick replies (that's also what many channels display best).

If you need to send a lot of information, split it into two messages or send a link.

## 9. Design the handoff, not just the bot

Every flow needs a clear route to a person. With **Open a ticket with a human agent** you can:

- choose a **topic** so it reaches the right team,
- write a ticket body that summarises what the bot already learned (`Order @results.order_number, issue: @results.issue`),
- tell the customer what happens next.

The agent then sees the whole conversation in the [ticketing workspace](https://on-chat.live/live-chat-ticketing/) and never has to ask "How can I help?" again.

## 10. Respect time and timing

Customers walk away mid-conversation. Decide what happens then:

- Set a **timeout** on long waits so the flow can follow up ("Still there? Reply with your order number whenever you're ready").
- On WhatsApp, remember the 24-hour customer service window. Outside it, you can only start a conversation with an approved template.

## 11. Test like a confused customer

The **Simulator** lets you run the flow as a contact. Don't just test the happy path:

- type misspellings and emoji,
- send an answer in the wrong format,
- send nothing and test the timeout,
- make the webhook fail (use a wrong order number).

If a path feels long in the simulator, it will feel twice as long on a phone.

## 12. Measure, then improve

After launch, the flow editor shows how many contacts took each path. Look for:

- **drop-offs**: steps where many contacts stop responding,
- **busy "Other" branches**: questions people don't understand,
- **unexpected handoffs**: things the bot could handle itself with one more branch.

Results can be exported to Excel, and every change you make is kept in the flow's revision history, so you can improve with confidence.

## A quick pre-launch checklist

Run through this checklist before you launch any flow; each line maps to one of the practices above.

| Check | Done? |
|---|---|
| One clear goal for the flow | ☐ |
| First message says it's a bot and lists options | ☐ |
| Typed answers match the quick replies | ☐ |
| Every wait has an "Other" path | ☐ |
| Answers validated where they're asked | ☐ |
| Known details reused, not re-asked | ☐ |
| A route to a person from every branch | ☐ |
| Timeouts on long waits | ☐ |
| Every path tested in the simulator | ☐ |

Ready to put this into practice? Follow the [step-by-step WhatsApp chatbot tutorial](https://on-chat.live/guides/how-to-build-a-whatsapp-chatbot/) or [start building for free](https://on-chat.live/org/signup/).

## Put this guide into practice

- [Visual flow builder](https://on-chat.live/flow-builder/): Build dynamic conversation flows without code: branch on answers, use live data from your systems and run one flow on WhatsApp, SMS and voice.
- [Live chat ticketing](https://on-chat.live/live-chat-ticketing/): A help desk for WhatsApp, SMS and social chats. Bots open tickets, agents accept and reply in a fast workspace, and managers track agent performance.

## Keep reading

- [How to Build a WhatsApp Chatbot Without Code](https://on-chat.live/guides/how-to-build-a-whatsapp-chatbot/): A step-by-step tutorial for building a dynamic WhatsApp chatbot in a visual flow builder, from your first message to live data and agent handoff.
- [Make Your Chatbot Dynamic with Webhooks](https://on-chat.live/guides/dynamic-chatbot-webhooks/): Connect your chatbot flows to live data. Learn how webhooks, expressions and splits turn a scripted bot into one that answers with real information.
- [Build a Lead Qualification Chatbot Flow](https://on-chat.live/guides/lead-qualification-chatbot-flow/): Qualify leads automatically on WhatsApp and SMS. A ready-to-build chatbot flow that scores leads, routes hot ones to sales and nurtures the rest.
