This workflow corresponds to n8n.io template #8326 — 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 →
{
"nodes": [
{
"id": "e38100f0-54dd-4a75-a3bd-3b6295ca96d0",
"name": "Conversation Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
336,
16
],
"parameters": {
"contextWindowLength": 15
},
"typeVersion": 1.3
},
{
"id": "22a387d3-ffdd-4221-b27d-dde8711c1186",
"name": "Check Calendar Availability",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
720,
16
],
"parameters": {
"options": {},
"timeMax": "={{ $fromAI('end_datetime', `End datetime in ISO format with timezone (YYYY-MM-DDTHH:MM:SS+TZ) for availability check`, 'string') }}",
"timeMin": "={{ $fromAI('start_datetime', `Start datetime in ISO format with timezone (YYYY-MM-DDTHH:MM:SS+TZ) for availability check`, 'string') }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "user@example.com"
},
"resource": "calendar"
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "f62ef70f-6295-4a02-8342-83d3a67d5429",
"name": "Book Calendar Appointment",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
592,
16
],
"parameters": {
"end": "={{ $fromAI('end_datetime', `End datetime in ISO format with timezone (YYYY-MM-DDTHH:MM:SS+TZ)`, 'string') }}",
"start": "={{ $fromAI('start_datetime', `Start datetime in ISO format with timezone (YYYY-MM-DDTHH:MM:SS+TZ)`, 'string') }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "user@example.com"
},
"additionalFields": {
"summary": "={{ $fromAI('event_title', `Event title with customer name and service`, 'string') }}",
"description": "={{ $fromAI('event_description', `Detailed event description including: Business name, Service type, Duration, Customer name, Phone, Special notes`, 'string') }}"
},
"useDefaultReminders": false
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "ca5ad6d5-227f-4776-9f37-ed9497d838d9",
"name": "Save Appointment Record",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
464,
16
],
"parameters": {
"columns": {
"value": {
"summary": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('summary', `summary conversation`, 'string') }}",
"event_id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('event_id', ``, 'string') }}",
"services": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('services', ``, 'string') }}",
"patient name ": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('patient_name_', ``, 'string') }}",
"patient number": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('patient_number', ``, 'string') }}"
},
"schema": [
{
"id": "patient number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "patient number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "patient name ",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "patient name ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "event_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "event_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "summary",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "services",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "services",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1454968607,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_YOUR_AWS_SECRET_KEY_HERE#gid=1454968607",
"cachedResultName": "Sheet2"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_YOUR_AWS_SECRET_KEY_HERE?usp=drivesdk",
"cachedResultName": "Bussiness details"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "c519dbd4-c95e-4c12-bd46-ccb76d4301ca",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"disabled": true,
"position": [
848,
16
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"ai_reply\": \"I'd be happy to help you! What service are you interested in booking today?\"\n}"
},
"typeVersion": 1.3
},
{
"id": "ba1c4cff-5e5e-487a-952e-60c886cd0fb8",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-544,
-208
],
"parameters": {
"options": {}
},
"typeVersion": 1.3
},
{
"id": "02fce16f-b548-4db3-a5c4-e6b06c4d0f55",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
208,
16
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "52494195-7502-473f-a254-afb53bf89a74",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
928,
224
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "44f4d1d4-6d39-45ad-ad78-a9febf0e52e2",
"name": "Get business details",
"type": "n8n-nodes-base.googleSheets",
"position": [
-176,
-208
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_YOUR_AWS_SECRET_KEY_HERE#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_YOUR_AWS_SECRET_KEY_HERE?usp=drivesdk",
"cachedResultName": "Bussiness details"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "f0752315-6a90-48df-a8fe-9dda53d2c58d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
-336
],
"parameters": {
"color": 3,
"width": 416,
"height": 272,
"content": "## Get Business Details\nPulls service list, hours, policies, and AI personality from Google Sheets. \nProvides the AI with the business-specific context. "
},
"typeVersion": 1
},
{
"id": "b4ebcd48-a651-4bad-b7c3-dd6939bea1ed",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-320
],
"parameters": {
"color": 4,
"width": 976,
"height": 528,
"content": "## AI Receptionist Agent \nHandles customer chat with GPT + business context, \nanswers questions, books appointments via Google Calendar, \nand saves appointment records into Google Sheets. \n"
},
"typeVersion": 1
},
{
"id": "4c6250f1-093a-49c1-a496-b8b883ca4787",
"name": "AI Receptionist",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
464,
-208
],
"parameters": {
"text": "={{ $('When chat message received').item.json.chatInput }}",
"options": {
"systemMessage": "=# {{ $json['ai_name '] }} - {{ $json.business_name }} Virtual Receptionist\n\nYou are {{ $json['ai_name '] }}, the {{ $json.ai_personality }} virtual receptionist at **{{ $json.business_name }}**. Your role is to {{ $json.ai_role }}\n\n## BUSINESS ESSENTIALS\n\n**Type**: {{ $json[' business_type'] }}\n**Location**: {{ $json[' location'] }}\n**Hours**: {{ $json[' working_hours '] }}\n**Currency**: {{ $json.currency }}\n\n### Services & Pricing\n{{ $json.services }}\n\n## COMMUNICATION STYLE\n- **Tone**: {{ $json.ai_personality }}\n- **Length**: 2-3 sentences per response\n- **Approach**: Natural conversation, not robotic\n- **Use names**: Once provided, use customer's name\n\n## BOOKING WORKFLOW\n1. **Understand need**: Service type, timing preference\n2. **Check availability**: Use checkAvailability tool with business calendar\n3. **Gather details**: Name, phone number, email (optional)\n4. **Confirm booking**: Use bookAppointment tool\n5. **Save data**: Use captureCustomerData and saveAppointment tools\ntime now: {{ $now }}\n\n## KEY GUIDELINES\n\n### \u2705 DO\n- Welcome warmly: \"Hello! I'm {{ $json['ai_name '] }} from {{ $json.business_name }}\"\n- Offer alternatives if requested time unavailable\n- Prioritize emergencies if emergency services available\n- Explain pricing clearly when asked\n- Use all available tools for complete booking process\n\n### \u274c DON'T\n- Give medical/professional advice outside your scope\n- Book outside business hours\n- Repeat questions already answered\n- Ask for unnecessary personal information\n- Provide vague responses about availability\n\n## EMERGENCY PROTOCOL\n{% if $('Select Business Context').item.json.emergency_available %}\nEmergencies are available. Prioritize urgent requests and offer same-day slots when possible.\n{% endif %}\n\n## BUSINESS CONTEXT\n\n- Timezone: {{ $json['timezone '] }}\n- Advance booking limit:{{ $json[' booking_advance_days '] }} days\n- Cancellation policy: {{ $json['cancellation_hours '] }} hours notice\n\n---\nProvide responses in this JSON format:\n{\n \"ai_reply\": \"Your helpful and personalized response here\"\n}\n\n**Remember**: You're representing {{ $json.business_name }}. Be helpful, accurate, and maintain the professional standard they expect."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Receptionist",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Conversation Memory": {
"ai_memory": [
[
{
"node": "AI Receptionist",
"type": "ai_memory",
"index": 0
}
]
]
},
"Get business details": {
"main": [
[
{
"node": "AI Receptionist",
"type": "main",
"index": 0
}
]
]
},
"Save Appointment Record": {
"ai_tool": [
[
{
"node": "AI Receptionist",
"type": "ai_tool",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Receptionist",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Book Calendar Appointment": {
"ai_tool": [
[
{
"node": "AI Receptionist",
"type": "ai_tool",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Get business details",
"type": "main",
"index": 0
}
]
]
},
"Check Calendar Availability": {
"ai_tool": [
[
{
"node": "AI Receptionist",
"type": "ai_tool",
"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.
googleCalendarOAuth2ApigoogleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
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 availability in Google Calendar, book appointments, and save customer details in…
Source: https://n8n.io/workflows/8326/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Think Tool. Uses stickyNote, agent, googleCalendarTool, memoryBufferWindow. Chat trigger; 28 nodes.
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
Are you tired of manually sifting through hundreds of LinkedIn profiles to find the right talent? Say goodbye to inefficient recruiting processes and embrace the power of AI-driven candidate selection
This workflow creates a fully interactive AI-powered Sales CRM Chatbot inside n8n, capable of understanding user queries, searching Google Sheets for CRM data, and responding intelligently based on re
Generate high-quality, SEO-optimized content briefs automatically using AI, real-time keyword research, SERP intelligence, and historical content context. This workflow standardizes user inputs, fetch