Skip to content
All projects

AI agent · 2025

AI WhatsApp Booking Agent

A hybrid human-plus-AI booking system for a golf booking service. The AI handles the golfer conversation on WhatsApp; a human operator confirms club availability and verifies payments from a dashboard. Both work from the same data and stay in sync without a refresh.

typing per booking, down from 20 to 25
<10 min
bookings per operator
2.5 to 3x
Role
Tech lead, team of one or two
Built at
Amphibia Digital
Channel
WhatsApp
Stack
  • Convex
  • Next.js
  • FastAPI
  • OpenAI API
  • WhatsApp Cloud API
AI WhatsApp Booking Agent — opening & guardrails

Overview

Before the system, an operator spent most of each booking typing: reading the request, asking for the club, date, time, and player count, relaying availability, sending bank details, and writing the confirmation. Twenty to thirty messages per booking, across several conversations at once, and some slipped through unanswered.

The agent now absorbs that messaging. One OpenAI call per inbound message returns the reply, the booking fields it extracted, and an intent, and the booking state machine in Convex does the rest. The operator's job shrinks to the parts that need judgement: phoning the club, checking a payment screenshot, and clicking a status button. That was a deliberate choice. Clubs only take phone calls, and a wrong automatic payment check would be worse than a 60-second human look.

Related:GolfXS

What I built

  • Structured output per message: reply text, extracted booking fields (club, date, time, players), and an intent such as confirming_yes, so the code branches in TypeScript instead of chaining model calls.
  • System prompt anchored on today's date and the live club list from the database, so the model doesn't invent clubs or misread "Saturday". Declines prompt-injection attempts without leaking internal data.
  • Conversation history bounded to the last twelve messages; payment screenshots sent over WhatsApp are stored and attached to the booking automatically.
  • Operator dashboard on Next.js and Convex: every status change fires the right WhatsApp message and email, and the operator never opens WhatsApp.
  • FastAPI handles only the Meta webhook ingress, where the raw-body HMAC signature is validated in isolation.

Screens

2 captioned views. Select any to enlarge.

Conversations

2 views

  1. 01Opening & guardrails

    The agent lists the clubs it can book, then declines an "ignore all previous instructions" prompt-injection attempt without revealing internal data.

  2. 02Booking flow

    From a free-text request ("cyberjaya lakes club tomorrow at 2pm"), it normalises the club and time, asks for party size, and recaps before submitting.

Available for freelance

Open to senior / lead roles · remote or relocating to Singapore

Hiring for a senior or lead role?

I take systems from requirements to production: mobile, web, backend, and AI agents. Tell me about the problem and I will reply within a day on weekdays.