This example uses Workflows. For new builds, use Assistants or Squads. See the updated guides: Assistant - Appointment Scheduling or Squads.
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:
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.

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.
The default template includes a conversation node. Click on it and configure:
Extract Variables:
intentStringThe customer's primary intentschedule, reschedule, cancel, status, otherClick the + button below the greeting node and add a new Conversation node:
Extract Variables:
phone_numberStringCustomer's phone number if providedcustomer_nameStringCustomer's full name if providedAdd 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.
Create branching paths based on the customer’s intent. Add multiple conversation nodes:
Schedule New Appointment Node:
Reschedule Appointment Node:
Cancel Appointment 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.
For the schedule appointment flow, add these nodes:
Service Selection Node (Conversation):
Extract Variables:
service_typeStringType of service requestedpreferred_dateStringCustomer's preferred datepreferred_timeStringCustomer's preferred timeAvailability Check Tool Node:
Select Tool: Choose “Check Availability” from the pre-defined calendar tools
Availability Results Node (Conversation):
Booking Confirmation Node (Conversation):
Extract Variables:
confirmation_statusStringWhether customer confirms the appointment detailsCreate Appointment Tool Node:
Select Tool: Choose “Schedule Event” from the pre-defined calendar tools
Send Confirmation Node (Tool):
Select Tool: Choose your pre-configured SMS/email confirmation tool
Completion Node (Conversation):
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!
Create Phone Number for a new Vapi number, orImport Phone Number to use your existing number from Twilio/TelnyxJust 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: