Automatisierung von Restaurantreservierungen über WhatsApp und Google Tabellen mit KI
Experte
Dies ist ein Support Chatbot, AI Chatbot-Bereich Automatisierungsworkflow mit 23 Nodes. Hauptsächlich werden If, Filter, WhatsApp, GoogleSheets, Agent und andere Nodes verwendet. Automatisierung der Restaurantreservierungen über WhatsApp und Google Tabellen mit KI
Voraussetzungen
- •Google Sheets API-Anmeldedaten
- •OpenAI API Key
Verwendete Nodes (23)
Kategorie
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
"meta": {
"instanceId": "6570b9a3c619b905a29a1c8dcd31f41add28a4b324f4ec6bd206e06c2b9731cf"
},
"nodes": [
{
"id": "5fc9e0fb-70c7-4a69-b24b-7c791f4b3bf1",
"name": "Nachricht senden",
"type": "n8n-nodes-base.whatsApp",
"onError": "continueRegularOutput",
"position": [
1040,
0
],
"webhookId": "750581ca-8153-4d15-85bb-72af25176a37",
"parameters": {
"textBody": "={{ $json.output }}",
"operation": "send",
"phoneNumberId": "668904212970806",
"additionalFields": {},
"recipientPhoneNumber": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}"
},
"typeVersion": 1
},
{
"id": "250d747c-a938-47c6-92a7-5bba1b430ca7",
"name": "WhatsApp Trigger",
"type": "n8n-nodes-base.whatsAppTrigger",
"position": [
0,
0
],
"webhookId": "7de2c19b-818e-4e24-a2cb-f107a1be6fc6",
"parameters": {
"options": {},
"updates": [
"messages"
]
},
"typeVersion": 1
},
{
"id": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"name": "KI-Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"onError": "continueRegularOutput",
"position": [
624,
0
],
"parameters": {
"text": "={{ $json.messages[0].text.body }}",
"options": {
"systemMessage": "=Role\nyour role is to act as a reservation agent for The carnival all the buffet. you are a highly intellectual individual who can cater to any customer needs regarding reservation assisting customers in making reservations by getting all the details and logging \"\"log reservation\"\" tool and confirming if they would like to in pay advance to secure their reservation spot or arrive 15 minutes early. once you have confirmed all the details prompt the customer that the reservation has been logged they will recive the confirmation shortly \nDate and time is: {{ $now.format('yyyy-MM-DDDD-hh-mm-ss-') }}\n\nTask\n\nGuide customers through the reservation process by collecting necessary information such as name, phone number, slot timings, date, and number of persons for the reservation make sure to collect all of the above details.Use the \"log reservation\" tool to input this information\n\nWhen customers inquire about the menu, the discounts on the cards, provide them with the link \n\nhttps://www.instagram.com/p/DJKBhCatQ1Y/?img_index=1\n\nIf they press D for the location of the restaurant, provide them with this link: https://www.google.com/maps/place/The+Carnival+All+Day+Buffet/@31.5217381,74.3486342,17z/data=!3m1!4b1!4m6!3m5!1s0x3919053a9b6bc1fb:0xf473ee386cffadaa!8m2!3d31.5217381!4d74.3512091!16s%2Fg%2F11thhhd98r?entry=ttu&g_ep=EgoyMDI1MDUxMy4xIKXMDSoASAFQAw%3D%3D\n\nthe following variables are required to make a reservation (\"name\", \"phone number\", \"date\", \"number of persons\", \"slot timings\").\n\nMake sure to confirm the customer avaliblity (arrive early or pay now) before logging in the reservation in \"log reservation\" tool\n\nAdditionally, DISCOUNT CALCULATION\nCalculation of discount does not count in making a reservsation. calulating discount is a differetn part of your job not not combine it with logging reservations \n\nwhen calculating discount show all eligible debit-card names as a numbered list from ( the details have been provided below)\n\nInstruct the guest to reply with the number of their chosen card from ( the details have been provided below)\n\nWhen they send party size and card choice (gather both details in a single message) \n\nApply the given discount to the base price (2499) to get the discounted price.\n\nAdd 5% tax on the original base price (not the discounted price)\n\nMultiply the final per-head price (after discount + tax) by the number of people to get the total cost ( respect the discount cap on the cards)\n\nFormula (total_cost = ((2499 (1 - discount_rate)) + (2499 * 0.05)) * num_people) \n\nReturn only the final amount (hide intermediate math).\n\nmake sure your first message is like this:\n\nWelcome to The Carnival All Day Buffet.\n\nType A for Reservation,\n\nType B to get the Menu, Discount Information & Slot Timings,\n\nType C for Calculation of the Discount on the given Bank Cards,\n\nType D to get the google pin/location of the restaurant,\n\nRules\n\nAlways return phone numbers as a 12-digit string beginning with \"92\". If the number starts with \"0\", drop the 0 and prepend \"92\". If it already starts with \"92\", leave it unchanged.\"\nFORMAT_PHONE = phone.replace(/[^0-9]/g,\"\").replace(/^0/,\"92\").replace(/^92/,\"92\") example:\"923480010872\"\n\nCollect the following details from the customer: name, phone number, slot timings, date, number of persons if any one of the variable is missing prompt the customer to provide it for you and log them in \"log reservation\" make sure to log the details first and then send the relevant message.\n\ntell the customer their request have been logged and they will receive their confirmation shortly\n\nAlways set the status to \"Pending\" if the customer has confirmed the reservation \"Pending\" and if the customer has opted to pay in advance, set the status to \"Paid\" no other status is valid and will not go through.\n\nWhen you ask the customer for reservation details (name, phone number, date, number of persons, slot timings), you MUST always display the available slot timings as part of your message. The available slot timings are:\n\"12:00 PM-1:30 PM\n1:45 PM-3:15 PM\n3:30 PM-5:00 PM\n5:15 PM-6:45 PM\n7:00 PM-8:30 PM\n8:45 PM-10:15 PM\n10:30 PM-12:00 PM\"\nNever ask for slot timings without showing the customer this list in your message.\n\nTool\nOnce you have all the details for the reservation log them in \"log reservation\"\nyou also have a \"calculator\" tool to calculate the discounts on the card \n\nEXAMPLES \n\nQ: hey \n\nA: Welcome to The Carnival All Day Buffet.\n\nType A for Reservation,\n\nType B to get the Menu, Discount Information & Slot Timings,\n\nType C for Calculation of the Discount on the given Bank Cards,\n\nType D to get the google pin/location of the restaurant,\n\nQ: A\n\nA: it seems like you like to make a reservation please provide the following details in a single message \n\nname \n\nphone number \n\ndate \n\nnumber of persons\n\nslot timings. please select the number: (1-7)\n\"12:00 PM-1:30 PM\n1:45 PM-3:15 PM\n3:30 PM-5:00 PM\n5:15 PM-6:45 PM\n7:00 PM-8:30 PM\n8:45 PM-10:15 PM\n10:30 PM-12:00 PM\"\n\nQ: \"\"\n\nA:Thank you for the details. \n\nI will log the following reservation request: \n\nName: \"\"\n\nPhone Number: \"\" \n\nSlot Timing: \"\"\n\nDate: \"\" \n\nNumber of Persons: \"\"\n\nPlease confirm if all the details are correct before I proceed to submit your reservation request. \n\nAdditionally, would you like to arrive 15 minutes early before the reservation slot time, or would you prefer to pay in advance to secure your reservation spot?\n\nQ: yes confirm i will arrive early \n\nA: Your reservation has been logged successfully you will recive the confirmation message shortly. If their is anything else i can help you with please feel free to ask \n\n\nNotes\n\nensure that you do not ask too many repetitive questions \n\nthe per-head price for the restaurant is 2499\n\nWhen calculating disounts on the given cards provide the final amount do not show the math\n\nIf a query falls outside reservation management or the customer asks for a human, redirect the customer to a human representative for further support. have them call the same WhatsApp number on the sim.\n\nMaintain a friendly, courteous, and professional tone\n\nhave a spartan tone and aviod any emojis be professional\n\nHere are the debit cards details:\nMeezan Bank\n\n25% Discount on Cards:\n• Visa Infinite Debit Card\n• Mastercard World Debit Card\n\nDiscount Cap: PKR 2,000\n\n20% Discount on Cards:\n• Visa Platinum Aura Card\n• Mastercard Platinum Debit Card\n• Visa Platinum Debit Card\n\nDiscount Cap: PKR 2,000\n\n15% Discount on Cards:\n• Visa Women Debit Card\n• Mastercard Titanium Debit Card\n\nDiscount Cap: PKR 2,000\n\n10% Discount on Cards:\n• Visa Gold Debit Card\n• Mastercard Classic Debit Card\n• Visa Silver Debit Card\n\nDiscount Cap: PKR 2,000\n\nDubai Islamic Bank\n\n50% Discount on Cards:\n• Visa Signature\n\nDiscount Cap: PKR 3,500\n\n30% Discount on Cards:\n• Visa Ayaan\n\nDiscount Cap: PKR 2,000\n\nZindigi (JS Bank)\n\n25% Cash Reward Terms & Conditions:\n• Zindigi customers: 25% cash reward, up to PKR 2,000 per month.\n• Non-Zindigi customers: 25% cash reward, up to PKR 500 (one-time).\n• Applicable on QR/Till ID payments at Zindigi RAAST merchants.\n• Cash reward will be posted on the next working day.\n\nAllied Bank\n\n40% Discount on Cards:\n• Premium Debit\n\nDiscount Cap: PKR 4,000\n\n20% Discount on Cards:\n• Platinum Debit\n• Titanium Debit\n\nDiscount Cap: PKR 2,000\n\nSamba Bank\n\n50% Discount on Cards:\n• Samba Gold Mastercard\n\nDiscount Cap: PKR 2,500\n\nGolootlo\nFlat 10% Off on 1st and 2nd slots only."
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "d449cc1c-0a79-4879-9ef4-8650bf49a264",
"name": "OpenAI-Chat-Modell",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
608,
160
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {
"maxTokens": 2000,
"temperature": 0.5
}
},
"typeVersion": 1.2
},
{
"id": "72fc3993-6e60-4e26-86f5-26a7476f5194",
"name": "Reservierung protokollieren",
"type": "n8n-nodes-base.googleSheetsTool",
"position": [
928,
144
],
"parameters": {
"columns": {
"value": {
"Date": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Date', `The date should be in the following format \"2025-06-09\" `, 'string') }}",
"Phone": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Phone', ``, 'string') }}",
"Guests": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Guests', ``, 'string') }}",
"Status": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Status', ``, 'string') }}",
"Timestamp": "={{ $now.format('yyyy-MM-dd-hh-mm')}}",
"Time slot ": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Time_slot_', `Time slot should be in the following format \"3:30 PM – 5:00 PM\"`, 'string') }}",
"CustomerName ": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('CustomerName_', ``, 'string') }}",
"ReservationID": "={{ `RES-${$now.setZone('Asia/Karachi').toFormat('yyLLdd-HHmm')}-${Math.random().toString(36).slice(2,8).toUpperCase()}` }}"
},
"schema": [
{
"id": "ReservationID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ReservationID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CustomerName ",
"type": "string",
"display": true,
"required": false,
"displayName": "CustomerName ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time slot ",
"type": "string",
"display": true,
"required": false,
"displayName": "Time slot ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Guests",
"type": "string",
"display": true,
"required": false,
"displayName": "Guests",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "HandledBY",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "HandledBY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Slot ID",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Slot ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notified ",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Notified ",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ReservationID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit#gid=0",
"cachedResultName": "Reservation"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit?usp=drivesdk",
"cachedResultName": "Carnival crm portal"
}
},
"typeVersion": 4.6
},
{
"id": "76ad7647-6d2a-43b9-ab5e-e4acde05798e",
"name": "Rechner",
"type": "@n8n/n8n-nodes-langchain.toolCalculator",
"position": [
832,
192
],
"parameters": {},
"typeVersion": 1
},
{
"id": "88d5a878-2804-468e-ab7a-0deb015e1f01",
"name": "Filter",
"type": "n8n-nodes-base.filter",
"position": [
304,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e231ce1b-505c-4006-acca-03deecad142a",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.messages[0].type }}",
"rightValue": "text"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6f6bbfef-1ce2-4547-ad15-4b8069b9c73b",
"name": "Simple Speicher",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
720,
224
],
"parameters": {
"sessionKey": "={{ $('Filter').item.json.messages[0].from }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "dfa06e51-a5c4-44dc-9587-a7fb2038e5a9",
"name": "Haftnotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-208,
-112
],
"parameters": {
"width": 400,
"height": 112,
"content": "Recivesd the messages via facebook developer app you have to create a business manager and a facebook developer app and connect your whatsaoo to it it will give you the cerdentails for it \n"
},
"typeVersion": 1
},
{
"id": "4da74bf1-8a1a-4931-9b04-c4ee506d0d71",
"name": "Haftnotiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
-96
],
"parameters": {
"width": 352,
"height": 80,
"content": "Filter the message based on only text you can setup any tyoe of filter here and sends it to ai agent the agent then froma reply \n"
},
"typeVersion": 1
},
{
"id": "0d4c2514-a7dc-4108-830c-d1f321771c4b",
"name": "Haftnotiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-96
],
"parameters": {
"height": 80,
"content": "Once the reply is formed, it routes the message back to the sender"
},
"typeVersion": 1
},
{
"id": "8c179aba-448c-40a9-a910-f71137771fd9",
"name": "Haftnotiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
336
],
"parameters": {
"width": 480,
"height": 80,
"content": "OpenAIis connected for the brain's simple memory for storing conversation, and it has two tools: a calculator for calculating discounts and a google sheet doc for storing reservation details. \n"
},
"typeVersion": 1
},
{
"id": "564f489c-51f4-45a6-8cb2-6af525237bc0",
"name": "Zeile(n) in Tabelle abrufen",
"type": "n8n-nodes-base.googleSheets",
"position": [
416,
768
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "Confirmed",
"lookupColumn": "Status"
},
{
"lookupColumn": "Notified "
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit#gid=0",
"cachedResultName": "Reservation"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit?usp=drivesdk",
"cachedResultName": "Carnival crm portal"
},
"combineFilters": "OR"
},
"typeVersion": 4.6
},
{
"id": "f19ea81b-3ee3-4f23-84fb-39e097276c10",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
192,
768
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "76261254-6c6c-4046-abd8-b627ecbc5ff3",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
656,
768
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "be57c9ee-4ec0-473e-8c35-ba8f907e024b",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "Confirmed "
}
]
}
},
"typeVersion": 2.2
},
{
"id": "006f1f50-9485-4db7-9f31-f92a2bc18ddc",
"name": "Nachricht senden1",
"type": "n8n-nodes-base.whatsApp",
"position": [
880,
864
],
"webhookId": "92d67f7b-ce29-4cbc-999d-f15a18e349a9",
"parameters": {
"textBody": "={{ $json['CustomerName '] }}, We regret to inform you your reservation on {{ $json.Date }} at slot {{ $json['Time slot '] }} Is rejected please conider another slot time, Thank you",
"operation": "send",
"phoneNumberId": "668904212970806",
"additionalFields": {},
"recipientPhoneNumber": "={{ $json.Phone.toString() }}"
},
"typeVersion": 1
},
{
"id": "d06c22b2-c5d5-4740-a394-8a78159c525c",
"name": "Zeile in Tabelle aktualisieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
1104,
672
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $('Get row(s) in sheet').item.json.Date }}",
"Notes": "={{ $('Get row(s) in sheet').item.json.Notes }}",
"Phone": "={{ $('Get row(s) in sheet').item.json.Phone }}",
"Guests": "={{ $('Get row(s) in sheet').item.json.Guests }}",
"Status": "={{ $('Get row(s) in sheet').item.json.Status }}",
"Slot ID": "={{ $('Get row(s) in sheet').item.json['Slot ID'] }}",
"HandledBY": "={{ $('Get row(s) in sheet').item.json.HandledBY }}",
"Notified ": "Yes",
"Timestamp": "={{ $('Get row(s) in sheet').item.json.Timestamp }}",
"Time slot ": "={{ $('Get row(s) in sheet').item.json['Time slot '] }}",
"CustomerName ": "={{ $('Get row(s) in sheet').item.json['CustomerName '] }}",
"ReservationID": "={{ $('Get row(s) in sheet').item.json.ReservationID }}"
},
"schema": [
{
"id": "ReservationID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ReservationID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CustomerName ",
"type": "string",
"display": true,
"required": false,
"displayName": "CustomerName ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time slot ",
"type": "string",
"display": true,
"required": false,
"displayName": "Time slot ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Guests",
"type": "string",
"display": true,
"required": false,
"displayName": "Guests",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "HandledBY",
"type": "string",
"display": true,
"required": false,
"displayName": "HandledBY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Slot ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Slot ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notified ",
"type": "string",
"display": true,
"required": false,
"displayName": "Notified ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ReservationID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit#gid=0",
"cachedResultName": "Reservation"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit?usp=drivesdk",
"cachedResultName": "Carnival crm portal"
}
},
"typeVersion": 4.6
},
{
"id": "813c220c-c340-4270-9f7d-7d7883944651",
"name": "Zeile in Tabelle aktualisieren1",
"type": "n8n-nodes-base.googleSheets",
"position": [
1104,
864
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $('Get row(s) in sheet').item.json.Date }}",
"Notes": "={{ $('Get row(s) in sheet').item.json.Notes }}",
"Phone": "={{ $('Get row(s) in sheet').item.json.Phone }}",
"Guests": "={{ $('Get row(s) in sheet').item.json.Guests }}",
"Status": "={{ $('Get row(s) in sheet').item.json.Status }}",
"Slot ID": "={{ $('Get row(s) in sheet').item.json['Slot ID'] }}",
"HandledBY": "={{ $('Get row(s) in sheet').item.json.HandledBY }}",
"Notified ": "Yes",
"Timestamp": "={{ $('Get row(s) in sheet').item.json.Timestamp }}",
"Time slot ": "={{ $('Get row(s) in sheet').item.json['Time slot '] }}",
"CustomerName ": "={{ $('Get row(s) in sheet').item.json['CustomerName '] }}",
"ReservationID": "={{ $('Get row(s) in sheet').item.json.ReservationID }}"
},
"schema": [
{
"id": "ReservationID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "ReservationID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CustomerName ",
"type": "string",
"display": true,
"required": false,
"displayName": "CustomerName ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time slot ",
"type": "string",
"display": true,
"required": false,
"displayName": "Time slot ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Guests",
"type": "string",
"display": true,
"required": false,
"displayName": "Guests",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "HandledBY",
"type": "string",
"display": true,
"required": false,
"displayName": "HandledBY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Slot ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Slot ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notified ",
"type": "string",
"display": true,
"required": false,
"displayName": "Notified ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"ReservationID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit#gid=0",
"cachedResultName": "Reservation"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1oG6mCFReg7CRgwjcnnSTSfy7u1TblEXVLuj3B_ElfiY/edit?usp=drivesdk",
"cachedResultName": "Carnival crm portal"
}
},
"typeVersion": 4.6
},
{
"id": "006c7ae0-9458-46f5-a256-d714027265bc",
"name": "Nachricht senden2",
"type": "n8n-nodes-base.whatsApp",
"position": [
880,
672
],
"webhookId": "9ec00d01-9bb2-475a-ab90-33d540f7f41a",
"parameters": {
"textBody": "={{ $json['CustomerName '] }},Your reservation at {{ $json.Date }} is confirmed. Looking forward to meet you at your desired slot time {{ $json['Time slot '] }}",
"operation": "send",
"phoneNumberId": "668904212970806",
"additionalFields": {},
"recipientPhoneNumber": "={{ $json.Phone.toString() }}"
},
"typeVersion": 1
},
{
"id": "b4f809cd-c1d7-4aeb-99ca-7fe3e19158dc",
"name": "Filter1",
"type": "n8n-nodes-base.filter",
"position": [
656,
928
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "bc063fbf-34db-46b0-976b-99be846fe228",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.Status }}",
"rightValue": "Rejected"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ad3c315a-e734-412d-b3e0-319ef98a8c69",
"name": "Haftnotiz4",
"type": "n8n-nodes-base.stickyNote",
"position": [
464,
-288
],
"parameters": {
"width": 352,
"height": 80,
"content": "# AI agent workflow "
},
"typeVersion": 1
},
{
"id": "ce7db6fb-0a3a-4892-ae4a-2b1571c5ce2e",
"name": "Haftnotiz5",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
592
],
"parameters": {
"width": 624,
"height": 80,
"content": "# reservation Confirmatrion workflow "
},
"typeVersion": 1
},
{
"id": "44e79618-822c-4318-8199-f445c2defb8f",
"name": "Haftnotiz6",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
1072
],
"parameters": {
"width": 832,
"height": 128,
"content": "This workflow has a schedule trigger; it runs on a specific time you choose it gets the data from the sheets and decides it has built-in logic if the status is confirmation not sent, it plucks all the reservations and, based on their status, sends a message to the user the if module decided if the reservation is confirmed or rejected and sends it the the relevant field. "
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"76261254-6c6c-4046-abd8-b627ecbc5ff3": {
"main": [
[
{
"node": "006c7ae0-9458-46f5-a256-d714027265bc",
"type": "main",
"index": 0
}
],
[
{
"node": "b4f809cd-c1d7-4aeb-99ca-7fe3e19158dc",
"type": "main",
"index": 0
}
]
]
},
"88d5a878-2804-468e-ab7a-0deb015e1f01": {
"main": [
[
{
"node": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"type": "main",
"index": 0
}
]
]
},
"b4f809cd-c1d7-4aeb-99ca-7fe3e19158dc": {
"main": [
[
{
"node": "006f1f50-9485-4db7-9f31-f92a2bc18ddc",
"type": "main",
"index": 0
}
]
]
},
"a2b3e9f9-cde6-41d9-87c9-e6f571df2a67": {
"main": [
[
{
"node": "5fc9e0fb-70c7-4a69-b24b-7c791f4b3bf1",
"type": "main",
"index": 0
}
]
]
},
"76ad7647-6d2a-43b9-ab5e-e4acde05798e": {
"ai_tool": [
[
{
"node": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"type": "ai_tool",
"index": 0
}
]
]
},
"006f1f50-9485-4db7-9f31-f92a2bc18ddc": {
"main": [
[
{
"node": "813c220c-c340-4270-9f7d-7d7883944651",
"type": "main",
"index": 0
}
]
]
},
"006c7ae0-9458-46f5-a256-d714027265bc": {
"main": [
[
{
"node": "d06c22b2-c5d5-4740-a394-8a78159c525c",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"type": "ai_memory",
"index": 0
}
]
]
},
"72fc3993-6e60-4e26-86f5-26a7476f5194": {
"ai_tool": [
[
{
"node": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"type": "ai_tool",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "564f489c-51f4-45a6-8cb2-6af525237bc0",
"type": "main",
"index": 0
}
]
]
},
"250d747c-a938-47c6-92a7-5bba1b430ca7": {
"main": [
[
{
"node": "88d5a878-2804-468e-ab7a-0deb015e1f01",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "a2b3e9f9-cde6-41d9-87c9-e6f571df2a67",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"564f489c-51f4-45a6-8cb2-6af525237bc0": {
"main": [
[
{
"node": "76261254-6c6c-4046-abd8-b627ecbc5ff3",
"type": "main",
"index": 0
}
]
]
}
}
}Häufig gestellte Fragen
Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Experte - Support-Chatbot, KI-Chatbot
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
n8n-Knoten in der visuellen Referenzbibliothek erkunden
Erkundung von n8n-Knoten in der visuellen Referenzbibliothek
If
Ftp
Set
+
If
Ftp
Set
113 NodesI versus AI
Sonstiges
Fortgeschrittener mehragenter KI-Assistant (250+ Aufgabenfähigkeit, WhatsApp + GPT)
Fortgeschrittener multi-Agenten-KI-Assistent (250+ Aufgabenfähigkeit, WhatsApp + GPT)
Set
Switch
Whats App
+
Set
Switch
Whats App
213 NodesElectrabot
Persönliche Produktivität
AI-Powered MIS Agent
If
Set
Code
+
If
Set
Code
129 NodesKumar Shivam
Support
J.A.R.V.I.S.
Ein umfassender multimodaler Assistent auf Telegram mit OpenAI, SERP und Vektorspeicher erstellen
If
Set
Code
+
If
Set
Code
48 NodesFabioInTech
Support-Chatbot
Arzttermin-Verwaltungssystem basierend auf Gemini KI, WhatsApp, Stripe und Google Sheets
Arztterminverwaltungssystem basierend auf Gemini AI, WhatsApp, Stripe und Google Sheets
If
Whats App
Http Request
+
If
Whats App
Http Request
43 NodesGreatStack
Content-Erstellung
Hotels Rezeption WhatsApp Empfangssystem
Hotel-Rezeptionssystem mit integriertem WhatsApp, Gemini-Modell-Wechsel, Redis und Google Sheets
Code
Redis
Whats App
+
Code
Redis
Whats App
18 NodesAkshay
Support-Chatbot
Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes23
Kategorie2
Node-Typen12
Autor
Basil Irfan
@basilExterne Links
Auf n8n.io ansehen →
Diesen Workflow teilen