Appointment scheduling workflow
Build an AI receptionist workflow that schedules, reschedules, and cancels appointments using Vapi workflows.
Overview
Build an AI-powered appointment scheduling workflow that handles inbound calls for booking, rescheduling, and canceling appointments. The workflow uses visual nodes to create branching logic, integrates with calendar systems, checks availability in real-time, and sends confirmation messages.
What You’ll Build:
- Visual workflow with branching appointment logic
- Real-time calendar integration and availability checking
- Customer database with automated confirmations
- Global nodes for error handling and validation
- 24/7 phone booking with conditional routing
Prerequisites
- A Vapi account.
- A Google Calendar account (or other calendar service).
Scenario
We will be creating an appointment scheduling workflow for Tony’s Barbershop, a traditional barbershop that wants to automate their phone booking process with sophisticated branching logic to handle different appointment scenarios.
Final Workflow

1. Create a Knowledge Base
Dashboard
TypeScript (Server SDK)
Python (Server SDK)
cURL
2. Create a Workflow
Dashboard
TypeScript (Server SDK)
Python (Server SDK)
cURL
3. Build the Workflow
You’ll start with a default template that includes a “Call Start” node. We’ll modify the existing nodes and add new ones to create our appointment scheduling workflow.
Configure the Initial Conversation Node
The default template includes a conversation node. Click on it and configure:
Extract Variables:
- Variable:
intent
- Type:
String
- Description:
The customer's primary intent
- Enum Values:
schedule
,reschedule
,cancel
,status
,other
Add Customer Verification Node
Click the + button below the greeting node and add a new Conversation node:
Extract Variables:
- Variable:
phone_number
- Type:
String
- Description:
Customer's phone number if provided
- Variable:
customer_name
- Type:
String
- Description:
Customer's full name if provided
Add Customer Lookup Tool Node
Add a Tool node:
Select Tool: Choose your pre-configured customer lookup tool from the dropdown. This tool will use the extracted phone_number
and customer_name
variables to find the customer in your database.
Add Intent Routing Logic
Create branching paths based on the customer’s intent. Add multiple conversation nodes:
Schedule New Appointment Node:
Reschedule Appointment Node:
Cancel Appointment Node:
Add Global Error Handling Node
Create a global conversation node that checks for errors after every step:
This global node will activate whenever there’s an error or the customer becomes frustrated, regardless of where they are in the workflow.
Add Availability Checking Flow
For the schedule appointment flow, add these nodes:
Service Selection Node (Conversation):
Extract Variables:
- Variable:
service_type
- Type:
String
- Description:
Type of service requested
- Variable:
preferred_date
- Type:
String
- Description:
Customer's preferred date
- Variable:
preferred_time
- Type:
String
- Description:
Customer's preferred time
Availability Check Tool Node:
Select Tool: Choose “Check Availability” from the pre-defined calendar tools
- This will automatically check available slots based on the extracted preferences
Availability Results Node (Conversation):
Add Confirmation and Booking Flow
Booking Confirmation Node (Conversation):
Extract Variables:
- Variable:
confirmation_status
- Type:
String
- Description:
Whether customer confirms the appointment details
Create Appointment Tool Node:
Select Tool: Choose “Schedule Event” from the pre-defined calendar tools
- This will book the appointment in your calendar system
Send Confirmation Node (Tool):
Select Tool: Choose your pre-configured SMS/email confirmation tool
Completion Node (Conversation):
Add Transfer and Hangup Options
Transfer to Human Node:
Node Type: Transfer Call
Phone to transfer to: +1-555-BARBER-1
(your barbershop number)
End Call Node:
Node Type: End Call
First Message: Thank you for calling Tony's Barbershop. Have a great day!
- Use when customer is satisfied and no further assistance needed
4. Configure Phone Number
Dashboard
TypeScript (Server SDK)
Python (Server SDK)
cURL
Create or Import Phone Number
- Click
Create Phone Number
for a new Vapi number, or - Click
Import Phone Number
to use your existing number from Twilio/Telnyx
Next Steps
Just like that, you’ve built an automated appointment scheduling workflow that can handle inbound calls, manage bookings, and provide 24/7 availability for your barbershop.
Consider reading the following guides to further enhance your workflow:
- Custom Tools - Create custom tools for calendar integration and customer management.
- Voice Formatting Plan - Configure speech formatting for clear appointment communication.
- Dynamic Variables - Use variables to personalize appointment confirmations.