Vapi Appointment Confirmation Agent
An outbound voice agent that calls patients or customers to confirm upcoming appointments. When someone needs to reschedule, the agent checks real-time calendar availability, books a new slot, and sends a confirmation email - all during the live phone call. Cancellations trigger an immediate Slack alert to the front desk. Vapi handles the calling and speech; ChatBotKit handles every action the agent takes through a single MCP server endpoint. Use Vapi's batch calling API to confirm an entire day's appointments in one request.
Missed appointments cost service businesses billions every year. Automated reminder calls reduce no-show rates by 30-40%, but most reminder systems are one-way - they play a recorded message and hang up. If the patient needs to reschedule, they still have to call the office back, wait on hold, and coordinate with a human.
This blueprint turns the reminder call into a two-way conversation that can actually solve the problem. The voice agent confirms the appointment, and if the patient says "I can't make it Thursday", the agent checks the clinic's real availability, offers alternative slots, books the new appointment, sends a confirmation email, and updates the patient record - all in a single phone call that takes under two minutes.
Why each tool exists
Every ability in this blueprint serves a specific moment in the conversation:
-
The call starts. The agent greets the patient and states the appointment details. No tool call needed yet - Vapi's assistant system prompt contains the appointment context passed via
assistantOverrides.variableValueswhen the call was created. -
The patient confirms. The agent uses Send Confirmation Email to email a written confirmation with the date, time, and location. The patient has a record in their inbox.
-
The patient needs to reschedule. The agent uses Check Available Slots to query Google Calendar for open appointments that match the clinic's working hours and slot duration. It reads back two or three options.
-
The patient picks a slot. The agent uses Book Appointment to reserve the slot by creating a calendar event with the patient as an attendee. Then it sends a confirmation email with the new details.
-
The patient cancels outright. The agent uses Notify Front Desk to post to the clinic's Slack channel with the patient name, cancelled time, and reason. The front desk can try to fill the slot.
-
After any outcome, the agent uses Update Patient Record to write the call result (confirmed, rescheduled, cancelled) back to HubSpot so the CRM stays current and the patient is not called again for the same appointment.
There are no generic "look up lead" or "search contacts" abilities because the agent does not need to discover who it is calling. The calling system already knows - the patient's name, appointment date, and phone number are injected into the Vapi assistant at call creation time. The tools exist only for actions the agent takes in response to what the patient says.
How to trigger the calls
Vapi supports three outbound calling patterns, and this blueprint is designed around the batch pattern:
- Batch - Your backend queries upcoming appointments (e.g.
everything in the next 48 hours), builds a
customersarray with one entry per patient, and POSTs to/call. Vapi calls each patient using the same assistant and MCP tools. This is the primary workflow. - Scheduled - add a
schedulePlanwithearliestAtandlatestAtto queue calls within a time window (e.g. only call between 9am and 12pm). - Single - POST with one customer for ad-hoc confirmation calls triggered by a receptionist or a webhook.
In all three cases, use assistantOverrides.variableValues to
inject the appointment context (patient name, date, time, service
type) so the agent knows exactly why it is calling without needing
a CRM lookup tool.
Architecture
ChatBotKit owns the tools. Vapi owns the call. MCP is the bridge.
When a call starts, Vapi connects to the ChatBotKit MCP server,
discovers all available tools, and injects them into the
assistant's context. Each tool invocation during the call creates
a separate MCP connection with an X-Call-Id header for tracing.
This means you can add or modify tools in ChatBotKit and the next call picks them up automatically. No Vapi-side reconfiguration needed.
Extending the blueprint
- Add
google/calendar/event/updateto let the agent modify existing appointments (e.g. change duration or add notes) - Add
twilio/message/sendto send an SMS confirmation instead of or in addition to email - Add a second skillset with
hubspot/crm/contact/searchfor a receptionist bot that can look up patients manually - Connect a trigger integration to automate the batch calling (query appointments from your booking system on a schedule and POST to the Vapi API)
Backstory
Common information about the bot's experience, skills and personality. For more information, see the Backstory documentation.
Skillset
This example uses a dedicated Skillset. Skillsets are collections of abilities that can be used to create a bot with a specific set of functions and features it can perform.
Check Available Slots
Check the clinic calendar for available appointment slots. Use this when a patient needs to reschedule so you can offer them concrete alternatives.Book Appointment
Book an available time slot for the patient. Use this after the patient has chosen a slot from the availability list.Send Confirmation Email
Email the patient a written confirmation of their appointment - whether confirmed as-is or rescheduled to a new time.Notify Front Desk
Alert the front desk on Slack when a patient cancels. Include the patient name, cancelled time slot, and reason so the team can try to fill the opening.Update Patient Record
Write the call outcome back to the patient's HubSpot record. Set the confirmation status (confirmed, rescheduled, or cancelled) and any notes from the conversation.
Terraform Code
This blueprint can be deployed using Terraform, enabling infrastructure-as-code management of your ChatBotKit resources. Use the code below to recreate this example in your own environment.
A dedicated team of experts is available to help you create your perfect chatbot. Reach out via or chat for more information.