{
  "name": "Automate call scheduling with Voice AI receptionist using Vapi, Google Calendar & Airtable",
  "nodes": [
    {
      "id": "36d0b0d4-b454-4a9b-8168-bcc7942a7cc7",
      "name": "Input Arguments",
      "type": "n8n-nodes-base.set",
      "position": [
        520,
        740
      ]
    },
    {
      "id": "2d8485ad-9007-4664-9182-7eda25fc96ee",
      "name": "Format response",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        2000,
        840
      ]
    },
    {
      "id": "b23c75e0-3697-4137-a595-cf26fedaa898",
      "name": "Sort",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        1760,
        840
      ]
    },
    {
      "id": "660e3d2f-a424-4e76-8c13-5b62b9f22202",
      "name": "Available Start Times & Ranges",
      "type": "n8n-nodes-base.code",
      "position": [
        2240,
        840
      ]
    },
    {
      "id": "f3110658-2f90-4b19-9874-7d6c4e108895",
      "name": "Flatten Slots",
      "type": "n8n-nodes-base.code",
      "position": [
        2460,
        840
      ]
    },
    {
      "id": "5065439e-34e3-4eaf-8226-8ba7393a5cf3",
      "name": "Enrich Date",
      "type": "n8n-nodes-base.code",
      "position": [
        2680,
        840
      ]
    },
    {
      "id": "d8ed3a92-697b-4718-b65f-5276c9a9bfaf",
      "name": "Build Response Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        2900,
        840
      ]
    },
    {
      "id": "a0697944-c5a6-4ca1-9948-8248940841b2",
      "name": "Booking Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        1980,
        1400
      ]
    },
    {
      "id": "4f7b157c-f657-48fa-8bb5-a1e074b042eb",
      "name": "Success Response",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        1400
      ]
    },
    {
      "id": "b7fe16e3-b625-4cb4-b971-9c26698af89b",
      "name": "Add Friendly Error",
      "type": "n8n-nodes-base.code",
      "position": [
        1980,
        1760
      ]
    },
    {
      "id": "b5bff0df-2bef-4c43-9fcf-91cadc68b7ca",
      "name": "Error Response",
      "type": "n8n-nodes-base.set",
      "position": [
        2200,
        1760
      ]
    },
    {
      "id": "fe62c0bc-2d73-4f14-8e76-02847ef4e14a",
      "name": "Escape Json",
      "type": "n8n-nodes-base.code",
      "position": [
        1260,
        1580
      ]
    },
    {
      "id": "17927aa4-8f91-4134-b914-1160a724226f",
      "name": "Has all information",
      "type": "n8n-nodes-base.if",
      "position": [
        940,
        1800
      ]
    },
    {
      "id": "6f0bb9e6-9d82-4cc6-a98f-4d00c47ed910",
      "name": "Respond with Error",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1480,
        1900
      ]
    },
    {
      "id": "fdedba34-a374-405d-a86e-0b0a1759ede9",
      "name": "Build Error Response Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        1260,
        1900
      ]
    },
    {
      "id": "1e111f9d-bb43-4126-b7a2-3353e7c7c72f",
      "name": "Build Error Response Payload2",
      "type": "n8n-nodes-base.set",
      "position": [
        1560,
        2840
      ]
    },
    {
      "id": "d6cbad26-d974-4a11-b0fd-2a35bb555378",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        620
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "# Get Slots"
      }
    },
    {
      "id": "bcccc8cb-2e9d-4f8b-9964-e4d656e794ed",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        740,
        920
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "## Check Availability\n"
      }
    },
    {
      "id": "30b34e37-ee7a-434c-ab4d-445df994459a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1320,
        520
      ],
      "parameters": {
        "width": 310,
        "height": 80,
        "content": "## If time available Respond\n"
      }
    },
    {
      "id": "725a9b59-ea66-4326-a410-93a723157ced",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1280,
        1020
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "## Get All Events\n"
      }
    },
    {
      "id": "1f2bf4a3-8aeb-4a56-8bff-0bb370e12718",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2140,
        1020
      ],
      "parameters": {
        "width": 350,
        "height": 100,
        "content": "## Get Available Slots\n\nFormat the slots and Enrich the date and timings\n"
      }
    },
    {
      "id": "5909d88f-b9c6-4e62-b1e3-bdc1d05ad7aa",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3280,
        1000
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "## Respond to Vapi"
      }
    },
    {
      "id": "f627c5b0-f3b6-4f95-a3a3-2c1b7e2860c7",
      "name": "Sticky Note BookSlot Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        1680
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "# Book Slot"
      }
    },
    {
      "id": "9c3e8b9f-3fe3-4380-8cbc-413146d752b9",
      "name": "Sticky Note BookSlot Check",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        1700
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Checks if required booking info (email, name, etc.) is provided."
      }
    },
    {
      "id": "c723bbd0-5a04-4efb-ba67-59bc722b9d4e",
      "name": "Sticky Note BookSlot Error",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        2060
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "If info missing, sends error back."
      }
    },
    {
      "id": "a843e795-8046-4538-93e0-2de2e688c863",
      "name": "Sticky Note BookSlot GCal",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1660,
        1740
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Books the appointment in Google Calendar."
      }
    },
    {
      "id": "a7627281-15fc-438a-b031-b00cbc4b9fa4",
      "name": "Sticky Note BookSlot Error Handle",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        1920
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Handles potential booking errors (e.g., slot taken)."
      }
    },
    {
      "id": "71c0c722-b5df-47d7-97e6-3d23533a4a4e",
      "name": "Sticky Note BookSlot Response",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2420,
        1740
      ],
      "parameters": {
        "width": 210,
        "height": 80,
        "content": "Sends confirmation/error back to Vapi."
      }
    },
    {
      "id": "4e598ebb-cfdb-432f-a01a-bb76d1d20f24",
      "name": "Sticky Note BookSlot Airtable",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3100,
        1740
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Logs the confirmed booking details to Airtable."
      }
    },
    {
      "id": "cc085c75-d45f-4453-b78b-1b9b480fb02c",
      "name": "Sticky Note CancelSlot Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        3480
      ],
      "parameters": {
        "width": 250,
        "height": 80,
        "content": "# Cancel Slots"
      }
    },
    {
      "id": "9504b7e8-7964-4a0e-bfa4-32540c1fb895",
      "name": "Sticky Note CancelSlot Check",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        3780
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Checks if required info (email, name, start time) is provided."
      }
    },
    {
      "id": "3bb9d976-d922-4016-839c-22e8b1adcf35",
      "name": "Sticky Note CancelSlot Error",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        3940
      ],
      "parameters": {
        "width": 150,
        "height": 80,
        "content": "If info missing, sends error back."
      }
    },
    {
      "id": "87442b3a-b8eb-43e6-b15d-0240a58bff79",
      "name": "Sticky Note CancelSlot Search",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1300,
        3440
      ],
      "parameters": {
        "width": 190,
        "height": 100,
        "content": "Finds the appointment record in Airtable by phone number to get event ID."
      }
    },
    {
      "id": "4e0cec59-1acc-4604-80ce-09479c7a6652",
      "name": "Sticky Note CancelSlot GCal Delete",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1720,
        3720
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Deletes the event from Google Calendar using event ID."
      }
    },
    {
      "id": "68e00556-93d2-45a8-9fee-deb1477ffff2",
      "name": "Sticky Note CancelSlot Airtable Update",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2060,
        3400
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Updates Airtable record status to 'Canceled'."
      }
    },
    {
      "id": "5853b0f6-1e73-435e-aff8-5d9d8de53693",
      "name": "Sticky Note CancelSlot Response",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2380,
        3740
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Sends cancellation confirmation/error back to Vapi."
      }
    },
    {
      "id": "660cdb51-84ac-434e-b7d8-f7b17ef7ef5b",
      "name": "Sticky Note UpdateSlot Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        2600
      ],
      "parameters": {
        "width": 250,
        "height": 80,
        "content": "# Update Slots"
      }
    },
    {
      "id": "030e4bce-4b8b-42b7-8cf4-86b3a88f375b",
      "name": "Sticky Note UpdateSlot Check",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        2900
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Checks if required info (email, name, old/new times) is provided."
      }
    },
    {
      "id": "02e9f8e3-7561-4ace-95a2-2b1807940f1a",
      "name": "Sticky Note UpdateSlot Error",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1500,
        3020
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "If info missing, sends error back."
      }
    },
    {
      "id": "4820cb6c-de15-4e9a-bca7-e3f172af6b80",
      "name": "Sticky Note UpdateSlot Search",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1580,
        2460
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Finds original appointment in Airtable by old phone number"
      }
    },
    {
      "id": "5dd3075e-8e0b-4f76-8d21-39aa66d449da",
      "name": "Sticky Note UpdateSlot GCal Update",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1940,
        2720
      ],
      "parameters": {
        "width": 190,
        "height": 80,
        "content": "Updates the event time in Google Calendar."
      }
    },
    {
      "id": "2e08b4f6-f279-4a9e-9bd3-d6a6283b45f4",
      "name": "Sticky Note UpdateSlot Airtable Update",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2240,
        2320
      ],
      "parameters": {
        "width": 170,
        "height": 100,
        "content": "Updates Airtable record with new times & 'Updated' status."
      }
    },
    {
      "id": "d1369c19-401e-4ce2-a21e-0d5ae01af119",
      "name": "Sticky Note UpdateSlot Response",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2720,
        2460
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Sends rescheduling confirmation/error back to Vapi."
      }
    },
    {
      "id": "ca064fbe-b175-443f-b8e8-70a2a7551ba9",
      "name": "Sticky Note CallResults Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        4160
      ],
      "parameters": {
        "width": 390,
        "height": 120,
        "content": "# Call Result logs\nReceives call summary and recording details post-call."
      }
    },
    {
      "id": "4941246b-82d1-4f16-b7b8-e1fdb6e7c833",
      "name": "Sticky Note CallResults Airtable",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        860,
        4460
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Logs call transcript, recording URL, summary, cost, customer number to Airtable."
      }
    },
    {
      "id": "e5622e9e-9b0a-43b2-ab80-e3e33a4b0409",
      "name": "Getslot_tool",
      "type": "n8n-nodes-base.webhook",
      "position": [
        260,
        740
      ]
    },
    {
      "id": "e15781cf-5405-4f60-aa6d-ba19d1b7dabc",
      "name": "Check Availability",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        800,
        740
      ]
    },
    {
      "id": "1e064283-2964-4eba-a893-e4270157c603",
      "name": "Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1540,
        640
      ]
    },
    {
      "id": "498401cb-00e5-4fdd-b6a9-dd3e91376993",
      "name": "Check if time is available or not",
      "type": "n8n-nodes-base.if",
      "position": [
        1020,
        740
      ]
    },
    {
      "id": "96e43c15-a332-4acf-af04-80dd989d5660",
      "name": "Time available (true) & Call_id",
      "type": "n8n-nodes-base.set",
      "position": [
        1320,
        640
      ]
    },
    {
      "id": "fb7ad8c6-9f78-4518-b955-60f3f7088cb9",
      "name": "Get All Calendar Events",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1320,
        840
      ]
    },
    {
      "id": "390599ee-ddeb-4628-af0b-36fbdd357cee",
      "name": "Extract start, end and name",
      "type": "n8n-nodes-base.set",
      "position": [
        1540,
        840
      ]
    },
    {
      "id": "2c9a73da-37b7-4abd-af5e-695036cd2c2b",
      "name": "Convert into Json format for Vapi",
      "type": "n8n-nodes-base.code",
      "position": [
        3120,
        840
      ]
    },
    {
      "id": "e00cf72a-af6a-441b-9b76-81bd8096d3df",
      "name": "Response to Vapi",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        3360,
        840
      ]
    },
    {
      "id": "facf3bf9-e05e-4953-a221-bf7f566a3b0f",
      "name": "bookslots_tool",
      "type": "n8n-nodes-base.webhook",
      "position": [
        400,
        1800
      ]
    },
    {
      "id": "9266904b-300f-4c83-a518-4cd69b13de41",
      "name": "Input Arguments from booking tools",
      "type": "n8n-nodes-base.set",
      "position": [
        720,
        1800
      ]
    },
    {
      "id": "b4bc5cee-d631-4aa8-a3ff-59a0b647d36a",
      "name": "Convert time to CST America / Chicago",
      "type": "n8n-nodes-base.code",
      "position": [
        1480,
        1580
      ]
    },
    {
      "id": "2c8b2884-14d3-4bd4-92d8-6e402ca3a8de",
      "name": "Create Event",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1700,
        1580
      ]
    },
    {
      "id": "b8890ab2-9850-4608-996d-45c8a6d3a52e",
      "name": "Respond to Vapi",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2480,
        1580
      ]
    },
    {
      "id": "77f75f42-46bb-47f5-8a43-55543ae46f10",
      "name": "If the booking is confirmed then true",
      "type": "n8n-nodes-base.if",
      "position": [
        2700,
        1580
      ]
    },
    {
      "id": "230ddb29-67f0-4486-a6f3-f4dd3dbbee42",
      "name": "Information to be Saved in Airtable",
      "type": "n8n-nodes-base.set",
      "position": [
        2940,
        1560
      ]
    },
    {
      "id": "f6c7774d-a8c7-466a-ba77-401194fe6fb4",
      "name": "Logs the confirmed booking details",
      "type": "n8n-nodes-base.airtable",
      "position": [
        3160,
        1560
      ]
    },
    {
      "id": "154bee14-9281-4b92-8204-57c5436785ba",
      "name": "Updateslots_tool",
      "type": "n8n-nodes-base.webhook",
      "position": [
        460,
        2720
      ]
    },
    {
      "id": "891fb4ec-3a82-4433-bebf-3f0616027e3d",
      "name": "Input Arguments from updateslot tool",
      "type": "n8n-nodes-base.set",
      "position": [
        840,
        2720
      ]
    },
    {
      "id": "617a7742-299a-4c91-be82-cba598d1bb82",
      "name": "Checks if required info is provided.",
      "type": "n8n-nodes-base.if",
      "position": [
        1060,
        2720
      ]
    },
    {
      "id": "dded1cfa-ce89-481f-967b-6843854a32bd",
      "name": "Finds original appointment",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1600,
        2560
      ]
    },
    {
      "id": "a3fd9971-20bb-414a-b06c-1af4da053241",
      "name": "Response with Error",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1780,
        2840
      ]
    },
    {
      "id": "0731f0ae-fbdb-4149-890a-0a44c95b2691",
      "name": "Update Event",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1980,
        2560
      ]
    },
    {
      "id": "1e7af704-6c5d-4e6b-a606-2c5c7ef64b10",
      "name": "Updates Airtable record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2280,
        2440
      ]
    },
    {
      "id": "5a74d949-f08e-422c-afde-e41690a8512b",
      "name": "Response & call_id",
      "type": "n8n-nodes-base.set",
      "position": [
        2620,
        2580
      ]
    },
    {
      "id": "bb7dc099-c4ac-48d4-bf8c-50f4f8858dd4",
      "name": "Respond to Vapi about Updating slots",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2820,
        2580
      ]
    },
    {
      "id": "2154c9c8-acd3-4144-9fa6-f6f7de7bbf48",
      "name": "CancelSlots_tool",
      "type": "n8n-nodes-base.webhook",
      "position": [
        440,
        3620
      ]
    },
    {
      "id": "aeabd266-4b0e-436f-9c8c-607fb7b6734a",
      "name": "Input Arguments from cancelslot tool",
      "type": "n8n-nodes-base.set",
      "position": [
        800,
        3620
      ]
    },
    {
      "id": "b702973e-15f0-4bbe-98ac-d4af7a57cff1",
      "name": "Checks if required info is provided for cancelation",
      "type": "n8n-nodes-base.if",
      "position": [
        1020,
        3620
      ]
    },
    {
      "id": "c5e49060-7b76-4622-bc23-b389f1665215",
      "name": "Finds the appointment record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1300,
        3560
      ]
    },
    {
      "id": "dd83c017-6f5b-49b4-83f9-ec2f33ca5ed0",
      "name": "Build Error Response",
      "type": "n8n-nodes-base.set",
      "position": [
        1300,
        3780
      ]
    },
    {
      "id": "ca74e845-ee23-4f8a-ba8e-789186fe7add",
      "name": "Respond with Error to Vapi",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1500,
        3780
      ]
    },
    {
      "id": "ad3c2ad0-ba5e-48a6-865f-a8da63173562",
      "name": "Delete Event",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1720,
        3560
      ]
    },
    {
      "id": "177a1297-8e96-4d04-a0ff-e16aab71d5b9",
      "name": "Update Airtable record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1940,
        3440
      ]
    },
    {
      "id": "4d0c155c-68ad-4f70-b9c6-0dbd4db70fd1",
      "name": "Call_id & Response",
      "type": "n8n-nodes-base.set",
      "position": [
        2160,
        3580
      ]
    },
    {
      "id": "41ff13bf-0793-4082-8be6-51f0617ab0f8",
      "name": "Respond to Vapi about cancelation",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2400,
        3580
      ]
    },
    {
      "id": "599592b1-214c-4e99-84f6-e244e690ed79",
      "name": "call_results",
      "type": "n8n-nodes-base.webhook",
      "position": [
        440,
        4300
      ]
    },
    {
      "id": "baf3ce79-f302-42ad-bb7e-49f2d9197eae",
      "name": "All Input Arguments",
      "type": "n8n-nodes-base.set",
      "position": [
        720,
        4300
      ]
    },
    {
      "id": "f3394750-7438-47e9-8aa3-996accfa9bac",
      "name": "Save all information",
      "type": "n8n-nodes-base.airtable",
      "position": [
        900,
        4300
      ]
    },
    {
      "id": "5671dcff-8894-42a8-af77-df01d0b6c190",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1800,
        1980
      ],
      "parameters": {
        "width": 1680,
        "height": 2700,
        "content": "# Vapi System Prompt\n\n### First Message: \nHi, this is Ellie with Harrison Climate Solutions how can I help you?\n\n----**END**----\n\n### System Prompt:\n\n[Identity]  \nYou are Ellie, the friendly and knowl"
      }
    },
    {
      "id": "44596616-27ba-47c0-8a6d-cf50f86a136e",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        280,
        900
      ],
      "parameters": {
        "width": 191,
        "height": 80,
        "content": "**☝️ Set up `Getslot` tool and Webhook in Vapi**\n"
      }
    },
    {
      "id": "226635e5-05cf-4da6-bbd5-304e458a7112",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        1960
      ],
      "parameters": {
        "width": 191,
        "height": 80,
        "content": "**☝️ Set up `Bookslot` tool and Webhook in Vapi**\n"
      }
    },
    {
      "id": "dd2caca4-8669-447f-85ee-b0d829e0e8c4",
      "name": "Sticky Note17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        460,
        2880
      ],
      "parameters": {
        "width": 191,
        "height": 80,
        "content": "**☝️ Set up `Updateslot` tool and Webhook in Vapi**\n"
      }
    },
    {
      "id": "be40ca37-c272-4170-a6b1-cf17a28c37ba",
      "name": "Sticky Note18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        3780
      ],
      "parameters": {
        "width": 191,
        "height": 80,
        "content": "**☝️ Set up `Cancelslot` tool and Webhook in Vapi**\n"
      }
    },
    {
      "id": "98af9e21-fb6e-41ef-a15e-f0b914e1dc8d",
      "name": "Sticky Note19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        4440
      ],
      "parameters": {
        "width": 191,
        "height": 80,
        "content": "**☝️ Set up `call_results` as a Server Webhook in Vapi**\n"
      }
    },
    {
      "id": "ab8f9a65-74b1-42ce-ba65-8f0e0e390839",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1800,
        340
      ],
      "parameters": {
        "width": 1460,
        "height": 1540,
        "content": "## Voice Receptionist for Appointment Management (tools)\n\n## Introduction\n### What This Template Does:\n- This n8n workflow template automates appointment management using a voice AI receptionist power"
      }
    },
    {
      "id": "8d984e05-5bca-4c70-beee-16f7cd70594e",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        40,
        300
      ],
      "parameters": {
        "width": 3700,
        "height": 4400,
        "content": "# Workflow"
      }
    }
  ],
  "connections": {
    "Sort": {
      "main": [
        [
          {
            "node": "Format response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrich Date": {
      "main": [
        [
          {
            "node": "Build Response Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Escape Json": {
      "main": [
        [
          {
            "node": "Convert time to CST America / Chicago",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Event": {
      "main": [
        [
          {
            "node": "Booking Payload",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add Friendly Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete Event": {
      "main": [
        [
          {
            "node": "Update Airtable record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Call_id & Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Getslot_tool": {
      "main": [
        [
          {
            "node": "Input Arguments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Event": {
      "main": [
        [
          {
            "node": "Updates Airtable record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Response & call_id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "call_results": {
      "main": [
        [
          {
            "node": "All Input Arguments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Flatten Slots": {
      "main": [
        [
          {
            "node": "Enrich Date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Response": {
      "main": [
        [
          {
            "node": "Respond to Vapi",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bookslots_tool": {
      "main": [
        [
          {
            "node": "Input Arguments from booking tools",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Booking Payload": {
      "main": [
        [
          {
            "node": "Success Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format response": {
      "main": [
        [
          {
            "node": "Available Start Times & Ranges",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input Arguments": {
      "main": [
        [
          {
            "node": "Check Availability",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond to Vapi": {
      "main": [
        [
          {
            "node": "If the booking is confirmed then true",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CancelSlots_tool": {
      "main": [
        [
          {
            "node": "Input Arguments from cancelslot tool",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Success Response": {
      "main": [
        [
          {
            "node": "Respond to Vapi",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Updateslots_tool": {
      "main": [
        [
          {
            "node": "Input Arguments from updateslot tool",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Friendly Error": {
      "main": [
        [
          {
            "node": "Error Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call_id & Response": {
      "main": [
        [
          {
            "node": "Respond to Vapi about cancelation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Availability": {
      "main": [
        [
          {
            "node": "Check if time is available or not",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Response & call_id": {
      "main": [
        [
          {
            "node": "Respond to Vapi about Updating slots",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "All Input Arguments": {
      "main": [
        [
          {
            "node": "Save all information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has all information": {
      "main": [
        [
          {
            "node": "Escape Json",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Error Response Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Error Response": {
      "main": [
        [
          {
            "node": "Respond with Error to Vapi",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Response Payload": {
      "main": [
        [
          {
            "node": "Convert into Json format for Vapi",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Airtable record": {
      "main": [
        [
          {
            "node": "Call_id & Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Calendar Events": {
      "main": [
        [
          {
            "node": "Extract start, end and name",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Updates Airtable record": {
      "main": [
        [
          {
            "node": "Response & call_id",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Finds original appointment": {
      "main": [
        [
          {
            "node": "Update Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract start, end and name": {
      "main": [
        [
          {
            "node": "Sort",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Error Response Payload": {
      "main": [
        [
          {
            "node": "Respond with Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Finds the appointment record": {
      "main": [
        [
          {
            "node": "Delete Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Error Response Payload2": {
      "main": [
        [
          {
            "node": "Response with Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Available Start Times & Ranges": {
      "main": [
        [
          {
            "node": "Flatten Slots",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Time available (true) & Call_id": {
      "main": [
        [
          {
            "node": "Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if time is available or not": {
      "main": [
        [
          {
            "node": "Time available (true) & Call_id",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get All Calendar Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert into Json format for Vapi": {
      "main": [
        [
          {
            "node": "Response to Vapi",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input Arguments from booking tools": {
      "main": [
        [
          {
            "node": "Has all information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Information to be Saved in Airtable": {
      "main": [
        [
          {
            "node": "Logs the confirmed booking details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Checks if required info is provided.": {
      "main": [
        [
          {
            "node": "Finds original appointment",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Error Response Payload2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input Arguments from cancelslot tool": {
      "main": [
        [
          {
            "node": "Checks if required info is provided for cancelation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Input Arguments from updateslot tool": {
      "main": [
        [
          {
            "node": "Checks if required info is provided.",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert time to CST America / Chicago": {
      "main": [
        [
          {
            "node": "Create Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If the booking is confirmed then true": {
      "main": [
        [
          {
            "node": "Information to be Saved in Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Checks if required info is provided for cancelation": {
      "main": [
        [
          {
            "node": "Finds the appointment record",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Build Error Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}