Vera: a WhatsApp receptionist for service businesses
WhatsApp receptionist: n8n flows ready to plug into an AI agent
A WhatsApp-style mockup shows how Vera would serve a barbershop, a takeaway kitchen, a dental clinic and a garage, and how each record lands in the business's system. Behind it, four n8n flows set up to talk to the WhatsApp Cloud API and an AI agent.
No public link: the mockup isn't published; it's shown with screenshots and video.
Context
Service businesses get the same WhatsApp questions all day: prices, hours, bookings, orders, “is my car ready?”. Answering by hand eats into service time; a bot that makes up prices or talks over the staff is worse. Each industry changes what can be done by chat.
Solution
Two pieces. The mockup: a scripted demo (no backend, no language model) that walks through each industry and moves from the chat to the business's screen —calendar, patient record, work-order board or kitchen ticket— with the new record highlighted.
The n8n flows: the main flow receives Meta's webhook, loads the industry preset, applies an anti-abuse guard, is set up to ask the agent and run at most one tool against the business API; plus a sub-flow that transcribes voice notes, reminders every 15 minutes using approved templates, and status-change notifications.
Architecture
The flow receives the message (text or voice note) via the WhatsApp webhook
n8n normalizes it, loads the industry preset and applies the anti-abuse guard
The flow hands the message to the agent, which is set up to reply, request a tool or hand off to a person
If the agent requests a tool, n8n calls the business API and returns the result
The flow sends the agent's final reply out on WhatsApp
Every 15 min, the reminders flow sends templates with “Confirm” / “Change”
Components
- WhatsApp Cloud API (Meta): inbound webhook and templates
- n8n: main flow (53 nodes), audio, reminders, status notifications
- Agent service (tool-calling LLM) behind its own HTTP contract
- Business API: catalog, availability, book, cancel, menu, orders
- Per-industry JSON presets (prompt, tools, copy, templates)
Technical decisions
One tool round per message
If the agent asks for a second tool, it hands off to a person instead of chaining calls. Why: no risk of loops or runaway cost.
Trade-off a two-step request ends up with a human.
An industry is a data preset, not another flow
Prompt, tools, copy and templates live in one JSON per industry, and a validator checks every tool has its branch and the data matches the mockup.
Trade-off after editing a preset it has to be re-embedded into the flows with a script.
The agent behind an HTTP contract
The flow defines request and response; the model can come from any provider.
Trade-off that service has to be hosted separately.
The bot steps back when a person takes over
On hand-off the chat is paused for 4 hours so the bot doesn't compete with staff.
Trade-off during that pause the bot stays silent in that chat even if the person is done.
Anti-abuse guard in workflow state, no database
A per-minute message cap across all chats and a notice to the manager at most once an hour.
Trade-off fine for one instance; with several it would have to move into the API.
Results
- 142 layout measurements, 0 failures (16 widths in the chat; 8 widths from 320 to 2560 px on the platform view)
- All 8 walkthroughs (4 industries × 2 branches) complete and the record shows up in the system
- 61 contrast pairs, all ≥ 4.9:1
- Site under 330 KB, 0 external requests, 0 console errors
- All 4 flows imported into n8n 2.27.4 and run end to end against mock servers
It has not been tested against the real Meta API or a real agent.
Stack
- Dependency-free HTML/CSS/JS
- n8n
- WhatsApp Cloud API
- tool-calling LLM agent (HTTP contract)
- Node.js (validators and tests)
- Playwright
