π¬ Automated voice appointment booking with Vapi AI and Google Calendar
β‘ 3,796 views Β· π¬ Support Chatbots
Description
What this template does
Connect a Vapi AI voice agent to Google Calendar to capture contact details and auto-book appointments. The agent asks for name, address, service type, and a preferred time. The workflow checks availability and either proposes times or books the slotβno code needed.
How it works (node map)
- Webhook: Production URL = VAPI Server URL β receives tool calls from Vapi and returns results.
- 1. CONFIGURATION (EDIT ME) β your timezone, work hours, meeting length, buffers, and cadence.
- Route by Tool Name β routes Vapi tool calls:
checkAvailabilityβ calendar lookup pathbookAppointmentβ create event path
- 2. Get Calendar Events (EDIT ME) β reads events for the requested day.
- Calculate Potential Slots / Filter for Available Slots β builds conflict-free options with buffers.
- Respond with Available Times β returns formatted slots to Vapi.
- 3. Book Appointment in Calendar (EDIT ME) β creates the calendar event with details.
- Booking Confirmation β returns success back to Vapi.
> Sticky notes in the canvas show exactly what to edit (required by n8n). No API keys are hardcoded; Google uses OAuth credentials.
Requirements
- n8n (Cloud or self-hosted)
- Google account with Calendar (OAuth credential in n8n)
- Vapi account + one Assistant
Setup (5 minutes)
A) Vapi β n8n connection
- Open the Webhook node and copy the Production URL.
- In Vapi β Assistant β Messaging, set Server URL = that Production URL.
- In Server Messages, enable only
toolCalls.
B) Vapi tools (names must match exactly)
Create two Custom Tools in Vapi and attach them to the assistant:
Tool 1: checkAvailability
- Arguments
initialSearchDateTime(string, ISO-8601 with timezone offset, e.g.2025-09-09T09:00:00-05:00)
Tool 2: bookAppointment
- Arguments
startDateTime(string, ISO-8601 with tz)endDateTime(string, ISO-8601 with tz)clientName(string)propertyAddress(string)serviceType(string)
> The Switch node routes based on message.toolCalls[0].function.name. If the names differ, nothing will run.
C) Configure availability
Open 1. CONFIGURATION (EDIT ME) and set:
timeZone(e.g.America/New_York)workdayStartHour/workdayEndHour(24h integers)meetingDurationMinutes(e.g.30or60)bufferBeforeMinutes/bufferAfterMinutes(e.g.15)bookingCadenceMinutes(e.g.30)
D) Connect Google Calendar
- Open 2. Get Calendar Events (EDIT ME) β Credentials: select/create Google Calendar OAuth. Then choose the calendar to check availability.
- Open 3. Book Appointment in Calendar (EDIT ME) β use the same credential and same calendar to book.
E) Activate & test
- Toggle the workflow Active.
- Call your Vapi number (or start a session) and book a test slot.
- Verify the event appears with description fields (client, address, service type, call id).
Customising
- Change summary/description format in 3. Book Appointment.
- Add SMS/Email confirmations, CRM sync, rescheduling, or analytics as follow-ups (see sticky note βIβm a noteβ).
Troubleshooting
- No response back to Vapi β confirm Vapi is set to send toolCalls only and the Server URL matches the Production URL.
- Switch doesnβt route β tool names must be exactly checkAvailability and bookAppointment.
- No times returned β ensure timezone + work hours + cadence generate at least one future slot; confirm Google credential and calendar selection.
- Event not created β use the same Google credential & calendar in both nodes; check OAuth scopes/consent.
Security & privacy
- Google uses OAuth; credentials live in n8n.
- No API keys hardcoded.
- Webhook receives only the fields needed to check times or book.
π Nodes Used
Webhook, Google Calendar
π₯ Import
Download workflow.json and import into n8n:
Workflow menu β Import from File