Skip to content
Norveth

Our kit · demo conversation · Automation · official WhatsApp Cloud API

WhatsApp assistant kit

A WhatsApp bot for a small business: prices, FAQs, bookings, callbacks and a hand-over to a person, with every lead saved to a Google Sheet the owner owns.

Status
Kit ready; no client deployments yet
Stack
  • TypeScript
  • Cloudflare Workers + KV
  • WhatsApp Cloud API
  • Google Apps Script
  • Claude API (optional)
  • Vitest

DemoDemo conversation. “Smile Care Dental” is the kit's sample configuration: placeholder business, prices and numbers.

Results

automated tests passing (re-run 2026-09-24)
66 / 66automated tests passing (re-run 2026-09-24)
returned to a forged webhook signature in the simulator
401returned to a forged webhook signature in the simulator
greeting languages: English, Telugu, Hindi
3greeting languages: English, Telugu, Hindi
hosting: Cloudflare free tier, Sheet and Apps Script
₹0hosting: Cloudflare free tier, Sheet and Apps Script
estimated Meta charges a month for a small clinic (from partner-reported rates)
~₹40estimated Meta charges a month for a small clinic (from partner-reported rates)

Source: whatsapp-bot README and test suite; the conversation below is the kit's own simulator output.

The problem

Small businesses answer the same WhatsApp questions all day and lose enquiries that arrive after hours.

What we built

  • A conversation engine: menu, services and prices, FAQ, lead capture, bookings with time-zone-aware slots, capacity and holidays, after-hours replies, and a hand-over that alerts the owner and then stays quiet.
  • Greetings in English, Telugu and Hindi.
  • Webhooks verified with HMAC-SHA256 in constant time; the handler acknowledges Meta immediately, works in the background and drops retried duplicates by message id.
  • The Google Sheet is the source of truth for bookings: Apps Script takes a lock and rejects a slot that is already full, and the bot offers the next free times.
  • Optional AI mode answers only from the business's own facts, returns structured JSON, and runs a number guard: any price, time or phone number not in the facts means the answer is discarded and a person takes over.

Built for the owner's phone bill

Meta now bills service replies per message, so the engine sends one reply per customer message where it can: an FAQ answer arrives as the body of a button message, not as a text followed by a separate menu.

The conversation

A customer asks a question, books a slot and asks for a person. The owner gets an alert each time.

Smile Care Dental

Demo business · sample config

  1. Hi

  2. Hello Priya! 👋 Welcome to Smile Care Dental. How can we help you today? Tap Menu below.

    • Services & prices
    • Book appointment
    • FAQs
    • Hours & location
    • Request a callback
    • Talk to a person
  3. do you take upi?

  4. UPI, cards and cash are all accepted at the clinic.

    More questionsMain menu
  5. I want to book an appointment

  6. What would you like to book?

    • Consultation · ₹300 · 20 min
    • Scaling & cleaning · ₹1,200 · 40 min
    • Tooth filling · ₹1,500 – ₹2,500
  7. Consultation

  8. Pick a day:

    • Today (Thu 24 Sep) · 8 slots free
    • Fri 25 Sep · 13 slots free
    • Sat 26 Sep · 7 slots free
  9. Fri 25 Sep · 10:00

  10. Please confirm your booking: 🗓 Fri 25 Sep at 10:00 💼 Consultation (₹300) 👤 Priya

    ConfirmChange timeCancel
  11. Confirm

  12. To the owner's phone🔔 New booking: Priya — Consultation on Fri 25 Sep at 10:00.
  13. ✅ Booked! Fri 25 Sep at 10:00 — Consultation. Please arrive 10 minutes early and bring any previous X-rays or prescriptions.

    Main menu
  14. I want to talk to a person

  15. To the owner's phone🔔 Priya wants to talk to a person. Reply: open chat
  16. 🙋 I've alerted Dr. Rao's front desk. They'll contact you on this number shortly.

Demo. Output of the kit's simulator on its sample configuration; placeholder business and prices. Button taps are shown as the customer's messages.

What it doesn't do

Written down here so nobody finds out later.

  • Meta's reviews are the timeline risk, not the code: display-name and template approval can add 1 to 3 days.
  • The number guard catches invented numbers, not every invented claim, so AI mode is tested on 20 real customer questions before it is switched on, and it's off by default for the clinic example.
  • Proactive messages (reminders, broadcasts) need approved templates and aren't built in.
  • Bookings go to the Sheet, not to Google Calendar.

Want something like this?

Tell us what you need. You get a fixed price, or a short scoping call, within 48 hours.

Email us: hello@norveth.app