01
Booking by phone
Vapi runs the call and invokes tools that are Convex HTTP actions. They check Google Calendar, then book, reschedule or cancel while the patient is still on the line.
My own productPre-launch
An AI receptionist that answers a dental clinic's phone, books the appointment and knows when to hand over to a person. Clinic staff watch every call from a multi-tenant dashboard.

A small dental clinic misses calls while the front desk is busy, and every missed call can be a missed booking. The receptionist has to pick up every time, book correctly and never pretend to be a clinician.
The hard requirements: book against the clinic's real calendar during the call, and hand anything clinical, urgent or about money to a person.
01
Vapi runs the call and invokes tools that are Convex HTTP actions. They check Google Calendar, then book, reschedule or cancel while the patient is still on the line.
02
Emergencies, billing disputes and clinical questions go to staff. The AI's only moves on a clinical question are to answer from the clinic's FAQ or escalate.

03
Owners and staff see calls, appointments, the knowledge base and AI settings. After each call the Claude API writes a summary, and n8n sends the patient an SMS confirmation.
The caller talks to Vapi, Vapi calls Convex, and Convex is the whole backend.
Telephony, speech-to-text, barge-in and text-to-speech latency are hard real-time problems. Vapi owns them, and my code owns the dental rules.
Trade-off: per-minute cost and less control over the speech pipeline.
Queries, mutations, actions and HTTP actions are the backend, so there is no second service to deploy, and the dashboard gets live call lists for free.
Trade-off: no row-level security, so every function enforces the clinic boundary in code.
No diagnosis, insurance claims or payments. Anything that needs clinical judgement is escalated to a person.
Trade-off: more calls reach staff than a looser assistant would send.