Système de confirmation de réservation et de planification de réunions automatisé
Avancé
Ceci est unLead Nurturingworkflow d'automatisation du domainecontenant 23 nœuds.Utilise principalement des nœuds comme If, Set, Zoom, Gmail, Merge. Formulaire à réunion : automatisation de la réservation avec Google Calendar, Zoom, Gmail et Slack
Prérequis
- •Compte Google et informations d'identification Gmail API
- •Token Bot Slack ou URL Webhook
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
Nœuds utilisés (23)
Catégorie
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
{
"id": "f86tpZtlEF8Fxt6s",
"meta": {
"instanceId": "189dde98270e9ce0f006f0e9deb96aa5e627396fc6279cac8902c9b06936984d"
},
"name": "Automated Booking Confirmation and Meeting Scheduler",
"tags": [],
"nodes": [
{
"id": "3dd27b86-6e03-4595-a9fa-2fe3d1210611",
"name": "Google Forms Webhook1",
"type": "n8n-nodes-base.webhook",
"position": [
176,
208
],
"webhookId": "0c79affb-61ad-4802-8580-66c5856d66cf",
"parameters": {
"path": "google-forms-booking",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2.1
},
{
"id": "957b6711-281f-4599-9962-84ebf221691a",
"name": "Fusionner les données du formulaire1",
"type": "n8n-nodes-base.merge",
"position": [
496,
224
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c",
"name": "Configuration du workflow1",
"type": "n8n-nodes-base.set",
"position": [
848,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "calendarId",
"type": "string",
"value": "c_91f92ee12632d48cc78642add679d75aa8aecb09abea89eadbc97cb17d2de336@group.calendar.google.com"
},
{
"id": "id-2",
"name": "slackChannel",
"type": "string",
"value": "C09GN4NCTAP"
},
{
"id": "id-3",
"name": "teammateEmail",
"type": "string",
"value": "ojima@g-jete.com"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "66b2895b-8260-4e40-b4ec-39b100b89f77",
"name": "Extraire les détails de la réservation1",
"type": "n8n-nodes-base.set",
"position": [
1168,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "customerName",
"type": "string",
"value": "={{ $json.body.name }}"
},
{
"id": "id-2",
"name": "customerEmail",
"type": "string",
"value": "={{ $json.body.email }}"
},
{
"id": "id-3",
"name": "bookingDate",
"type": "string",
"value": "={{ $json.body.date }}"
},
{
"id": "id-4",
"name": "bookingTime",
"type": "string",
"value": "={{ $json.body.time }}"
},
{
"id": "34865dea-9db2-4f35-b91b-322572680869",
"name": "bookingStartISO",
"type": "string",
"value": "={{ new Date($json.body.date + 'T' + $json.body.time + ':00+09:00').toISOString() }}"
},
{
"id": "941d5f18-54fd-41ad-8f46-c9f9f13fb32f",
"name": "bookingEndISO",
"type": "string",
"value": "={{ new Date(new Date($json.body.date + 'T' + $json.body.time + ':00+09:00').getTime() + 60*60*1000).toISOString() }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "6591a8f7-2400-4de8-9fbe-b35271faf1f8",
"name": "Vérifier la disponibilité dans l'agenda1",
"type": "n8n-nodes-base.googleCalendar",
"position": [
1472,
224
],
"parameters": {
"options": {},
"timeMax": "={{ $json.bookingEndISO }}",
"timeMin": "={{ $json.bookingStartISO }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.calendarId }}"
},
"operation": "getAll"
},
"typeVersion": 1.3,
"alwaysOutputData": true
},
{
"id": "d80641b0-9da6-491c-922f-d278c0f030c3",
"name": "Le créneau est-il disponible ?1",
"type": "n8n-nodes-base.if",
"position": [
1824,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "14e9293a-f96c-45f1-b216-2c8aaf2fb3e2",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "76a27cb5-7196-4564-a89a-85d5d0a41d52",
"name": "Créer un événement dans l'agenda1",
"type": "n8n-nodes-base.googleCalendar",
"position": [
2144,
208
],
"parameters": {
"end": "={{ $('Extract Booking Details1').first().json.bookingEndISO }}",
"start": "={{ $('Extract Booking Details1').first().json.bookingStartISO }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.calendarId }}"
},
"additionalFields": {
"summary": "=Booking with {{ $('Extract Booking Details1').first().json.customerName }}",
"attendees": [
"={{ $('Extract Booking Details1').first().json.customerEmail }}"
],
"description": "=Customer: {{ $('Extract Booking Details1').first().json.customerName }} ({{ $('Extract Booking Details1').first().json.customerEmail }})"
}
},
"typeVersion": 1.3
},
{
"id": "9f4ca36f-8f02-43ee-8630-222958201959",
"name": "Créer une réunion Zoom1",
"type": "n8n-nodes-base.zoom",
"position": [
2416,
208
],
"parameters": {
"topic": "=Booking with {{ $('Extract Booking Details1').first().json.customerName }}",
"authentication": "oAuth2",
"additionalFields": {
"duration": 60,
"timeZone": "UTC",
"startTime": "={{ $('Extract Booking Details1').first().json.bookingStartISO }}"
}
},
"typeVersion": 1
},
{
"id": "a31d67fa-38b4-4276-a0ad-56d1069f95dd",
"name": "Envoyer l'e-mail de confirmation1",
"type": "n8n-nodes-base.gmail",
"position": [
2720,
208
],
"webhookId": "f28b9459-360b-4cad-9f2e-0d69654e795b",
"parameters": {
"sendTo": "={{ $('Extract Booking Details1').first().json.customerEmail }}",
"message": "=Hi {{ $('Extract Booking Details1').first().json.customerName }},\n\nYour booking has been confirmed!\n\nDate & Time: {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}\n\nZoom Meeting Link: {{ $json.join_url }}\n\nLooking forward to meeting you!\n\nBest regards",
"options": {},
"subject": "=Booking Confirmed: {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}"
},
"typeVersion": 2.1
},
{
"id": "b456c4f9-dcca-48a4-b750-f39e95df493f",
"name": "Notifier un collègue sur Slack1",
"type": "n8n-nodes-base.slack",
"position": [
3040,
208
],
"webhookId": "866a3241-98d2-4db1-b791-c8c8f83b99b9",
"parameters": {
"text": "=🎉 New booking confirmed!\n\n*Customer:* {{ $('Extract Booking Details1').first().json.customerName }} ({{ $('Extract Booking Details1').first().json.customerEmail }})\n*Date & Time:* {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }}\n*Zoom Link:* {{ $json.join_url }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration1').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"typeVersion": 2.3
},
{
"id": "78d4ae92-b136-4bbe-ae52-a73a60c47a6c",
"name": "Envoyer l'e-mail d'indisponibilité1",
"type": "n8n-nodes-base.gmail",
"position": [
2144,
512
],
"webhookId": "98dd0319-284e-4b12-a655-a57577571800",
"parameters": {
"sendTo": "={{ $('Extract Booking Details1').first().json.customerEmail }}",
"message": "=Hi {{ $('Extract Booking Details1').first().json.customerName }},\n\nThank you for your booking request. Unfortunately, the requested time slot on {{ new Date($('Extract Booking Details1').first().json.bookingStartISO).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' }) }} is not available.\n\nPlease submit a new booking request with an alternative time.",
"options": {},
"subject": "Time Slot Unavailable"
},
"typeVersion": 2.1
},
{
"id": "9f8af7ba-09f1-46bb-9bc6-bb2d0b26d744",
"name": "Sticky : Google Forms Webhook1",
"type": "n8n-nodes-base.stickyNote",
"position": [
96,
-400
],
"parameters": {
"color": "white",
"width": 768,
"height": 528,
"content": "Title: Automated Booking → Calendar + Zoom + Email + Slack\nWhat this workflow does\n\nCaptures booking submissions from a form and parses date/time.\n\nChecks Google Calendar for conflicts.\n\nIf free: creates a Calendar event → creates a Zoom meeting → emails the guest → notifies your team on Slack.\n\nIf busy: emails the guest to pick another time.\n\nFlow\nWebhook → Merge → Config → Extract details → Check availability → IF (free/busy) →\n[Free] Create Calendar Event → Create Zoom → Email confirmation → Slack notify\n[Busy] Email unavailability\n\nNotes\n\nKeep all user-editable variables in the Set nodes for easy maintenance.\n\nDate handling assumes Asia/Tokyo input and converts to ISO for API calls.\n\nNo hardcoded credentials inside HTTP nodes; store secrets via Credentials."
},
"typeVersion": 1
},
{
"id": "5eb1dc05-5c0f-44a0-9000-d4abdd74a981",
"name": "Sticky : Fusionner les données du formulaire1",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Entry point for bookings. Receives a POST payload from your form (name, email, date, time).\nOutput: Raw form fields under body.* used downstream."
},
"typeVersion": 1
},
{
"id": "967bcc58-fc07-4e4c-8b17-5f2a99f9287f",
"name": "Sticky : Configuration du workflow1",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
384
],
"parameters": {
"color": "white",
"width": 272,
"height": 176,
"content": "Purpose: Normalizes/forwards webhook data to keep a single item moving through the flow.\nTip: Use this as a “buffer” if you ever add parallel inputs later."
},
"typeVersion": 1
},
{
"id": "663ecdf9-6f9d-481c-abe6-e7d8b3c34021",
"name": "Sticky : Extraire les détails de la réservation1",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
384
],
"parameters": {
"color": "white",
"width": 288,
"height": 176,
"content": "Purpose: Central place for editable constants (e.g., calendarId, slackChannel, teammateEmail).\nWhy: Makes the template plug-and-play—update values here instead of hunting through nodes."
},
"typeVersion": 1
},
{
"id": "c12bee38-9494-43b7-9961-2e4971a92316",
"name": "Sticky : Vérifier la disponibilité dans l'agenda1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
384
],
"parameters": {
"color": "white",
"width": 272,
"height": 176,
"content": "Purpose: Maps form fields to clean variables: customerName, customerEmail, bookingDate, bookingTime.\nAlso: Builds bookingStartISO and bookingEndISO (60-min duration) using the submitted local time (JST) → ISO strings."
},
"typeVersion": 1
},
{
"id": "b58f33ab-ad60-4a98-9354-3ed1a1aeab72",
"name": "Sticky : Le créneau est-il disponible ?1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1424,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Queries the target calendar for events overlapping bookingStartISO–bookingEndISO.\nBehavior: Returns an empty list when the slot is free; non-empty when it’s taken."
},
"typeVersion": 1
},
{
"id": "b0b7376c-f552-4ce9-bd31-33919ba04618",
"name": "Sticky : Créer un événement dans l'agenda1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
384
],
"parameters": {
"color": "white",
"width": 256,
"height": 176,
"content": "Purpose: Branches on availability.\nTrue (empty result): Slot is free → proceed to create the event.\nFalse (has events): Slot is busy → send “unavailable” email."
},
"typeVersion": 1
},
{
"id": "bb03b52c-ddc4-4896-9016-6d01ab6b68ec",
"name": "Sticky : Créer une réunion Zoom1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2000,
16
],
"parameters": {
"color": "white",
"width": 272,
"content": "Purpose: Books the time on Google Calendar with the guest as an attendee.\nFields: Summary includes guest name; Description includes name + email for quick context."
},
"typeVersion": 1
},
{
"id": "73736740-501f-4814-9722-e8576e2dd21f",
"name": "Sticky : Envoyer l'e-mail de confirmation1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2336,
16
],
"parameters": {
"color": "white",
"content": "Purpose: Creates a Zoom meeting for the confirmed slot.\nTiming: Uses the booking start time and a 60-minute duration.\nOutput: Provides join_url used by Email/Slack steps."
},
"typeVersion": 1
},
{
"id": "6e9c22c3-0b31-47f9-ab96-4476e501175d",
"name": "Sticky : Notifier un collègue sur Slack1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
16
],
"parameters": {
"color": "white",
"width": 256,
"content": "Purpose: Sends a confirmation to the guest with local (Japan) date/time and the Zoom link.\nSubject/Body: Human-readable datetime via toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' })."
},
"typeVersion": 1
},
{
"id": "b9aa000c-63a2-44b1-800a-c041a1582f64",
"name": "Sticky : Envoyer l'e-mail d'indisponibilité1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2064,
672
],
"parameters": {
"color": "white",
"width": 256,
"content": "Purpose: Notifies the guest when the requested slot is already taken and asks them to rebook another time."
},
"typeVersion": 1
},
{
"id": "3904238d-39eb-40f0-879f-3f17e1afd303",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
2960,
16
],
"parameters": {
"content": "Purpose: Posts a concise booking summary to your specified Slack channel.\nIncludes: Guest name/email, localized date/time, and Zoom join_url."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "31e08b0e-50a9-485b-b16c-856d2311d0f5",
"connections": {
"957b6711-281f-4599-9962-84ebf221691a": {
"main": [
[
{
"node": "3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c",
"type": "main",
"index": 0
}
]
]
},
"9f4ca36f-8f02-43ee-8630-222958201959": {
"main": [
[
{
"node": "a31d67fa-38b4-4276-a0ad-56d1069f95dd",
"type": "main",
"index": 0
}
]
]
},
"3dd27b86-6e03-4595-a9fa-2fe3d1210611": {
"main": [
[
{
"node": "957b6711-281f-4599-9962-84ebf221691a",
"type": "main",
"index": 0
}
]
]
},
"76a27cb5-7196-4564-a89a-85d5d0a41d52": {
"main": [
[
{
"node": "9f4ca36f-8f02-43ee-8630-222958201959",
"type": "main",
"index": 0
}
]
]
},
"3b63fe73-a5e7-4f3e-bf61-e7bd0a9aa63c": {
"main": [
[
{
"node": "66b2895b-8260-4e40-b4ec-39b100b89f77",
"type": "main",
"index": 0
}
]
]
},
"66b2895b-8260-4e40-b4ec-39b100b89f77": {
"main": [
[
{
"node": "6591a8f7-2400-4de8-9fbe-b35271faf1f8",
"type": "main",
"index": 0
}
]
]
},
"d80641b0-9da6-491c-922f-d278c0f030c3": {
"main": [
[
{
"node": "76a27cb5-7196-4564-a89a-85d5d0a41d52",
"type": "main",
"index": 0
}
],
[
{
"node": "78d4ae92-b136-4bbe-ae52-a73a60c47a6c",
"type": "main",
"index": 0
}
]
]
},
"a31d67fa-38b4-4276-a0ad-56d1069f95dd": {
"main": [
[
{
"node": "b456c4f9-dcca-48a4-b750-f39e95df493f",
"type": "main",
"index": 0
}
]
]
},
"6591a8f7-2400-4de8-9fbe-b35271faf1f8": {
"main": [
[
{
"node": "d80641b0-9da6-491c-922f-d278c0f030c3",
"type": "main",
"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é ?
Avancé - Nurturing de leads
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.
Workflows recommandés
Capture automatisée des prospects, qualification par IA et suivi vocal personnalisé avec ElevenLabs
Capture automatisée des prospects et suivi vocal personnalisé avec l'IA avec OpenAI et ElevenLabs
If
Set
Code
+
If
Set
Code
22 NœudsMarth
Nurturing de leads
09 - Amplificateur de profils de prospects
Automatisation de l'enrichissement et du contact personnalisé des prospects : HubSpot, Phantombuster et GPT
If
Set
Code
+
If
Set
Code
30 NœudsAvkash Kakdiya
Nurturing de leads
Détection des conflits de jours fériers mondiaux et reprogrammation des réunions
Détection des conflits de jours fériés et suggestion de nouvelles dates de réunion avec Google Calendar et Slack
If
Set
Code
+
If
Set
Code
23 NœudsTakuya Ojima
Productivité personnelle
会议纪要et行动项跟踪器
基于AIde会议纪要:utilisationGPT-4、任务分配et多渠道分发
If
Set
Code
+
If
Set
Code
38 NœudsJitesh Dugar
Création de contenu
Système de capture et de qualification des prospects anti-fraude
Capturer et faire mûrir les prospects anti-fraude via un score AI, un suivi dans les feuilles de calcul et des rappels multi-canaux
If
Set
Code
+
If
Set
Code
28 NœudsJitesh Dugar
Création de contenu
Explorer les nœuds n8n dans la bibliothèque de références visuelles
Explorer les nœuds n8n dans la base de références visuelles
If
Ftp
Set
+
If
Ftp
Set
113 NœudsI versus AI
Autres
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds23
Catégorie1
Types de nœuds9
Description de la difficulté
Auteur
Takuya Ojima
@takuyaLiens externes
Voir sur n8n.io →
Partager ce workflow