Créez un bot de réservation WhatsApp automatisé avec Google Calendar, Sheets & OpenAI
Transformez votre entreprise de services avec un agenda intelligent qui fonctionne via WhatsApp. Ce tutoriel complet vous montre comment créer un système de réservation entièrement automatisé en utilisant l'automatisation des workflows n8n, supprimant la planification manuelle tout en offrant une expérience client fluide.
Parfait pour les prestataires de santé, les consultants, les salons de beauté et toute entreprise basée sur des rendez‑vous souhaitant optimiser leur processus de réservation sans complexité technique.
Téléchargez le workflow JSON et utilisez‑le !
🔧 Outils nécessaires
- Wassenger: Pour recevoir et envoyer des messages WhatsApp
- Google Calendar: Pour gérer et vérifier les disponibilités
- Google Sheets: Pour stocker les données clients et les détails des rendez‑vous
- Gmail: Pour l'envoi des e‑mails de confirmation
- OpenAI (ChatGPT): Pour la conversation et la transcription voix → texte
Vue d'ensemble de l'architecture du système
Le flux de réservation automatisé fonctionne selon les étapes séquentielles suivantes :
- Réception du message : les messages WhatsApp déclenchent le workflow
- Analyse du contenu : le système identifie les messages textuels ou vocaux
- Traitement vocal : les messages audio sont transcrits automatiquement
- Conversation IA : l'assistant intelligent gère l'interaction client
- Collecte des données : les informations client sont stockées dans Google Sheets
- Vérification des disponibilités : consultation en temps réel du calendrier pour les créneaux libres
- Confirmation de la réservation : création d'un événement calendrier et envoi d'un e‑mail de notification
Commencez à transformer la gestion des rendez‑vous de votre entreprise avec WhatsApp et l'IA, sans codage requis.
✅ Enregistrez votre numéro WhatsApp sur Wassenger
✅ Téléchargez le workflow JSON complet à importer dans votre instance n8n
✅ Commencez à prendre des rendez‑vous automatiquement en quelques minutes
Parcours d'implémentation
Étape 1 : Gestion des messages WhatsApp
Configurez le nœud trigger Wassenger pour surveiller les messages entrants de votre compte WhatsApp Business. Cette intégration capture à la fois les communications textuelles et les enregistrements vocaux de manière transparente.
Étape 2 : Détection du format du message
Mettez en place un nœud switch qui détermine le type de message :
- Messages texte : traités directement par l'agent IA
- Messages vocaux : téléchargement du fichier audio et envoi à OpenAI Whisper pour transcription
Étape 3 : Intégration de l'IA conversationnelle
Déployez un agent LangChain qui :
- Analyse l'intention du client dès le premier contact
- Fournit des réponses naturelles et contextuelles
- Guide les utilisateurs tout au long du processus de réservation
- Recueille systématiquement les informations essentielles
L'assistant IA collecte les informations du client dans l'ordre suivant :
- Adresse e‑mail (sert d'identifiant unique du client)
- Nom complet
- Vérification du numéro de téléphone
- Objet du rendez‑vous ou sujets à aborder
Commencez à transformer la gestion des rendez‑vous de votre entreprise avec WhatsApp et l'IA, sans codage requis.
✅ Enregistrez votre numéro WhatsApp sur Wassenger
✅ Téléchargez le workflow JSON complet à importer dans votre instance n8n
✅ Commencez à prendre des rendez‑vous automatiquement en quelques minutes
Étape 4 : Gestion des données dans Google Sheets
Configurez la gestion automatique des données :
- Nouveaux clients : création d'entrées dans la feuille de calcul
- Clients existants : mise à jour des enregistrements existants en fonction de la correspondance par e‑mail
- Mises à jour en temps réel : les informations sont enregistrées après chaque interaction
Étape 5 : Système de planification intelligent
L'intégration calendrier propose des créneaux disponibles en se basant sur :
Heures d'ouverture :
- Du lundi au vendredi
- Matin : 09:00 — 12:00
- Après‑midi : 13:00 — 17:00
- Pause déjeuner exclue automatiquement (12:00 — 13:00)
Here are the next available appointments:
- Thursday at 10:00 AM
- Friday at 11:30 AM
...
Filtrage intelligent :
- Uniquement des rendez‑vous futurs (réservation au moins 24 heures à l'avance)
- Durée des rendez‑vous bloquée à 30 minutes
- Vérification d'absence de conflit dans la planification
- Prise en compte du fuseau horaire du client
Commencez à transformer la gestion des rendez‑vous de votre entreprise avec WhatsApp et l'IA, sans codage requis.
✅ Enregistrez votre numéro WhatsApp sur Wassenger
✅ Téléchargez le workflow JSON complet à importer dans votre instance n8n
✅ Commencez à prendre des rendez‑vous automatiquement en quelques minutes
Étape 6 : Finalisation du rendez‑vous
Une fois que les clients sélectionnent leur horaire préféré :
- Création de l'événement dans Google Calendar
- Complétion de l'enregistrement dans la feuille de calcul avec les détails confirmés
- Envoi d'un e‑mail de confirmation professionnel
- Tous les horodatages sont stockés dans le fuseau horaire système pour garantir la cohérence
Configuration du workflow JSON
Copiez et enregistrez ce code au format JSON puis importez‑le dans votre instance n8n
{
"name": "WhatsApp Appointment Setter",
"nodes": [
{
"parameters": {
"events": [
"message:in:new"
]
},
"type": "n8n-nodes-wassenger.wassengerTrigger",
"typeVersion": 1,
"position": [
1080,
700
],
"id": "2c24ff1f-8b4d-4341-b2c7-c81ba4c2208c",
"name": "Wassenger Trigger",
"webhookId": "83130e74-a519-4153-b901-f03769d2f04f",
"credentials": {
"wassengerApiKey": {
"id": "9du3UAbFSzEaTSQE",
"name": "WhatsApp API key"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.data.body }}",
"options": {
"systemMessage": "=You are a helpful assistant for a dental clinic based in London.\n\n# You have access to these tools:\n\n1.A Google Calendar Tool that allows you to create, reschedule, and delete events in the calendar.\n\n2.Google Sheets Tools:\n\n- Google Sheet - Add Row: Adds a new row to a Google Sheet.\n\n- Google Sheet - Update Row: Updates a row in the Google Sheet.\n\n- Google Sheet - Read: Reads content from the Google Sheet.\n\n3.Gmail - Send Confirmation User: Sends a confirmation email to the user after the appointment is confirmed.\n\nThe current time and date is in the German Time Zone:\n{{ $now }}\n\n# Your Task: \n\n1.When the conversation starts:\n\nAnalyze the first message sent by the user.\n\nRespond naturally based on its intent, tone, or content(for example: greeting, question, or request).\n\nKeep your reply short, polite, and friendly.\n\nThen, follow up with:\n\"Would you like to book an appointment?\"\n\nExamples:\n\nIf the user says: "Hi, how are you?"\n→ Respond: "I'm doing great, thanks for asking! Would you like to book an appointment?"\n\nIf the user says: "I need help with pricing"\n→ Respond: "Happy to help! Would you like to book an appointment so we can discuss it?"\n\nIf the user responds with yes, begin collecting their contact information.\n\nYou must collect the information in the following strict order:\n\n- First: Email address\n > This is used as the unique identifier for matching rows in the Google Sheet.\n > After receiving the email: Use \"Google Sheet - Read\" to check if the email exists.\n\nIf it exists, use Google Sheet - Update Row to update that row.\n\nIf it does not exist, use Google Sheet - Add Row to create a new one.\n\n- Then: Full name \n- Then: Confirm the phone number with the patient taken from:\n{{ $('Wassenger Trigger').item.json.data.fromNumber }}\n\nGuidelines:\n\n! Ask for only one piece of information at a time.\n! Wait for the user's response before asking the next question.\n! After every response, immediately update the Google Sheet using Google Sheet - Update Row, matched by the email address.\n\n2.You must always store all the user information(email address, name, phone number) in the Google Sheet.\n\nAfter collecting the information, ask the user:\n\"What would you like to discuss during your appointment?\"\n\n- Wait for their response.\n- Update the row in the Google Sheet with the topic or notes field using Google Sheet - Update Row to save the response as the appointment topic or notes.\n\n3.Offering Appointment Slots \nOnce the user's contact details and discussion topic have been collected:\n\nOffer 5 available time slots.\n\n- Use the assistant's local time zone(London) to determine available hours.\n\nOffice hours:\n\nMonday to Friday \nMorning: 09:00 to 12:00 \nAfternoon: 13:00 to 17:00\n\nDo not offer any times between 12:00 and 13:00.\n\nImportant:\n\n- Only offer time slots that fall within the office hours listed above.\n- You must check that a full 30-minute block is available:\n - The start and end time must not conflict with any existing calendar event.\n - The time slot must begin at least 24 hours in the future.\n\n- Always offer the next 5 available 30-minute time slots that meet the above criteria.\n\n- Only display the time slots in the user's time zone(London time).\n Do not mention time conversions or other time zones in your response.\n\n- Present the time slots in a simple, friendly format like: \n \"Here are the next available appointments for you: \n - Thursday at 10:00 AM \n - Friday at 11:30 AM \n...\"\n\n- If no valid slots match the user's requested period(e.g., afternoon), politely inform the user and offer the next closest options.\n\n- Never mention unavailable or already booked time slots.\n Only show the free ones.\n\n! You must not manually calculate or estimate time zone offsets.\nUse the Google Calendar tool to convert and format times.\n\n4.When the user confirms a preferred date and time, you must:\n\nCreate an event in the Google Calendar at the selected time.\n\nAppointments should always be scheduled for 30 minutes unless the user specifies otherwise.\n\nDo not create a new row in the Google Sheet.\n\nInstead, use \"Google Sheet - Update Row\" to update the existing row corresponding to the user(matched by email address), and add the selected date and time as the confirmed appointment.\n\nThe appointment time saved in the Google Sheet must always be in the assistant's local time(German time) - never in the user's time zone.\n\nAfter the booking is confirmed, send a confirmation email to the user using the \"Gmail - Send Confirmation User\" tool.\n\nThe email must include:\n\n- The confirmed appointment date and time(in London time) \n- The user's name and topic of discussion \n- A short, friendly message confirming the booking\n\nOnly send the confirmation email after the calendar event has been created and all data has been stored in the Google Sheet."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.8,
"position": [
2440,
720
],
"id": "2df07709-f74d-4816-8969-141a8502cc64",
"name": "AI Agent"
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
2040,
960
],
"id": "5b974204-0b48-483a-9306-9f8a53bf0aa7",
"name": "OpenAI Chat Model"
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('Message Type') }}",
"contextWindowLength": 20
},
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
2200,
960
],
"id": "7f3c1455-c110-48f0-b330-7da555dce523",
"name": "Simple Memory"
},
{
"parameters": {
"operation": "getAll",
"calendar": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}",
"mode": "id",
"__regex": "(^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)"
},
"options": {}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
2340,
960
],
"id": "a02cdef3-2958-4a31-b033-3c7472e6262e",
"name": "Calendar Read",
"credentials": {
"googleCalendarOAuth2Api": {
"id": "LL4HXXOSECspo8kd",
"name": "Google Calendar account"
}
}
},
{
"parameters": {
"calendar": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}",
"mode": "id"
},
"additionalFields": {}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
2480,
960
],
"id": "5bf56efe-4e6a-496f-992e-9463184d5a31",
"name": "Calendar Create"
},
{
"parameters": {
"operation": "delete",
"calendar": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}",
"mode": "id"
},
"eventId": "={{ fromAI(\"id\", \"the id of the event\") }}",
"options": {}
},
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
2620,
960
],
"id": "3d4e631b-c9ef-43d7-b159-d5a677ee0e71",
"name": "Calendar Delete"
},
{
"parameters": {
"documentId": {
"__rl": true,
"value": "1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q",
"mode": "list",
"cachedResultName": "Appointment Setter",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Sheet1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q/edit#gid=0"
},
"options": {
"dataLocationOnSheet": {
"values": {
"rangeDefinition": "detectAutomatically",
"readRowsUntil": "firstEmptyRow"
}
},
"outputFormatting": {
"values": {
"general": "UNFORMATTED_VALUE",
"date": "FORMATTED_STRING"
}
}
}
},
"type": "n8n-nodes-base.googleSheetsTool",
"typeVersion": 4.5,
"position": [
2760,
960
],
"id": "f405d7a1-b830-4030-87a4-c9726f012661",
"name": "Google Sheets"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Document', ``, 'string') }}",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Sheet', ``, 'string') }}",
"mode": "id"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Email": "={{ $fromAI(\"email\", \"the email address that the user tells you\") }}"
},
"matchingColumns": [],
"schema": [
{
"id": "Appointment Date",
"displayName": "Appointment Date",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Booking Status",
"displayName": "Booking Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Time Zone",
"displayName": "Time Zone",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Name",
"displayName": "Name",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Phone",
"displayName": "Phone",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Email",
"displayName": "Email",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "Intake Form",
"displayName": "Intake Form",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "Reminder Sent",
"displayName": "Reminder Sent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheetsTool",
"typeVersion": 4.5,
"position": [
2900,
960
],
"id": "42769806-5ad3-4d01-b119-6002bd6e44aa",
"name": "Google Sheets - Add rows"
},
{
"parameters": {
"operation": "update",
"documentId": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Document', ``, 'string') }}",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Sheet', ``, 'string') }}",
"mode": "id"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Email": "={{ $fromAI(\"email\", \"the email address that the user tells you\") }}",
"Appointment Date": "={{ $fromAI(\"date\", \"the appointment date and time converted to Central European Time that the user confirmed as his appointment\") }}",
"Booking Status": "={{ $fromAI(\"status\", \"the status of the appointment which is either confirmed or cancelled\") }}",
"Time Zone": "={{ $fromAI(\"timeZone\", \"the time zone and location the the user tells you\") }}",
"Name": "={{ $fromAI(\"name\", \"the name of the user\") }}",
"Phone": "={{ $fromAI(\"phone\", \"the phone number that the user tells you.\") }}",
"Intake Form": "={{ $fromAI(\"intake_form\", \"specific topics or issues the user likes to discuss during the appointment\") }}"
},
"matchingColumns": [
"Email"
],
"schema": [
{
"id": "Appointment Date",
"displayName": "Appointment Date",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Booking Status",
"displayName": "Booking Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Time Zone",
"displayName": "Time Zone",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Name",
"displayName": "Name",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Phone",
"displayName": "Phone",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Email",
"displayName": "Email",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Intake Form",
"displayName": "Intake Form",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Reminder Sent",
"displayName": "Reminder Sent",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": true
},
{
"id": "row_number",
"displayName": "row_number",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"readOnly": true,
"removed": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheetsTool",
"typeVersion": 4.5,
"position": [
3060,
960
],
"id": "ad4b0c89-bfd2-4016-b9ff-599178632e75",
"name": "Google Sheets - Update Row"
},
{
"parameters": {
"sendTo": "={{ $fromAI(\"email\", \"the email address provided by the user earlier\") }}",
"subject": "={{ $fromAI(\"subject\", \"the email subjectline that just is [New Booking] + Booking date and time converted to Local Timezone that the user confirmed as this appointment\") }}",
"message": "={{ $fromAI(\"body\", \"the email body taht contains the message that the booking if thge user was confirmed along with booking date, email, name, timezone, what user wants to discuss during the appointment\") }}",
"options": {
"bccList": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('BCC', ``, 'string') }}"
}
},
"type": "n8n-nodes-base.gmailTool",
"typeVersion": 2.1,
"position": [
3180,
960
],
"id": "0510a247-2e16-4746-88ef-cf70a61ad409",
"name": "Gmail",
"webhookId": "6244c414-188e-4e55-a323-145b5238faf2"
},
{
"parameters": {
"url": "=https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"id": "d85d8848-4a0a-44e2-8f33-032a51302f98",
"name": "Download Audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
1640,
360
],
"typeVersion": 4.2,
"credentials": {
"httpHeaderAuth": {
"id": "GTzBwI8uSTXV0UvT",
"name": "Header Auth account"
}
}
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"options": {}
},
"id": "1637b236-94ea-4270-a0bf-980a8f3db218",
"name": "Transcribe Audio",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1880,
360
],
"typeVersion": 1.8,
"credentials": {
"openAiApi": {
"id": "LOYODT0dLN0xy31E",
"name": "OpenAi account"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "219577d5-b028-48fc-90be-980f4171ab68",
"name": "data.body",
"type": "string",
"value": "={{ $json.text }}"
}
]
},
"options": {}
},
"id": "ed7c9be2-bf82-4374-93af-3b40e9c0f1c1",
"name": "Audio Info",
"type": "n8n-nodes-base.set",
"position": [
2120,
360
],
"typeVersion": 3.4
},
{
"parameters": {
"device": "device_id",
"phone": "={{ $('Wassenger Trigger').item.json.data.fromNumber }}",
"message": "={{ $json.output }}",
"options": {}
},
"type": "n8n-nodes-wassenger.wassenger",
"typeVersion": 1,
"position": [
3020,
720
],
"id": "b2547711-f27a-43f0-8adb-f9d9e7606bd4",
"name": "Send Message",
"credentials": {
"wassengerApiKey": {
"id": "9du3UAbFSzEaTSQE",
"name": "WhatsApp API key"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.data.media.type }}",
"rightValue": "audio",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "94a56d29-cb88-4eb0-8d6b-07b1b91bfc3f"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Voice message"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "6ce0d87f-bdfc-4c65-a3fb-8d86bb682c4e",
"leftValue": "={{ $json.data.type }}",
"rightValue": "text",
"operator": {
"type": "string",
"operation": "equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Text message"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
1320,
700
],
"id": "3df50a7f-5ab3-421d-939b-ebb762a451ce",
"name": "Message Type"
},
{
"parameters": {
"content": "📅 WhatsApp Appointment Booking Workflow(n8n)\nThis n8n workflow automates appointment scheduling through WhatsApp for any business offering time-based services(e.g.clinics, consultancies, salons, etc.).It combines AI-driven messaging with Google services to streamline the entire booking process.\n\n🔧 Tools & Services Used\nWassenger Trigger: Captures incoming WhatsApp messages.\n\nLangchain AI Agent: Manages the conversational flow, understands intent, and gathers required info.\n\nGoogle Calendar: Checks for availability and books appointments.\n\nGoogle Sheets: Stores and updates client records and booking info.\n\nGmail: Sends personalized appointment confirmations.\n\nOpenAI(gpt-4o-mini): Generates intelligent and friendly chat replies.\n\nAudio Transcription(Optional): Converts voice messages to text for processing.\n\n📋 Step-by-Step Workflow Description\n1.Trigger: Incoming WhatsApp Message\nThe flow starts when a new message(text or voice) is received via Wassenger.\n\n2.Message Type Detection\nThe system checks whether the message is:\n\nText: Processes it directly.\n\nVoice: Downloads and transcribes it using OpenAI.\n\n3.AI Agent Engagement\nThe AI assistant analyzes the first message and responds naturally.\n\nIt then asks if the user would like to book an appointment.\n\nIf the user agrees, it collects the following information in strict order:\n\nEmail address(used as a unique identifier)\n\nFull name\n\nPhone number\n\nAfter each input, the AI updates Google Sheets(adding or updating rows as needed).\n\n4.Purpose of Appointment\nThe assistant asks what the user would like to discuss during the appointment.\n\nThis input is recorded in the sheet as notes or discussion topic.\n\n5.Appointment Slot Offering\nThe system checks Google Calendar for available 30-minute time blocks.\n\nOnly time slots during business hours are offered:\n\nMonday to Friday\n\nMorning: 09:00–12:00\n\nAfternoon: 13:00–17:00(noon hour excluded)\n\nThe next 5 available slots(at least 24h in the future) are displayed in the user's local time(e.g., London).\n\n6.Appointment Confirmation\nOnce the user picks a time:\n\nA calendar event is created.\n\nThe associated Google Sheets row is updated with the confirmed date/time(stored in system time).\n\nA confirmation email is sent via Gmail.\n\n🕒 Timezone Notes\nUsers are assumed to be in a fixed known timezone(e.g., London).\n\nInternally, scheduling and calendar checks are based on a consistent system timezone(e.g., German time).\n\n✅ Key Benefits\nFully automated booking via WhatsApp - no human intervention needed.\n\nWorks with both text and voice messages.\n\nEliminates double bookings by checking calendar availability.\n\nCentralized data collection in Google Sheets.\n\nProfessional email confirmations sent instantly.",
"height": 1700,
"width": 700
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
180,
-100
],
"id": "d5c7f667-e407-48e1-8403-91ed141bfb10",
"name": "Sticky Note"
}
],
"pinData": {},
"connections": {
"Wassenger Trigger": {
"main": [
[
{
"node": "Message Type",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Send Message",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Calendar Read": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Calendar Create": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Calendar Delete": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Google Sheets": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Google Sheets - Add rows": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Google Sheets - Update Row": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Gmail": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Download Audio": {
"main": [
[
{
"node": "Transcribe Audio",
"type": "main",
"index": 0
}
]
]
},
"Transcribe Audio": {
"main": [
[
{
"node": "Audio Info",
"type": "main",
"index": 0
}
]
]
},
"Audio Info": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Message Type": {
"main": [
[
{
"node": "Download Audio",
"type": "main",
"index": 0
}
],
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Fonctionnalités avancées et personnalisation
Options de scalabilité
- Intégration de plusieurs calendriers pour les réservations en équipe
- Règles de planification spécifiques par département
- Paramètres personnalisés de durée de rendez‑vous
- Exclusions pour jours fériés et congés
Possibilités d'intégration
- Connexions aux systèmes CRM
- Automatisation du traitement des paiements
- Systèmes de rappel SMS
- Génération de liens pour appels vidéo
Surveillance et analytique
- Suivi de la conversion des réservations
- Analyse des interactions client
- Mesures des temps de réponse
- Surveillance des performances du système
Améliorations à venir
Fonctionnalités prévues :
- Possibilité de replanification des rendez‑vous
- Notifications de rappel automatisées
- Collecte des retours clients
- Extension de la prise en charge multilingue
Intégrations avancées :
- Connexions aux plateformes de visioconférence
- Systèmes de gestion de la relation client
- Développement d'un tableau de bord analytique
- Notifications via application mobile
Commencez dès aujourd'hui
Prêt à implémenter cette puissante automatisation de réservation ? Suivez ces étapes :
- Enregistrez votre numéro WhatsApp : Configurez votre profil professionnel sur Wassenger
- Téléchargez le workflow : Accédez au modèle n8n complet
- Configurez votre environnement : Configurez toutes les intégrations requises (Google, OpenAI, etc.)
- Testez en profondeur : Vérifiez que toutes les fonctionnalités fonctionnent comme prévu
- Activez votre workflow : Commencez à accepter des réservations automatisées
Ce système de réservation WhatsApp complet transforme la manière dont les entreprises de services gèrent les rendez‑vous, offrant une automatisation professionnelle sans nécessiter d'expertise technique. La combinaison de l'IA, des intégrations Google et de l'accessibilité via WhatsApp crée une solution puissante pour les opérations commerciales modernes.
Support et communauté
Pour une assistance supplémentaire, la personnalisation du workflow ou la mise en œuvre de fonctionnalités avancées, connectez‑vous à la communauté n8n ou envisagez des services de conseil en automatisation professionnels pour maximiser le potentiel de votre système.
🚀 Essayez Wassenger Flows gratuitement | 📚 Consulter la documentation | 💬 Obtenir de l'aide












