AutomationFlowsAI & RAG › Chatbot Appointment Scheduler with Google Calendar

Chatbot Appointment Scheduler with Google Calendar

Original n8n title: Chatbot Appointment Scheduler with Google Calendar for Dental Assistant

ByZakaria Ben @nocodeinnovate on n8n.io

This workflow template is designed for dental assistants and anyone looking to automate appointment scheduling. It integrates Google Calendar for booking appointments and Google Sheets as a database to store patient information.

Chat trigger trigger★★★☆☆ complexityAI-powered12 nodesChat TriggerAgentOpenAI ChatMemory Buffer WindowGoogle Calendar ToolGoogle Sheets Tool
AI & RAG Trigger: Chat trigger Nodes: 12 Complexity: ★★★☆☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #3131 — we link there as the canonical source.

This workflow follows the Agent → Chat Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "my335cY3wVwMqvqy",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Reservation Medcin",
  "tags": [],
  "nodes": [
    {
      "id": "32fe7a8b-aa1a-4517-a167-41972f77d69b",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -360,
        -40
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "3510bb5a-3c8b-4978-a6c5-5c077be74f3f",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -20,
        -60
      ],
      "parameters": {
        "options": {
          "systemMessage": "=\ud83c\udfaf Role of the Assistant\nYou are a virtual assistant specializing in appointment management for Dr. Hakim. Your goal is to schedule consultations accurately, ensuring real availability while providing a smooth experience for patients.\n\n\ud83d\udd52 Office Hours\nMonday - Friday: 9:00 AM - 8:00 PM\nSaturday: 9:00 AM - 1:00 PM\nSunday: \u274c Closed\nConsultation Duration: 1 hour\nBreak Between Patients: 15 minutes\n\n\ud83d\udcc5 Booking Process\n\n1\ufe0f\u20e3 Request Patient Information (Mandatory):\nFull Name\nPhone Number\nDesired Date and Time\n2\ufe0f\u20e3 Availability Check:\nIf the requested time is outside office hours \u2192 offer only available slots.\nIf the requested time is available, ask for confirmation and book it.\nIf the requested time is unavailable, apologize and suggest the actual available slots on the requested day (between 9:00 AM and 8:00 PM, respecting breaks).\n\n##Example:\nIf a patient requests an appointment at 10:00 AM, check Google Calendar to confirm availability between 9:00 AM and 8:00 PM, considering the consultation duration (1 hour) and the 15-minute breaks.\n\n\ud83d\udea8 Do not confirm the appointment immediately\u2014you must receive the patient's confirmation first.\n\n3\ufe0f\u20e3 Confirmation & Updates:\nConfirm availability with the patient before finalizing.\nUpdate Google Calendar & Google Sheets after every booking.\nGoogle Calendar Event Title: \"Patient Name - Phone Number\".\nFor modifications or cancellations, free the slot and update the schedule.\n\n##Tools:\nUse \"Cheek Avilability\" to check available slots.\nUse \"Creat event\" to book the appointment.\nUse \"Add Data\" to record patient information.\n\n\ud83d\udcac Communication\n\u2705 Respond clearly, professionally, and in a friendly manner.\n\u2705 Always confirm the final date and time with the patient.\n\u2705 Ensure Google Calendar and Google Sheets are updated after every booking.\n\n\ud83d\udcc5 Today's date: {{ $now }}."
        }
      },
      "typeVersion": 1.7
    },
    {
      "id": "fea932f2-c99e-4e1a-83bc-b06abf6cce41",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -80,
        160
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "05bfbeb4-d2a4-4372-b763-6da636ed4393",
      "name": "Window Buffer Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        60,
        160
      ],
      "parameters": {
        "sessionKey": "={{ $('When chat message received').item.json.sessionId }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "86899211-daf8-4fc6-a61a-98504b239d83",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        20,
        -220
      ],
      "parameters": {
        "color": 7,
        "width": 194,
        "height": 141,
        "content": "**AI Agent \ud83d\udc47**\nThe Prompt is already there, You just need to setup the prompt user message with your text message."
      },
      "typeVersion": 1
    },
    {
      "id": "947c5aa3-549e-49f1-b136-030cbd3ca6ff",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -120,
        300
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "height": 80,
        "content": "**Chat Model \u261d\ufe0f**\nAdd your Open Ai API Key "
      },
      "typeVersion": 1
    },
    {
      "id": "cac840df-644e-4092-b678-af2fdf3fc378",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        300
      ],
      "parameters": {
        "color": 7,
        "width": 190,
        "height": 80,
        "content": "**Gpoogle Calendar \u261d\ufe0f**\nConnect to Google Calendar"
      },
      "typeVersion": 1
    },
    {
      "id": "f474ee97-ba38-4100-bfc7-0d01d0a4c599",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        500,
        300
      ],
      "parameters": {
        "color": 7,
        "width": 190,
        "height": 80,
        "content": "**Google Sheets \u261d\ufe0f**\nConnect to Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "51fcd961-7b0b-4435-a315-17d4ddc1ed30",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        40,
        300
      ],
      "parameters": {
        "color": 7,
        "width": 150,
        "height": 80,
        "content": "**Memory \u261d\ufe0f**\nAdd the Session ID "
      },
      "typeVersion": 1
    },
    {
      "id": "398fdf7a-508d-4a0a-8c2c-1f0075b6ad56",
      "name": "Check Availability",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        200,
        160
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End_Time', ``, 'string') }}",
        "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start_Time', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "Prise de rendez vous pour les Medcins "
        },
        "resource": "calendar"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "43673597-ffb6-4d38-8fb0-975eb47976f6",
      "name": "Creat event",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        360,
        160
      ],
      "parameters": {
        "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}",
        "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "Prise de rendez vous pour les Medcins "
        },
        "additionalFields": {}
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "650b5d36-7b52-4bb2-953a-d9ee278a35eb",
      "name": "Add data",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        500,
        160
      ],
      "parameters": {
        "columns": {
          "value": {
            "Nom complet": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Nom_complet', ``, 'string') }}",
            "Date / heure ": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Date___heure_', ``, 'string') }}",
            "Num\u00e9ro de telephone": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Num_ro_de_telephone', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "Nom complet",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Nom complet",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Num\u00e9ro de telephone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Num\u00e9ro de telephone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date / heure ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date / heure ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confirm\u00e9",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Confirm\u00e9",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JAbg-TJZr7fqiRMAjQY6baDAkQoigzUd4YqbTPoQqWE/edit#gid=0",
          "cachedResultName": "Feuille 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JAbg-TJZr7fqiRMAjQY6baDAkQoigzUd4YqbTPoQqWE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JAbg-TJZr7fqiRMAjQY6baDAkQoigzUd4YqbTPoQqWE/edit?usp=drivesdk",
          "cachedResultName": "RDV Medcin"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "39048f71-6a4c-4181-947e-5e2545c4dc1e",
  "connections": {
    "AI Agent": {
      "main": [
        []
      ]
    },
    "Add data": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Creat event": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Availability": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Window Buffer Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow template is designed for dental assistants and anyone looking to automate appointment scheduling. It integrates Google Calendar for booking appointments and Google Sheets as a database to store patient information.

Source: https://n8n.io/workflows/3131/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Think Tool. Uses stickyNote, agent, googleCalendarTool, memoryBufferWindow. Chat trigger; 28 nodes.

Agent, Google Calendar Tool, Memory Buffer Window +8
AI & RAG

Overview Meet Maria, a sophisticated AI Booking Agent designed for Veterinary Clinics (but easily adaptable to any service business). This workflow transforms a simple chat interface into a full-scale

Chat Trigger, Google Calendar Tool, Memory Buffer Window +7
AI & RAG

This workflow is designed for beginners and professionals who want to build their first AI-powered assistant with n8n. It’s perfect for anyone managing online trainings, consultations, or services tha

Chat Trigger, Tool Think, OpenAI Chat +5
AI & RAG

Reservation Medcin. Uses chatTrigger, agent, lmChatOpenAi, memoryBufferWindow. Chat trigger; 12 nodes.

Chat Trigger, Agent, OpenAI Chat +3
AI & RAG

Automate customer conversations with an AI-powered virtual receptionist. This workflow can chat naturally with clients, answer general business questions (like services, location, and hours), check av

Memory Buffer Window, Google Calendar Tool, Google Sheets Tool +5