AI booking agent
The best first agent for most service businesses: clinics, salons, workshops, tutors, driving schools, test centres. The job is bounded, every action is reversible, the value is obvious (a slot filled, a no-show avoided), and the whole conversation fits inside WhatsApp's free service window. The demo on this site is this agent.
The pattern in six steps
- Identify the customer from the channel (phone number) and look up history — returning patient, outstanding balance, preferred practitioner.
- Constrain the search from the request: service, date range, time window, practitioner. Ask one question if something essential is missing; never three.
- Offer at most three slots, as a WhatsApp list message so the reply is a tap.
- Confirm — the guardrail. Map the reply to a slot ID unambiguously, re-check the slot is still free, then write with an idempotency key.
- Remind — schedule a utility template for the day before (US$0.004 to +263), with a one-tap "reschedule" button that reopens the loop.
- Close — state reference, time, place, cancellation window; log a trace; go idle.
Why the confirmation gate is non-negotiable
Availability is stale the moment it is fetched. Two customers can be offered the same 14:30. The agent therefore treats get_availability as advisory and create_booking as the only truth: the write either succeeds or returns "slot taken", and the agent gracefully offers the next option. The idempotency key (channel + conversation + slot) means a retried webhook cannot create a duplicate.
Tools
| Tool | Returns | Notes |
|---|---|---|
lookup_customer(phone) | record, history, balance | read; drives personalisation and policy (e.g. deposit required) |
get_availability(service, from, to, window, limit) | slots with practitioner | read; advisory |
create_booking(customer, slot, service, key) | booking ref or conflict | write; only after explicit choice |
cancel_booking / move_booking | new state | write; policy-checked (cut-off, fee) |
schedule_template(template, params, at) | job id, cost | write; utility category |
create_handoff(reason, summary) | ticket | always available |
Edge cases the golden set must contain
- "Tomorrow" sent at 23:50; public holidays; the clinic's half-day Saturday.
- A customer who chooses "2" after the list was re-sent with different options.
- A returning customer with an unpaid balance where policy says "deposit first" — the agent explains, sends a Paynow link, and books only after the payment result arrives.
- Requests that look like bookings but are clinical or contractual ("can I get antibiotics", "I want to cancel my membership") — scope guardrail, handoff.
- Mixed-language messages ("Ndoda appointment yeThursday afternoon").
What it costs
Per booked appointment: about US$0.025 of model tokens on a mid-tier model with caching, US$0.004 for the reminder template, and nothing for the replies themselves. A thousand bookings a month is on the order of US$30 in variable cost before hosting and any BSP platform fee — the arithmetic is on the costs page; the anatomy is in this article.
Calendar and practice systems
Google Calendar and Microsoft 365 have documented APIs and are the easiest back-ends. Practice-management or salon software varies: some expose an API, some only a web interface (in which case the tool is a thin wrapper that a person can also use). See integrations.