Case study · AI phone receptionist · Voice AI
FrontDesk AIAI phone receptionist Case Study
An AI phone receptionist for a demo cosmetic clinic, running on Vapi: it answers questions, qualifies the caller, books the appointment in Cal.com and logs the caller and the full transcript to HubSpot.
- Type
- Built to a written brief
- Role
- Call flow, prompt, backend, integrations, dashboard
- Status
- Deployed on Render, tested with Vapi browser calls; no phone number yet
- Service
- Voice AI
- Last updated


The problem
A busy clinic misses calls while the front desk is with a patient or already on the phone, and most of those callers want something simple: a price range, the opening hours or a time to come in.
What I built
FrontDesk AI is a voice receptionist on Vapi for a made-up clinic, Demo Aesthetics Clinic. It answers from the clinic's FAQ, finds out what the caller wants, and books, moves or cancels the appointment in Cal.com. The caller becomes a HubSpot contact and the call is logged against them with its transcript, and every call shows up on a dashboard. Cal.com and HubSpot are connected to real accounts; text confirmations (Twilio) and vector search (Qdrant) are built but run as mocks until their keys are added. The clinic, its prices and its doctors are invented, and every call so far is one of my own tests.
Walkthrough
See it working
A test call, from the first question to a confirmed booking, in one minute.
What it does
The features that matter
What it actually does, one feature at a time.
Answers from the clinic's FAQ
Services, price ranges, hours, doctors and aftercare come from the clinic's knowledge base. It quotes ranges, not exact prices, and offers a callback when the answer isn't there.
Books while the caller is on the line
It checks real Cal.com availability up to three weeks ahead, offers times, reads the name and number back to confirm them, and books. Existing appointments can be moved or cancelled on the same call.
Every caller lands in the CRM
The caller is created or updated as a HubSpot contact, and the call is logged on their record with the full transcript, so the front desk can pick it up from there.
Knows when to hand over
Clinical questions, an upset caller or a request for a person go to the front desk by call transfer. It never gives medical advice.
Honest from the first line
The greeting says the call may be recorded, and if asked, it says plainly that the clinic is a demo of an AI receptionist.
A call dashboard behind a login
Calls, bookings, conversion, escalations, missed calls and Vapi's average reply time, a list of every call, and which integrations are live or mocked. Phone numbers are masked to the last four digits.
Under the hood
How it works
The part nobody sees, step by step.
Answer
Vapi picks up, Deepgram Nova-3 transcribes the caller and GPT-4.1 mini replies in Vapi's Savannah voice, following one shared receptionist prompt.
Call a tool
When it needs the FAQ, the calendar or a booking, Vapi calls one webhook on a Node backend. The request must carry a shared secret, and every argument is checked with zod before anything runs.
Act
Adapters reach Cal.com for bookings, HubSpot for contacts, Twilio for texts and Qdrant for the FAQ. Any adapter without a key falls back to in-memory slots, a console log or keyword search, so the whole call can be tested with no paid accounts.
Log
Vapi's end-of-call report, with the transcript, recording link and average reply time, is saved to SQLite for the dashboard and logged to HubSpot as a call.
Screens
Every screen, as shipped
Captured from the running app. It has no public deployment yet.
The call dashboard
The deployed dashboard on Render. The calls on it are my own browser test calls to the demo clinic, not patients.



The call, on Vapi
One booking call from Vapi's side: the recording, the transcript and where the reply time goes.


Booked and logged
Where the call ends up. The booking lands in Cal.com (the clinic runs on Los Angeles time, so a 9 PM slot shows as 9:30 AM in India), and the caller becomes a HubSpot contact with the call and its full transcript on their record. The summary and sentiment panels are HubSpot's own AI reading that logged call.






On mobile
The dashboard on a phone.


The stack
- Voice
- Vapi · Deepgram Nova-3 · GPT-4.1 mini · Retell and Bland (kept as backups)
- Backend
- Node.js · Express · zod · SQLite (node:sqlite)
- Integrations
- Cal.com · HubSpot · Twilio · Qdrant
- Delivery
- node:test and supertest · GitHub Actions · Render
The result
64
automated tests, all passing, covering endpoint auth, webhook signatures, rate limiting, argument checks and the book → reschedule → cancel round trip; GitHub Actions runs them on every push
Source: npm test on the repo's main branch and the Tests workflow in GitHub Actions, 5 Oct 2026
Related Service
Service 02
Voice AI
Need a system like FrontDesk AI? I audit your workflows, build custom integrations, and hand over the keys in your accounts.
Related Reading
What a voice agent actually costs to run
Per-minute pricing looks trivial until you multiply it. A plain look at the running costs nobody quotes.
Read articleAI receptionist cost in India: real setup, running and API numbers
Per-minute voice AI costs in India, telephony rates on Exotel and Twilio, and how an AI phone receptionist compares to a full-time clinic front desk.
Read articleStart a project
Tell me what needs to change
Share your product and the work you need. I'll help you find the right scope and next step.
