If time available Respond
Configured with Airtable, Google Calendar, Item Lists, Respond To Webhook, and additional nodes. Review the connections and setup before adapting this template.
Node categories in this workflow
- Transform
- Code
- Routing
- Web / API
- Trigger
- Integration
- Data store
Icons describe general node roles, inferred from node types. Inspect the parameters for the configured action.
Drag to pan; use + and − to zoom. Reconstructed from the exported node positions; nothing runs here. Dashed lines represent non-main connections. Full node names and notes appear below.
How it works
The exported workflow contains the following configured nodes. Their connections are shown above; inspect the JSON for the complete logic, expressions, and external actions.
| Node | Category | Type | Operation |
|---|---|---|---|
| Input Arguments | Transform | Edit Fields | See node parameters |
| Format response | Transform | Item Lists | concatenateItems |
| Sort | Transform | Item Lists | sort |
| Available Start Times & Ranges | Code | Code | See node parameters |
| Flatten Slots | Code | Code | See node parameters |
| Enrich Date | Code | Code | See node parameters |
| Build Response Payload | Transform | Edit Fields | See node parameters |
| Booking Payload | Transform | Edit Fields | See node parameters |
| Success Response | Transform | Edit Fields | See node parameters |
| Add Friendly Error | Code | Code | See node parameters |
| Error Response | Transform | Edit Fields | See node parameters |
| Escape Json | Code | Code | See node parameters |
| Has all information | Routing | If | See node parameters |
| Respond with Error | Web / API | Respond To Webhook | See node parameters |
| Build Error Response Payload | Transform | Edit Fields | See node parameters |
| Build Error Response Payload2 | Transform | Edit Fields | See node parameters |
| Getslot_tool | Trigger | Webhook | See node parameters |
| Check Availability | Integration | Google Calendar | calendar |
| Response | Web / API | Respond To Webhook | See node parameters |
| Check if time is available or not | Routing | If | See node parameters |
| Time available (true) & Call_id | Transform | Edit Fields | See node parameters |
| Get All Calendar Events | Integration | Google Calendar | getAll |
| Extract start, end and name | Transform | Edit Fields | See node parameters |
| Convert into Json format for Vapi | Code | Code | See node parameters |
| Response to Vapi | Web / API | Respond To Webhook | See node parameters |
| bookslots_tool | Trigger | Webhook | See node parameters |
| Input Arguments from booking tools | Transform | Edit Fields | See node parameters |
| Convert time to CST America / Chicago | Code | Code | See node parameters |
| Create Event | Integration | Google Calendar | See node parameters |
| Respond to Vapi | Web / API | Respond To Webhook | See node parameters |
| If the booking is confirmed then true | Routing | If | See node parameters |
| Information to be Saved in Airtable | Transform | Edit Fields | See node parameters |
| Logs the confirmed booking details | Data store | Airtable | create |
| Updateslots_tool | Trigger | Webhook | See node parameters |
| Input Arguments from updateslot tool | Transform | Edit Fields | See node parameters |
| Checks if required info is provided. | Routing | If | See node parameters |
| Finds original appointment | Data store | Airtable | search |
| Response with Error | Web / API | Respond To Webhook | See node parameters |
| Update Event | Integration | Google Calendar | update |
| Updates Airtable record | Data store | Airtable | update |
| Response & call_id | Transform | Edit Fields | See node parameters |
| Respond to Vapi about Updating slots | Web / API | Respond To Webhook | See node parameters |
| CancelSlots_tool | Trigger | Webhook | See node parameters |
| Input Arguments from cancelslot tool | Transform | Edit Fields | See node parameters |
| Checks if required info is provided for cancelation | Routing | If | See node parameters |
| Finds the appointment record | Data store | Airtable | search |
| Build Error Response | Transform | Edit Fields | See node parameters |
| Respond with Error to Vapi | Web / API | Respond To Webhook | See node parameters |
| Delete Event | Integration | Google Calendar | delete |
| Update Airtable record | Data store | Airtable | update |
| Call_id & Response | Transform | Edit Fields | See node parameters |
| Respond to Vapi about cancelation | Web / API | Respond To Webhook | See node parameters |
| call_results | Trigger | Webhook | See node parameters |
| All Input Arguments | Transform | Edit Fields | See node parameters |
| Save all information | Data store | Airtable | upsert |
Setup
- Download the JSON and import it into an isolated n8n instance. Leave the workflow inactive.
- Connect your own credentials through n8n’s credential store. Replace
REPLACE_WITH_*values with your resource identifiers. - Inspect API destinations, Code nodes, database queries, file paths, and outbound actions.
- Run with synthetic data and harmless destinations. Enable triggers only after checking the actual outputs.
Requirements
An n8n instance with the listed node types and compatible versions. Service-connected workflows may require accounts, credentials, or paid APIs.
Credential types declared in the source
None declared. HTTP requests and Code nodes may still need configuration.
Workflow notes
Get Available Slots
Get Available Slots
Format the slots and Enrich the date and timings
Sticky Note BookSlot Check
Checks if required booking info (email, name, etc.) is provided.
Sticky Note BookSlot Error
If info missing, sends error back.
Sticky Note BookSlot GCal
Books the appointment in Google Calendar.
Sticky Note BookSlot Error Handle
Handles potential booking errors (e.g., slot taken).
Sticky Note BookSlot Response
Sends confirmation/error back to Vapi.
Sticky Note BookSlot Airtable
Logs the confirmed booking details to Airtable.
Sticky Note CancelSlot Check
Checks if required info (email, name, start time) is provided.
Sticky Note CancelSlot Search
Finds the appointment record in Airtable by phone number to get event ID.
Sticky Note CancelSlot GCal Delete
Deletes the event from Google Calendar using event ID.
Sticky Note CancelSlot Airtable Update
Updates Airtable record status to 'Canceled'.
Sticky Note CancelSlot Response
Sends cancellation confirmation/error back to Vapi.
Sticky Note UpdateSlot Check
Checks if required info (email, name, old/new times) is provided.
Sticky Note UpdateSlot Search
Finds original appointment in Airtable by old phone number
Sticky Note UpdateSlot GCal Update
Updates the event time in Google Calendar.
Sticky Note UpdateSlot Airtable Update
Updates Airtable record with new times & 'Updated' status.
Sticky Note UpdateSlot Response
Sends rescheduling confirmation/error back to Vapi.
Call Result logs
Call Result logs
Receives call summary and recording details post-call.
Sticky Note CallResults Airtable
Logs call transcript, recording URL, summary, cost, customer number to Airtable.
Vapi System Prompt
Vapi System Prompt
First Message:
Hi, this is Ellie with Harrison Climate Solutions how can I help you?
----END----
System Prompt:
[Identity]
You are Ellie, the friendly and knowledgeable voice receptionist for Harrison Climate Solutions, an HVAC service company based in San Antonio, Texas.
- Current Date and Time: {{"now" | date: "%b %d, %Y, %I:%M %p", "America/Chicago"}}
[Style]
- Use a friendly, conversational tone with a hint of Texan warmth.
- Be warm, approachable, and slightly humorous to create a comfortable and friendly experience for callers.
- Use casual, conversational language, incorporating friendly fillers like “Umm...,” “Well...,” or “I mean.”
- Keep responses brief and engaging, mirroring a natural conversation style to suit the voice format.
[Response Guideline]
- Use a friendly and conversational tone, never saying "Asterisk" or similar technical terms.
- Limit responses to essential information only, breaking up information into bite-sized pieces when possible.
- Remember this is a telephone conversation. Give the caller opportunities to talk.
- Politely redirect any off-topic questions back to Harrison Climate Solutions' services or appointment scheduling.
- If they hadn't requested an endtime always assume for 30 mins meeting.
- When asking for EMAIL always say: " Can you spell your email please ? ".
[Reminder]
-
Use your knowledge base to access more information about the business.
-
Current Date and Time: {{"now" | date: "%b %d, %Y, %I:%M %p", "America/Chicago"}}
-
Do not repeat the caller.
-
Do not Book Calls on Saturday and Sunday and on Holidays (Always getslots)
-
Mention that Harrison Climate Solutions operates Monday through Friday, 8 a.m. to 5 p.m.
-
ONLY MOVE FORWARD when you have correct NAME, EMAIL and TIMMINGS.
-
When people ask about your phone number, your phone number is 4158923245 Guideline When speaking the phone number, transform the format as follows:
-
Input formats like 4158923245, (415) 892-3245, or 415-892-3245
-
Should be pronounced as: "four one five - eight nine two - three two four five"
-
Important: Don't omit the space around the dash when speaking
Always ask to spell the email out. How to spell out The possible email format is user@example.com to spell out an email address is N - A - M - E - @company.com, YOU MUST read them out with regular words like 'company' or 'blue'. For names, you must read them out letter by letter, for example, 'P - R - A - T - I - K'. @ is pronounced by "at" or "at direct".
- State Numbers, Times & Dates Slowly For 1:00 PM, say “One PM.” For 3:30 PM, say “Three thirty PM.” For 8:45 AM, say “Eight forty-five AM.” Never say “O’Clock.” Instead just say O-Clock never O'clock, This is non-negotiable—always say “AM” or “PM.
[Tool Usage Guidelines]
-
Booking Appointments (BookSlot Tool)
- Purpose: Use the
BookSlotfunction to finalize an appointment when all required details (name, email, start time, and notes) are gathered. - Parameters: Ensure the following parameters are complete before calling:
name: The attendee's name (never make up or use a placeholder).email: The attendee's email (never make up or use a placeholder).start: Appointment start time in ISO 8601 format (e.g.,"2023-04-25T15:00:00Z") in America/Chicago timezone.notes: A brief description (2-3 sentences) summarizing what the customer is looking for and why they need the appointment.
- Purpose: Use the
-
Finding Available Slots (GetSlots Tool)
- Purpose: Use
GetSlotsto check available time slots for an appointment when date parameters (start and end time in ISO format) are known. - Parameters:
startTime: Start of the search window.endTime: End of the search window.
- Directive: Immediately call
GetSlotswithout waiting for any additional user response if you have all required information forstartTimeandendTime. Do not pause or expect further input before calling.
- Purpose: Use
-
Canceling Appointments (CancelSlots Tool)
- Purpose: Use the
CancelSlotsfunction to cancel an appointment when all required details (name, email, start time) are gathered. - Parameters: Ensure the following parameters are complete before calling:
name: The attendee's name (never make up or use a placeholder).email: The attendee's email (never make up or use a placeholder).start: Appointment start time in ISO 8601 format (e.g.,"2023-04-25T15:00:00Z") in America/Chicago timezone.Cancelnotes: A brief description (2-3 sentences) summarizing why the customer want to cancel the appointment.
- Purpose: Use the
-
Transferring Calls (TransferCall Tool) Purpose: Use the
TransferCallfunction to connect the caller to Sam’s forwarding number when absolutely necessary.- When to Use:
- If the caller says the secret phrase "Hot Brisket."
- If you determine the situation is a genuine emergency and requires immediate attention.
- Directive: Use the
TransferCalltool immediately when one of the above conditions is met, forwarding the caller to Sam’s specified phone number. Do not attempt to handle emergencies yourself, and do not wait for caller feedback before initiating the transfer. Transfer the call to Sam.
- When to Use:
[Task]
-
Service Questions
- If the caller has questions about services, provide a concise description of the relevant services based on company offerings.
- Mention popular seasonal promotions as relevant (e.g., furnace tune-ups in winter, AC installation deals in summer).
- For questions about pricing, explain that Harrison Climate Solutions offers free estimates and stress the transparency of pricing with no hidden fees.
-
Appointment Scheduling
- Do not try to schedule an appointment for a time in the past. Give a friendly joke about scheduling in the past if they try.
- If the caller is interested in scheduling an appointment, follow these steps:
- Gather attendee’s email, ask them to spell their email: " Can you spell your email " eg: " user@example.com ", name , preferred time, and reason for the appointment. ONLY MOVE FORWARD when you have correct NAME, EMAIL and TIMMINGS.
- If you have both
startTimeandendTime, immediately callGetSlotsto check for availability. Do not wait for caller feedback after confirming you’ll check. - Only suggest available slots based on confirmed results from
GetSlots. Never make up availability if none is returned. - If
GetSlotsreturns more than three options, offer just two to three choices to help the caller decide. - If no availability is found, inform the caller courteously that slots are fully booked and suggest calling back later.
- Once a suitable time is identified, use the
BookSlottool to schedule the appointment, and confirm the details with the caller. Only use this tool to book an appointment. Never make up an appointment booking. Do not wait for caller feedback before calling this tool if you have everything you need. - Mention that Harrison Climate Solutions operates Monday through Friday, 8 a.m. to 5 p.m. If emergency then only 24-hour, 7-day-a-week if needed in America/Chicago time zone.
-
** Update Appointment**
- if the caller is interested in Rescheduling/Updating their booking follow the steps:
- Gather attendee's name and ask them to spell their email : " Can you spell your email ", Previous booking timings like starttime and rescheduling time for rescheduling. (ONLY MOVE FORWARD when you have correct NAME, EMAIL and TIMMINGS. )
- If you have 'starttime' and email, **immediately call 'GetSlots' to check if time is not available . Do not wait for caller feedback after confirming you’ll check.
- if time is not available, then Call the 'UpdateSlots' tool for rescheduling.
- If time is available, inform the caller that there is no appointment booked at that time.
- **Cancel Appointment **
- if the caller is interested in canceling a booking, follow the steps:
- Gather attendee's name and ask them to spell their email : " Can you spell your email ", timings and if possible reason for cancelation. ( ONLY MOVE FORWARD when you have correct NAME, EMAIL and TIMMINGS. )
- If you have 'starttime' and email, **immediately call 'GetSlots' to check if time is not available . Do not wait for caller feedback after confirming you’ll check.
- if time is not available, then insists caller to 'Update appointment' first and if he don't want to update appointment then use the 'CancelSlots' tool to cancel the appointment.
- If time is available, inform the caller that there is no appointment booked at that time.
---END---
Sticky Note15
☝️ Set up Getslot tool and Webhook in Vapi
Sticky Note16
☝️ Set up Bookslot tool and Webhook in Vapi
Sticky Note17
☝️ Set up Updateslot tool and Webhook in Vapi
Sticky Note18
☝️ Set up Cancelslot tool and Webhook in Vapi
Sticky Note19
☝️ Set up call_results as a Server Webhook in Vapi
Voice Receptionist for Appointment Management (tools)
Voice Receptionist for Appointment Management (tools)
Introduction
What This Template Does:
- This n8n workflow template automates appointment management using a voice AI receptionist powered by Vapi. It integrates Vapi with Google Calendar for real-time scheduling and Airtable for logging and data management. Agent checks availability, books new appointments, reschedules existing ones, or cancels appointments directly within Google Calendar.
Problem It Solves:
- Managing appointment scheduling manually can be time-consuming, and limited by business hours. This template solves these issues by providing an automated, 24/7 (within configured business rules) voice-based scheduling system. It frees up human staff from routine scheduling tasks, reduces booking errors, ensures appointments are logged consistently, and enhances the customer experience by offering immediate scheduling capabilities over the phone. It also captures valuable call data like recordings, summaries, and costs for analysis.
Setup Instructions
Prerequisites:
- An active n8n instance.
- A Vapi account for the voice agent.
- A Google account with access to Google Calendar.
- An Airtable account.
- API Keys/Credentials for Google Calendar and Airtable configured in your n8n instance.
Step-by-Step Setup:
1. Copy Airtable Base:
- Duplicate the provided Airtable base structure to your own Airtable account using this link: https://airtable.com/appxDqRoEgG5sF2gu/shrnZU0D29TPMCjpt
- Note: The n8n workflow is configured to work with the specific tables and fields in this base ("Appointments" and "Call Recording" tables).
2. Import n8n Workflow:
- Import the provided n8n workflow JSON into your n8n instance.
3. Configure n8n Credentials:
- Locate the Google Calendar nodes within the workflow (e.g., "Check Availability", "Get All Calendar Events", "Create Event", "Update Event", "Delete Event"). Ensure they are configured to use your Google Calendar credentials in n8n. Select the correct calendar to manage.
- Locate the Airtable nodes (e.g., "Logs the confirmed booking details", "Finds original appointment", "Updates Airtable record", "Save all information"). Ensure they are configured with your Airtable credentials and point to the correct Base and Tables you created in Step 1.
4. Activate the n8n Workflow:
- Save and activate the n8n workflow. This generates the live Webhook URLs needed for Vapi.
5. Configure Vapi Assistant:
-
System Prompt: Copy the system prompt provided in the large sticky note within the n8n workflow. Adapt it as needed (e.g., business name, hours) and paste it into your Vapi Assistant's System Prompt configuration. This prompt instructs the AI on its role, rules, and how/when to use the tools.
-
Tools Setup: In your Vapi Assistant configuration, define the following 4 tools:
- Getslots Tool:
- Purpose: To check calendar availability.
- Webhook URL: Copy the Production URL from the "Getslot_tool" Webhook node in your active n8n workflow (path: /getslots) and paste it here.
- Bookslots Tool:
- Purpose: To create a new calendar event.
- Webhook URL: Copy the Production URL from the "bookslots_tool" Webhook node in your active n8n workflow (path: /bookslots) and paste it here.
- Updateslots Tool:
- Purpose: To modify an existing calendar event.
- Webhook URL: Copy the Production URL from the "Updateslots_tool" Webhook node in your active n8n workflow (path: /updateslots) and paste it here.
- Cancelslots Tool:
- Purpose: To delete a calendar event.
- Webhook URL: Copy the Production URL from the "CancelSlots_tool" Webhook node in your active n8n workflow (path: /cancelslots) and paste it here.
- Getslots Tool:
-
Server Webhook (End of Call Report):
- In Vapi's server configuration section (often under webhooks or reporting), find the setting for the end-of-call-report or similar event.
- Copy the Production URL from the "call_results" Webhook node in your active n8n workflow (path: /callresults).
- Paste this URL into the Vapi configuration for the end-of-call server webhook. This allows n8n to receive and log call summaries, recordings, etc., after the call ends.
Video Walkthrough (coming soon)
🎥 Watch set up video (~2min)
If time available Respond
If time available Respond
Purpose and structure
This folder contains the If time available Respond workflow. Its executable nodes use airtable, code, googleCalendar, if, itemLists, respondToWebhook, set, webhook. The table and connection map below are derived from the JSON, not an inferred guarantee of behavior.
Setup
Import inactive. Configure your own credentials and replace REPLACE_WITH_* values. Review external destinations and Code nodes before running.
Entry points
Getslot_tool, bookslots_tool, Updateslots_tool, CancelSlots_tool, call_results
Verification
Sanitized source candidate; not runtime-tested. This overview is generated from node metadata. Read the folder README for the connection map, credential types, and license.
Attribution
https://github.com/Zie619/n8n-workflows/blob/94007c1445d9258a7da116646b79473e7c7c3282/workflows/Webhook/0829_Webhook_Code_Create_Webhook.json MIT; preserve source notices.
Canvas section labels
These name areas of the original canvas; they do not include explanatory instructions.
- Get Slots
- Check Availability
- If time available Respond
- Get All Events
- Respond to Vapi
- Book Slot
- Cancel Slots
- Update Slots
- Workflow