Salon de beauté - Prise de rendez-vous
Ceci est unAI Chatbot, Multimodal AIworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme Set, Gmail, Switch, Webhook, GoogleCalendar. Réservation de salon basée sur l'IA, intégrant GPT, Google Agenda et confirmation par e-mail
- •Compte Google et informations d'identification Gmail API
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Clé API OpenAI
Nœuds utilisés (20)
Catégorie
{
"id": "8czbnI4iBMuXq48K",
"meta": {
"instanceId": "ade7e20aad77e0a552d206f839739da695af286a3148c41c951c915d6af91ebc",
"templateCredsSetupCompleted": true
},
"name": "Salon Booking",
"tags": [],
"nodes": [
{
"id": "4ed1dd4c-30ff-4840-bc22-09a12082e6f8",
"name": "Modèle de chat OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1568,
640
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "o3-mini",
"cachedResultName": "o3-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "8e0c3165-0201-4fee-b602-cf9fc5976c19",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
1872,
640
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "f16c511e-d28b-4bd0-b994-ce07d406dac3",
"name": "Modèle de chat OpenAI1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1840,
784
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "c83f45f7-6030-434d-b4f6-184ec99b9a49",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2000,
768
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"is_pass_next\": \"boolean\",\n\t\"message\": \"string\"\n}"
},
"typeVersion": 1.2
},
{
"id": "d4d24714-7f47-4aa5-878f-80b5623114fa",
"name": "Commutateur",
"type": "n8n-nodes-base.switch",
"position": [
2208,
464
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Booking",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b27f50ed-f26d-4310-b049-f0b38ca069f6",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.output.is_pass_next }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "Feedback",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ca6f2ea1-9dd1-4e77-9935-c3dbeb872ee4",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.output.is_pass_next }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "28a6030e-cccd-4bf5-9f87-805dd9f12fb7",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
2640,
400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "34357e62-87db-4d9c-a4ac-b8008c944821",
"name": "user_data",
"type": "string",
"value": "={{$('Switch').item.json.output.message}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "05bff1d7-592c-473b-91c7-bb6ab23fd45e",
"name": "Google Agenda",
"type": "n8n-nodes-base.googleCalendar",
"position": [
3328,
368
],
"parameters": {
"end": "={{ $json.output.calendar_event.end_time }}",
"start": "={{ $json.output.calendar_event.start_time }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "anuj@sapahk.ai",
"cachedResultName": "anuj@sapahk.ai"
},
"additionalFields": {
"color": "7",
"summary": "={{ $json.output.email.description }}",
"attendees": [
"={{ $json.output.email.to }}"
]
},
"useDefaultReminders": false
},
"typeVersion": 1.3
},
{
"id": "eefd2266-e4f8-413f-a7f3-4ecbf34158d3",
"name": "Booking Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2880,
400
],
"parameters": {
"text": "=You are the Booking Agent for Glow & Grace Salon – Where Beauty Meets Elegance.\n\nYour job is to take finalized booking details from the Salon Agent, and:\n\nGenerate a Google Calendar event object with proper start and end time.\n\nInput from Restaurant Agent: {{ $('Edit Fields').item.json['user_data'] }}\n\nGenerate a confirmation email with:\n\nRecipient email address\n\nEmail subject line\n\nA professional and beautifully formatted HTML body\n\n✅ Your OUTPUT must be in this structure:\n\n{\n \"calendar_event\": {\n \"start_time\": \"2025-06-05T10:00:00\",\n \"end_time\": \"2025-06-05T11:30:00\",\n \"name\": \"Olivia Brown\"\n },\n \"email\": {\n \"to\": \"olivia.brown@example.com\",\n \"subject\": \"Your Glow & Grace Salon Appointment Confirmation 💇♀️✨\",\n \"html_body\": \"<html>... (full email HTML below) ...</html>\", \n \"description\": \"Salon appointment with Olivia\"\n }\n}\n\n\nEXAMPLE: \n<html>\n <body style=\"font-family: Arial, sans-serif; color: #333; background-color: #fafafa; padding: 20px;\">\n <h2 style=\"color: #C71585;\">💇♀️ Glow & Grace Salon – Appointment Confirmed</h2>\n <p>Dear Olivia Brown,</p>\n <p>We’re delighted to confirm your salon appointment with us! Here are your booking details:</p>\n <table style=\"margin-top: 15px; border-collapse: collapse;\">\n <tr>\n <td><strong>Date:</strong></td>\n <td>June 5, 2025</td>\n </tr>\n <tr>\n <td><strong>Time:</strong></td>\n <td>10:00 AM – 11:30 AM</td>\n </tr>\n <tr>\n <td><strong>Services:</strong></td>\n <td>Haircut + Blowout</td>\n </tr>\n <tr>\n <td><strong>Stylist:</strong></td>\n <td>Sophia (Master Stylist)</td>\n </tr>\n <tr>\n <td><strong>Location:</strong></td>\n <td>Glow & Grace Salon, 21 Beauty Lane, Glamour City</td>\n </tr>\n </table>\n <p style=\"margin-top: 15px;\">📝 <strong>Special Notes:</strong> Requested volume styling for an evening event.</p>\n <p>We look forward to pampering you and making you glow with confidence! ✨</p>\n <p style=\"margin-top: 25px;\">Warm regards,<br/>The Glow & Grace Team</p>\n <hr style=\"margin-top: 30px;\">\n <p style=\"font-size: 12px;\">Questions? Contact us at <a href='mailto:appointments@glowandgrace.com'>appointments@glowandgrace.com</a> or call (555) 123-9876</p>\n </body>\n</html>\n\n\n\n🧠 Behavior Notes:\n\nDefault service durations (unless specified):\n\nHaircut: 1 hour\n\nHair Color: 2 hours\n\nBlowout/Styling: 1 hour\n\nManicure/Pedicure: 1.5 hours\n\nFacial: 1 hour\n\nMassage: 1.5 hours\n\nIf multiple services are booked, add up durations in order.\n\nIf the user specifies a custom duration, honor that.\n\nFormat start and end time in ISO 8601 (RFC3339).\n\nTime zone is assumed to be the Salon’s local time: {{ $now }}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.8
},
{
"id": "ea30c358-bd1c-4703-bd3a-d779af0829a5",
"name": "Modèle de chat OpenAI2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2864,
624
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "59665448-7d44-4f8b-a330-e6e16460785c",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
3040,
608
],
"parameters": {
"jsonSchemaExample": "{\n \"calendar_event\": {\n \"start_time\": \"2025-05-10T14:00:00\",\n \"end_time\": \"2025-05-10T17:00:00\",\n \"name\": \"Sarah Johnson\"\n },\n \"email\": {\n \"to\": \"sarah@example.com\",\n \"subject\": \"Your Relaxing SPA Booking Confirmation – Rejuvenate & Revive Package\",\n \"html_body\": \"<html>... (full email HTML below) ...</html>\",\n \"description\": \"Booking with Sarah\"\n }\n}\n"
},
"typeVersion": 1.2
},
{
"id": "abf22778-be62-4bf2-9172-6b94bc103b1e",
"name": "Simple Mémoire",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
1728,
640
],
"parameters": {
"sessionKey": "={{ $json?.message?.chat?.id || $json?.body?.sessionId }}",
"sessionIdType": "customKey",
"contextWindowLength": 15
},
"typeVersion": 1.3
},
{
"id": "815868dd-3fda-483b-a076-87837c595c62",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
3328,
560
],
"webhookId": "c1388946-d239-4325-abde-1a9ae909797b",
"parameters": {
"sendTo": "={{ $json.output.email.to }}",
"message": "={{ $json.output.email.html_body }}",
"options": {},
"subject": "={{ $json.output.email.subject }}"
},
"typeVersion": 2.1
},
{
"id": "abfe4772-8b9c-47e9-83f2-b6892e625ffa",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
-16
],
"parameters": {
"width": 1180,
"height": 1120,
"content": "## Overview\n\n- This workflow is an **AI-powered Salon Booking Assistant** that automates hair, beauty, and spa appointment scheduling through a **Webhook trigger**. \n- It interacts with the user in natural conversation, collects booking details (service type, stylist preference, date/time, and any special requests), finalizes the draft, and confirms the appointment by storing it in **Google Calendar** and sending an **email confirmation** — fully automated end-to-end.\n\n---\n\n## How It Works\n\n### 1. User Interaction\n- The workflow starts when a user submits a request via the **Webhook**. \n- The AI agent asks step-by-step questions: \n - Type of service (haircut, facial, manicure, etc.) \n - Preferred stylist (optional) \n - Preferred date & time \n - Any additional notes (special treatments, products, etc.) \n- Once details are gathered, it generates a draft appointment summary.\n\n### 2. Confirmation & Personal Details\n- The user reviews the draft and confirms. \n- The assistant then asks for personal details (name, email, phone number).\n\n### 3. Booking & Notifications\n- After confirmation, the details are sent to **Google Calendar** to create an appointment. \n- A **confirmation email** is sent to the user with all booking information. \n- A final webhook response confirms that the appointment is successfully booked.\n\n---\n\n## How to Use\n- Triggered directly via a **Webhook URL** (can be embedded in your salon website or mobile app). \n- Simply fill in the details, and the assistant will guide the user step by step until the booking is finalized. \n- Once completed, the user receives both an **email confirmation** and an on-screen success message.\n\n---\n\n## Requirements\nTo use this workflow, you’ll need: \n- **n8n account** (self-hosted or cloud) \n- **Webhook node** (for booking trigger) \n- **OpenAI or OpenRouter API Key** (for AI-driven conversation) \n- **Google Calendar API access** (to create appointments) \n- **Gmail / SMTP credentials** (to send confirmation emails) \n"
},
"typeVersion": 1
},
{
"id": "2714a16f-48aa-4203-92a8-7aec75ecb531",
"name": "Information Gathering Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1696,
416
],
"parameters": {
"text": "=You are the Salon Reservation Agent for Glow & Grace Salon – Premium Hair & Beauty Services.\n\nYour role is to assist users in booking a salon appointment, starting with gathering their information, confirming the booking, and ensuring it’s added to the calendar and an email is sent.\n\nUser Input: {{ $json?.message?.text || $json?.body?.message }}\n\n🎭 Tone and Behavior\n\nWarm, polite, and professional — like a friendly salon receptionist.\n\nMake the client feel cared for and pampered.\n\nAlways move step by step — never jump ahead.\n\nNever suggest random services or times — always confirm with the user.\n\n🧾 FLOW STRUCTURE:\n\n1. FIRST INTERACTION (Warm Greeting)\nAlways start with a polite opening and ask how you can help.\n\n{\n \"is_pass_next\": false,\n \"message\": \"Welcome to Glow & Grace Salon 💇♀️✨ Your beauty, our passion. How may I assist you today? Would you like to book an appointment?\"\n}\n\n\n2. APPOINTMENT DETAILS (Step by Step Questions)\n\nAsk one question at a time in sequence:\n\nService Type (Haircut, Hair Spa, Facial, Manicure, Pedicure, Makeup, etc.)\n\nPreferred Stylist/Therapist (if any)\n\nPreferred Date & Time\n\nSpecial Requests (bridal prep, event styling, sensitive skin, etc.)\n\nExample response if still collecting info:\n\n{\n \"is_pass_next\": false,\n \"message\": \"Got it! Which service would you like to book — for example haircut, facial, manicure, or something else?\"\n}\n\n\n3. PRE-CONFIRMATION: Reservation Draft\nOnce enough details are gathered, propose a draft for review.\n\n{\n \"is_pass_next\": false,\n \"message\": \"Here’s your appointment draft 💆♀️:\\n\\n🗓 Date & Time: [Insert Date & Time]\\n💇♀️ Service: [Service Type]\\n✨ Preferred Stylist: [If any]\\n🎀 Special Notes: [If any]\\n📍 Location: Glow & Grace Salon, 21 Beauty Avenue, Style City\\n\\nShall we finalize this?\"\n}\n\n\n4. GATHER PERSONAL DETAILS (After Confirmation)\nOnly after the user confirms the reservation draft, ask for full name, email, and phone number.\n\n{\n \"is_pass_next\": false,\n \"message\": \"Perfect! To complete your reservation, may I have your full name, email, and an optional contact number?\"\n}\n\n\n5. FINAL CONFIRMATION & PASS TO SYSTEM\nOnce user provides details, finalize booking and pass it to system:\n\n{\n \"is_pass_next\": true,\n \"message\": {\n \"customer_name\": \"[Name]\",\n \"email\": \"[Email]\",\n \"phone\": \"[Phone Number]\",\n \"appointment_date\": \"[YYYY-MM-DD]\",\n \"appointment_time\": \"[Time]\",\n \"service_type\": \"[Haircut/Facial/etc.]\",\n \"preferred_stylist\": \"[If any]\",\n \"special_notes\": \"[Any notes from user]\"\n }\n}\n\n\nTime zone is assumed to be the Salon's local time : {{ $now }}\n\n",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.8
},
{
"id": "22fbf5d5-05f1-4479-bafa-ec273c68d2b3",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1392,
144
],
"parameters": {
"color": 7,
"width": 740,
"height": 820,
"content": "### Telegram Trigger & AI Agent Flow\n\n- **Webhook Trigger** → Listens for new messages from the user. \n- **AI Agent** → Processes the user’s message, understands intent (e.g., booking, feedback, etc.), and replies in a conversational way. \n- **Memory & Parsers** → Help the AI remember context and structure the responses so the flow remains smooth. \n"
},
"typeVersion": 1
},
{
"id": "9395eadb-53ab-4790-b574-7295fda7252f",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2160,
64
],
"parameters": {
"color": 7,
"width": 620,
"height": 820,
"content": "### Switch, Respond& Edit Fields\n\n- **Switch Node** → Decides the flow based on user input. \n - If the user is making a **Booking**, the process continues toward reservation steps. \n - If the user is giving **Feedback**, it routes the conversation separately. \n\n- **Repond Nodes** → Send appropriate responses back to the user on webhook depending on the chosen path. \n\n- **Edit Fields** → Prepares and formats the booking details (guest count, preferences, date/time, etc.) before passing them to the next step in the workflow. \n"
},
"typeVersion": 1
},
{
"id": "85b9fe22-224a-4319-8dc1-33c054c35e3d",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2800,
64
],
"parameters": {
"color": 7,
"width": 920,
"height": 820,
"content": "### Booking Agent, Google Calendar & Gmail\n\n- **Booking Agent** → Collects all finalized booking details from the user, organizes them, and prepares a structured summary. It also creates a formatted HTML template for the confirmation email and ensures the booking payload is properly structured. \n\n- **Google Calendar** → Automatically creates a reservation event with the provided details (guest count, preferences, date/time, special requests). \n\n- **Send a Message (Gmail)** → Sends a professional confirmation email to the user with all booking details included. \n"
},
"typeVersion": 1
},
{
"id": "60b74241-494f-4782-9e2e-4538094bc9d3",
"name": "Déclencheur Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
1440,
432
],
"webhookId": "1306a6cb-608a-471a-a84b-f07f981c67da",
"parameters": {
"path": "1306a6cb-608a-471a-a84b-f07f981c67da",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "a9a98a78-447b-4b33-ba9f-553a3b40489d",
"name": "Respond to Déclencheur Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2432,
640
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={{ $('Information Gathering Agent').item.json.output.message }}"
},
"typeVersion": 1.1
},
{
"id": "c5c6e80c-c4cb-48fc-a1f0-63477de52205",
"name": "Respond to Déclencheur Webhook1",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2432,
432
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "Thank you for your confirmation! We have noted down your information. You will be getting confirmation mail soon. "
},
"typeVersion": 1.1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d2c0a675-cc2f-456b-9ac0-27561f1acec2",
"connections": {
"Switch": {
"main": [
[
{
"node": "Respond to Webhook1",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "2714a16f-48aa-4203-92a8-7aec75ecb531",
"type": "main",
"index": 0
}
]
]
},
"28a6030e-cccd-4bf5-9f87-805dd9f12fb7": {
"main": [
[
{
"node": "eefd2266-e4f8-413f-a7f3-4ecbf34158d3",
"type": "main",
"index": 0
}
]
]
},
"eefd2266-e4f8-413f-a7f3-4ecbf34158d3": {
"main": [
[
{
"node": "Google Calendar",
"type": "main",
"index": 0
},
{
"node": "815868dd-3fda-483b-a076-87837c595c62",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "2714a16f-48aa-4203-92a8-7aec75ecb531",
"type": "ai_memory",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "2714a16f-48aa-4203-92a8-7aec75ecb531",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "8e0c3165-0201-4fee-b602-cf9fc5976c19",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "eefd2266-e4f8-413f-a7f3-4ecbf34158d3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Respond to Webhook1": {
"main": [
[
{
"node": "28a6030e-cccd-4bf5-9f87-805dd9f12fb7",
"type": "main",
"index": 0
}
]
]
},
"c83f45f7-6030-434d-b4f6-184ec99b9a49": {
"ai_outputParser": [
[
{
"node": "8e0c3165-0201-4fee-b602-cf9fc5976c19",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"8e0c3165-0201-4fee-b602-cf9fc5976c19": {
"ai_outputParser": [
[
{
"node": "2714a16f-48aa-4203-92a8-7aec75ecb531",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"59665448-7d44-4f8b-a330-e6e16460785c": {
"ai_outputParser": [
[
{
"node": "eefd2266-e4f8-413f-a7f3-4ecbf34158d3",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"2714a16f-48aa-4203-92a8-7aec75ecb531": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
}
}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é - 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.
Workflows recommandés
Aziz B
@azizb28Partager ce workflow