Demo project

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.

screenshots
Screenshot of Vera · Barbershop

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

6-step flowHow the flow is designed (tested against mock servers)
  1. The flow receives the message (text or voice note) via the WhatsApp webhook

  2. n8n normalizes it, loads the industry preset and applies the anti-abuse guard

  3. The flow hands the message to the agent, which is set up to reply, request a tool or hand off to a person

  4. If the agent requests a tool, n8n calls the business API and returns the result

  5. The flow sends the agent's final reply out on WhatsApp

  6. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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