← All N8N workflows
Data & databasesAirtableCodeGoogle CalendarIfItem Lists

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.

Workflow preview
TransformInput ArgumentsEdit FieldsTransformFormat responseItem ListsTransformSortItem ListsCodeAvailable Start Times &RangesCodeCodeFlatten SlotsCodeCodeEnrich DateCodeTransformBuild Response PayloadEdit FieldsTransformBooking PayloadEdit FieldsTransformSuccess ResponseEdit FieldsCodeAdd Friendly ErrorCodeTransformError ResponseEdit FieldsCodeEscape JsonCodeRoutingHas all informationIfWeb / APIRespond with ErrorRespond To WebhookTransformBuild Error ResponsePayloadEdit FieldsTransformBuild Error ResponsePayload2Edit FieldsTriggerGetslot_toolWebhookIntegrationCheck AvailabilityGoogle CalendarWeb / APIResponseRespond To WebhookRoutingCheck if time isavailable or notIfTransformTime available (true) &Call_idEdit FieldsIntegrationGet All Calendar EventsGoogle CalendarTransformExtract start, end andnameEdit FieldsCodeConvert into Jsonformat for VapiCodeWeb / APIResponse to VapiRespond To WebhookTriggerbookslots_toolWebhookTransformInput Arguments frombooking toolsEdit FieldsCodeConvert time to CSTAmerica / ChicagoCodeIntegrationCreate EventGoogle CalendarWeb / APIRespond to VapiRespond To WebhookRoutingIf the booking isconfirmed then trueIfTransformInformation to be Savedin AirtableEdit FieldsData storeLogs the confirmedbooking detailsAirtableTriggerUpdateslots_toolWebhookTransformInput Arguments fromupdateslot toolEdit FieldsRoutingChecks if required infois provided.IfData storeFinds originalappointmentAirtableWeb / APIResponse with ErrorRespond To WebhookIntegrationUpdate EventGoogle CalendarData storeUpdates Airtable recordAirtableTransformResponse & call_idEdit FieldsWeb / APIRespond to Vapi aboutUpdating slotsRespond To WebhookTriggerCancelSlots_toolWebhookTransformInput Arguments fromcancelslot toolEdit FieldsRoutingChecks if required infois provided for…IfData storeFinds the appointmentrecordAirtableTransformBuild Error ResponseEdit FieldsWeb / APIRespond with Error toVapiRespond To WebhookIntegrationDelete EventGoogle CalendarData storeUpdate Airtable recordAirtableTransformCall_id & ResponseEdit FieldsWeb / APIRespond to Vapi aboutcancelationRespond To WebhookTriggercall_resultsWebhookTransformAll Input ArgumentsEdit FieldsData storeSave all informationAirtable

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.

Workflow node names, types, and operations
NodeCategoryTypeOperation
Input ArgumentsTransformEdit FieldsSee node parameters
Format responseTransformItem ListsconcatenateItems
SortTransformItem Listssort
Available Start Times & RangesCodeCodeSee node parameters
Flatten SlotsCodeCodeSee node parameters
Enrich DateCodeCodeSee node parameters
Build Response PayloadTransformEdit FieldsSee node parameters
Booking PayloadTransformEdit FieldsSee node parameters
Success ResponseTransformEdit FieldsSee node parameters
Add Friendly ErrorCodeCodeSee node parameters
Error ResponseTransformEdit FieldsSee node parameters
Escape JsonCodeCodeSee node parameters
Has all informationRoutingIfSee node parameters
Respond with ErrorWeb / APIRespond To WebhookSee node parameters
Build Error Response PayloadTransformEdit FieldsSee node parameters
Build Error Response Payload2TransformEdit FieldsSee node parameters
Getslot_toolTriggerWebhookSee node parameters
Check AvailabilityIntegrationGoogle Calendarcalendar
ResponseWeb / APIRespond To WebhookSee node parameters
Check if time is available or notRoutingIfSee node parameters
Time available (true) & Call_idTransformEdit FieldsSee node parameters
Get All Calendar EventsIntegrationGoogle CalendargetAll
Extract start, end and nameTransformEdit FieldsSee node parameters
Convert into Json format for VapiCodeCodeSee node parameters
Response to VapiWeb / APIRespond To WebhookSee node parameters
bookslots_toolTriggerWebhookSee node parameters
Input Arguments from booking toolsTransformEdit FieldsSee node parameters
Convert time to CST America / ChicagoCodeCodeSee node parameters
Create EventIntegrationGoogle CalendarSee node parameters
Respond to VapiWeb / APIRespond To WebhookSee node parameters
If the booking is confirmed then trueRoutingIfSee node parameters
Information to be Saved in AirtableTransformEdit FieldsSee node parameters
Logs the confirmed booking detailsData storeAirtablecreate
Updateslots_toolTriggerWebhookSee node parameters
Input Arguments from updateslot toolTransformEdit FieldsSee node parameters
Checks if required info is provided.RoutingIfSee node parameters
Finds original appointmentData storeAirtablesearch
Response with ErrorWeb / APIRespond To WebhookSee node parameters
Update EventIntegrationGoogle Calendarupdate
Updates Airtable recordData storeAirtableupdate
Response & call_idTransformEdit FieldsSee node parameters
Respond to Vapi about Updating slotsWeb / APIRespond To WebhookSee node parameters
CancelSlots_toolTriggerWebhookSee node parameters
Input Arguments from cancelslot toolTransformEdit FieldsSee node parameters
Checks if required info is provided for cancelationRoutingIfSee node parameters
Finds the appointment recordData storeAirtablesearch
Build Error ResponseTransformEdit FieldsSee node parameters
Respond with Error to VapiWeb / APIRespond To WebhookSee node parameters
Delete EventIntegrationGoogle Calendardelete
Update Airtable recordData storeAirtableupdate
Call_id & ResponseTransformEdit FieldsSee node parameters
Respond to Vapi about cancelationWeb / APIRespond To WebhookSee node parameters
call_resultsTriggerWebhookSee node parameters
All Input ArgumentsTransformEdit FieldsSee node parameters
Save all informationData storeAirtableupsert

Setup

  1. Download the JSON and import it into an isolated n8n instance. Leave the workflow inactive.
  2. Connect your own credentials through n8n’s credential store. Replace REPLACE_WITH_* values with your resource identifiers.
  3. Inspect API destinations, Code nodes, database queries, file paths, and outbound actions.
  4. 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]

  1. Booking Appointments (BookSlot Tool)

    • Purpose: Use the BookSlot function 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.
  2. Finding Available Slots (GetSlots Tool)

    • Purpose: Use GetSlots to 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 GetSlots without waiting for any additional user response if you have all required information for startTime and endTime. Do not pause or expect further input before calling.
  3. Canceling Appointments (CancelSlots Tool)

    • Purpose: Use the CancelSlots function 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.
  4. Transferring Calls (TransferCall Tool) Purpose: Use the TransferCall function 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 TransferCall tool 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.

[Task]

  1. 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.
  2. 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:
      1. 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.
      2. If you have both startTime and endTime, immediately call GetSlots to check for availability. Do not wait for caller feedback after confirming you’ll check.
      3. Only suggest available slots based on confirmed results from GetSlots. Never make up availability if none is returned.
      4. If GetSlots returns more than three options, offer just two to three choices to help the caller decide.
      5. 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 BookSlot tool 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.
  3. ** Update Appointment**

  • if the caller is interested in Rescheduling/Updating their booking follow the steps:
    1. 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. )
    2. 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.
    3. if time is not available, then Call the 'UpdateSlots' tool for rescheduling.
    4. If time is available, inform the caller that there is no appointment booked at that time.
  1. **Cancel Appointment **
  • if the caller is interested in canceling a booking, follow the steps:
    1. 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. )
    2. 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.
    3. 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.
    4. 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.
  • 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

More in Data & databases