Créer un assistant virtuel piloté par l'IA avec Google Agenda et Google Sheets

Intermédiaire

Ceci est unMiscellaneous, AI Chatbot, Multimodal AIworkflow d'automatisation du domainecontenant 12 nœuds.Utilise principalement des nœuds comme GoogleSheets, Agent, GoogleSheetsTool, GoogleCalendarTool, ChatTrigger. Créer un réceptionniste virtuel alimenté par l'IA avec Google Agenda et Sheets

Prérequis
  • Informations d'identification Google Sheets API
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "a2decaa80798f56a13dbca1aa742181dfea463e822cc650b5a716ef8b115667a"
  },
  "nodes": [
    {
      "id": "e38100f0-54dd-4a75-a3bd-3b6295ca96d0",
      "name": "Mémoire de conversation",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        336,
        16
      ],
      "parameters": {
        "contextWindowLength": 15
      },
      "typeVersion": 1.3
    },
    {
      "id": "22a387d3-ffdd-4221-b27d-dde8711c1186",
      "name": "Vérifier la disponibilité du calendrier",
      "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": "ris362720@gmail.com",
          "cachedResultName": "ris362720@gmail.com"
        },
        "resource": "calendar"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "ZKFdGvnaSxLoLCiO",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f62ef70f-6295-4a02-8342-83d3a67d5429",
      "name": "Réserver un rendez-vous dans le calendrier",
      "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": "ris362720@gmail.com",
          "cachedResultName": "ris362720@gmail.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": {
          "id": "ZKFdGvnaSxLoLCiO",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "ca5ad6d5-227f-4776-9f37-ed9497d838d9",
      "name": "Enregistrer le rendez-vous",
      "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_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8/edit#gid=1454968607",
          "cachedResultName": "Sheet2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8/edit?usp=drivesdk",
          "cachedResultName": "Bussiness  details"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "fGbQfgGA6gTKu9Jd",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "c519dbd4-c95e-4c12-bd46-ccb76d4301ca",
      "name": "Analyseur de sortie structurée",
      "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": "À la réception d'un message chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -544,
        -208
      ],
      "webhookId": "73eb01dc-fa71-4f00-b3e8-17e716ef86f6",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "02fce16f-b548-4db3-a5c4-e6b06c4d0f55",
      "name": "Modèle de chat OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        208,
        16
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "TEPbLQLrisXKXcU1",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "52494195-7502-473f-a254-afb53bf89a74",
      "name": "Modèle de chat OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        928,
        224
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "TEPbLQLrisXKXcU1",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "44f4d1d4-6d39-45ad-ad78-a9febf0e52e2",
      "name": "Obtenir les détails de l'entreprise",
      "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_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1sEfkvCT_4GGlleZKcQfWy1Z8V2FEg2BH2eY0LDzrnt8/edit?usp=drivesdk",
          "cachedResultName": "Bussiness  details"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "fGbQfgGA6gTKu9Jd",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "f0752315-6a90-48df-a8fe-9dda53d2c58d",
      "name": "Note adhésive1",
      "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": "Note adhésive",
      "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": "Réceptionniste IA",
      "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### ✅ 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### ❌ 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
    }
  ],
  "pinData": {},
  "connections": {
    "02fce16f-b548-4db3-a5c4-e6b06c4d0f55": {
      "ai_languageModel": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "52494195-7502-473f-a254-afb53bf89a74": {
      "ai_languageModel": [
        [
          {
            "node": "c519dbd4-c95e-4c12-bd46-ccb76d4301ca",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "e38100f0-54dd-4a75-a3bd-3b6295ca96d0": {
      "ai_memory": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "44f4d1d4-6d39-45ad-ad78-a9febf0e52e2": {
      "main": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ca5ad6d5-227f-4776-9f37-ed9497d838d9": {
      "ai_tool": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "c519dbd4-c95e-4c12-bd46-ccb76d4301ca": {
      "ai_outputParser": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "f62ef70f-6295-4a02-8342-83d3a67d5429": {
      "ai_tool": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "ba1c4cff-5e5e-487a-952e-60c886cd0fb8": {
      "main": [
        [
          {
            "node": "44f4d1d4-6d39-45ad-ad78-a9febf0e52e2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "22a387d3-ffdd-4221-b27d-dde8711c1186": {
      "ai_tool": [
        [
          {
            "node": "4c6250f1-093a-49c1-a496-b8b883ca4787",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Divers, Chatbot IA, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds12
Catégorie3
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34