If you run a small business, your "storefront" probably isn't a website. It's a WhatsApp number.
And your "checkout flow" is a stream of chat messages like this:
"Hi, is the blue one available?"
"2 chicken burgers and a fries, deliver to Green Town"
"How much total?"
Every one of those messages needs a human to read it, figure out what the customer actually wants, reply, and write the order down somewhere before it gets buried under newer chats. On a slow day, that's fine. On a busy day, messages get missed, orders get mixed up, and sales are lost simply because nobody could type fast enough.
So I built an automation for it in n8n. This post is the full breakdown: what the workflow does, why each step exists, and the gotchas to avoid if you build your own.
The problem: one chat, four separate headaches
WhatsApp ordering looks simple from the outside — "just take the order." In practice, four different jobs land in the same chat window:
- Order capture. Someone has to turn a free-form message ("send 2 of the chicken one and one zinger") into a structured order: item, quantity, name, delivery address.
- Lead qualification. Not every message is an order. Some people are price-shopping, some want a bulk quote, some are just browsing. They shouldn't all get the same treatment.
- FAQs. "What time do you close?" "Do you deliver to my area?" "Is cash on delivery available?" The same handful of questions, answered again and again, every single day.
- Follow-ups. The customer who asked about a price three hours ago and went quiet. Without a nudge, that conversation just dies.
A good automation has to handle all four — which is why "just connect WhatsApp to a chatbot" usually disappoints. The trick is to route first, automate second.
The workflow, step by step
Here's the architecture I ended up with. It's a single n8n workflow with a clear path:
WhatsApp message → Webhook trigger → Parser → Intent router → branch (sheet + confirmation reply) → Human handoff for everything else
Step 1: The trigger (webhook)
The workflow starts with a Webhook node. When a customer sends a WhatsApp message, the WhatsApp Business API (or a provider built on it) POSTs the message to that webhook URL, and n8n wakes up with the sender's number and the message text in the payload.
Why a webhook: it's event-driven. You don't poll anything, you don't burn executions while idle, and the customer gets a reply in seconds instead of whenever someone notices the phone buzzing.
Step 2: The parser
Raw chat text is useless to a database, so the next step extracts structure from it: which items were mentioned, what quantities, a name if the customer gave one, and the delivery address if present. A simple approach is keyword matching against your menu or product list. A more flexible one is sending the message to an LLM with a strict JSON output schema (item, quantity, name, address) and validating the result before anything downstream touches it.
Why this step exists on its own: parsing fails sometimes ("the usual pls"). If parsing is a separate step, you can inspect exactly what it extracted, log the failures, and improve it without touching the rest of the workflow.
Step 3: The intent router
This is the heart of the design. A Switch node classifies each message into one of three intents:
- Order — the customer wants to buy something.
- Question — they're asking about hours, delivery areas, payment methods.
- Lead — bulk orders, catering, resale, anything that deserves a real conversation and a follow-up.
Why route before acting: each intent needs different handling, different data, and a different tone. An order needs accuracy. A question needs speed. A lead eventually needs a human — but a logged human conversation, not one buried in a chat list.
Step 4: Log the order (Google Sheets or Airtable)
Order-branch messages get written as a row in Google Sheets (or Airtable, if you want nicer views): timestamp, customer number, name, items, quantities, address, status = "New". The team works from the sheet, moving the status from "Preparing" to "Delivered".
Why a spreadsheet and not something fancier: the business owner already knows Sheets. Zero training, zero new logins. The fanciest system in the world loses to the one people actually open.
Step 5: The automatic confirmation reply
Immediately after logging, n8n sends a WhatsApp reply back through the API: a summary of the order exactly as it was parsed — something like "2× Chicken Burger, 1× Fries, deliver to Green Town. Reply YES to confirm, or tell me what to change."
Why this matters more than it looks: the confirmation doubles as an error check. If the parser misread the order, the customer corrects it before anyone starts preparing anything. And customers stop sending "???" follow-ups, because they know the order landed.
Step 6: The human handoff rule
Anything the router can't confidently classify — complaints, unusual requests, a plain "call me" — does not get an automated guess. It gets flagged, written to a "Needs attention" list, and the owner gets a notification. A human takes over from there, in the same chat.
The gotchas (learned the hard way)
- Always keep a human fallback. The goal is to remove repetitive work, not to remove humans. A bot that confidently misunderstands a customer is worse than no bot at all.
- Never let a bot guess prices. Prices must come from your actual price list — a lookup in the same sheet — never from the parser's imagination. If the item or price isn't found, that's a handoff, not a hallucination opportunity.
- Confirm before you commit. The confirmation message in Step 5 isn't politeness. It's your validation layer.
- Log everything, even failures. The messages your automation can't handle are a goldmine: they're your next FAQ entries and your parser's best test cases.
This pattern generalizes
Swap "orders" for "bookings" and the same shape works in a lot of places:
- Salons and barbers — booking requests get parsed into service + time, logged to a sheet, and confirmed automatically; rescheduling questions route to the FAQ path.
- Clinics — appointment requests vs. general questions vs. "I need to speak to someone" (always a human, and fast).
- Course sellers and coaches — lead qualification up front: which course, what level, ready to enroll or just curious — each answer gets a different follow-up.
The industries change. The pattern — trigger, parse, route, log, confirm, hand off — doesn't.
If you want the ready-made version
Full disclosure: after building this pattern more than once, I packaged it as WhatsAppKit — 4 production n8n workflows covering the four headaches from earlier: an Order Bot, a Lead Qualifier, an FAQ Bot, and an Opt-in Broadcast workflow. It's the same architecture described in this article, just pre-built and tested, so you can import it instead of wiring every node yourself.
It's $49 one-time on Gumroad, and the code WHATSAPP10 brings it to $39: https://onyxailabs.gumroad.com/l/ttxqw
The full catalog of tools is here, if you want to browse: https://onyxailabs.github.io/Catalog/
And honestly, if you'd rather build it yourself, everything above is genuinely enough to do it — that's the point of the breakdown.
What would you automate first in your business chats? Order-taking, FAQs, follow-ups — or something else entirely? I'm curious what breaks first in other people's inboxes, so drop it in the comments.
Top comments (0)