This workflow corresponds to n8n.io template #9811 — we link there as the canonical source.
This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "677688aa-5527-47f8-a43e-4663d4aa751d",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2080,
-576
],
"parameters": {
"color": 4,
"width": 340,
"height": 628,
"content": "## \ud83c\udfe8 Hotel Guest Feedback Workflow\n\n**Purpose:** Capture guest feedback during stay and automate service recovery to prevent negative reviews\n\n**Key Features:**\n- Real-time sentiment analysis\n- Automatic escalation for critical issues\n- Personalized service recovery offers\n- PMS ticket creation\n- Analytics tracking\n\n**ROI:** 60% reduction in negative reviews"
},
"typeVersion": 1
},
{
"id": "b1cb131a-deec-4dbb-85b6-4951270ebd39",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1728,
-560
],
"parameters": {
"color": 5,
"width": 300,
"height": 612,
"content": "## \ud83d\udcdd Jotform Fields Expected:\n- Guest Name (q3_guestName)\n- Guest Email (q4_guestEmail)\n- Room Number (q5_roomNumber)\n- Stay Dates (q6_stayDates)\n- Overall Rating (q7_overallRating)\n- Feedback Comments (q8_feedbackComments)\n- Service Area (q9_serviceArea)\nCreate your form for free on [Jotform using this link](https://www.jotform.com/?partner=mediajade)"
},
"typeVersion": 1
},
{
"id": "01d5b54a-5292-4324-ab05-37568464ae5f",
"name": "Extract Feedback Data",
"type": "n8n-nodes-base.set",
"position": [
-1616,
-224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "guest_name",
"name": "guestName",
"type": "string",
"value": "={{ $json.rawRequest['q3_guestName'] }}"
},
{
"id": "guest_email",
"name": "guestEmail",
"type": "string",
"value": "={{ $json.rawRequest['q4_guestEmail'] }}"
},
{
"id": "room_number",
"name": "roomNumber",
"type": "string",
"value": "={{ $json.rawRequest['q5_roomNumber'] }}"
},
{
"id": "stay_dates",
"name": "stayDates",
"type": "string",
"value": "={{ $json.rawRequest['q6_stayDates'] }}"
},
{
"id": "overall_rating",
"name": "overallRating",
"type": "number",
"value": "={{ $json.rawRequest['q7_overallRating'] }}"
},
{
"id": "feedback_text",
"name": "feedbackText",
"type": "string",
"value": "={{ $json.rawRequest['q8_feedbackComments'] }}"
},
{
"id": "service_area",
"name": "serviceArea",
"type": "string",
"value": "={{ $json.rawRequest['q9_serviceArea'] }}"
},
{
"id": "submission_id",
"name": "submissionId",
"type": "string",
"value": "={{ $json.submissionID }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "e2f49cfe-6934-4ad5-b15e-e10f819dc4e2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1408,
-512
],
"parameters": {
"color": 6,
"width": 516,
"height": 584,
"content": "## \ud83e\udd16 AI Sentiment Analysis\n\n**Analyzes:**\n- Sentiment (positive/neutral/negative)\n- Urgency level\n- Key issues & emotional tone\n- Reputation impact\n- Recommended recovery actions\n\nProvides structured JSON output for routing"
},
"typeVersion": 1
},
{
"id": "464b37fe-04a7-4c40-b7e5-f734dd0ab0cb",
"name": "AI Sentiment Analysis",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1360,
-224
],
"parameters": {
"text": "=Analyze the following hotel guest feedback and provide a comprehensive sentiment analysis:\n\nGuest Name: {{ $json.guestName }}\nRoom Number: {{ $json.roomNumber }}\nOverall Rating: {{ $json.overallRating }}/5\nService Area: {{ $json.serviceArea }}\nFeedback: {{ $json.feedbackText }}\n\nProvide your analysis in the following JSON format:\n{\n \"sentiment\": \"positive/neutral/negative\",\n \"sentimentScore\": 0-100,\n \"urgencyLevel\": \"low/medium/high/critical\",\n \"keyIssues\": [\"issue1\", \"issue2\"],\n \"emotionalTone\": \"description\",\n \"requiresImmediateAction\": true/false,\n \"suggestedRecoveryAction\": \"specific recommendation\",\n \"estimatedImpactOnReputation\": \"low/medium/high\",\n \"categories\": [\"cleanliness\", \"staff\", \"amenities\", etc.],\n \"summary\": \"brief summary of the feedback\"\n}",
"agent": "conversationalAgent",
"options": {
"systemMessage": "You are an expert hotel service quality analyst specializing in guest sentiment analysis and service recovery. Analyze feedback objectively and provide actionable insights for hotel management."
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "7efcf747-a8e0-4524-affe-d54430e68091",
"name": "Parse AI Response",
"type": "n8n-nodes-base.set",
"position": [
-1056,
-224
],
"parameters": {
"mode": "expressionData",
"options": {}
},
"typeVersion": 3.3
},
{
"id": "65108ee9-9ec6-42aa-b415-ead349eb7cdc",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
-608
],
"parameters": {
"color": 7,
"width": 320,
"height": 292,
"content": "## \ud83d\udea8 Urgency Check\n\n**Routes critical/high urgency issues to:**\n- Hotel Manager (Gmail)\n- Slack notification\n\n**Triggers when:**\n- Urgency = critical/high\n- Requires immediate action = true"
},
"typeVersion": 1
},
{
"id": "1c4a95f8-fe51-4ff8-b58e-2b2e7abf6334",
"name": "Check Urgency Level",
"type": "n8n-nodes-base.if",
"position": [
-752,
-384
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "critical_issue",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.urgencyLevel }}",
"rightValue": "critical"
},
{
"id": "high_urgency",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.urgencyLevel }}",
"rightValue": "high"
},
{
"id": "immediate_action",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.requiresImmediateAction }}",
"rightValue": true
}
]
}
},
"typeVersion": 2
},
{
"id": "da63da8b-5d77-4321-b0c4-0f6c9833889f",
"name": "Alert Manager - Urgent (Gmail)",
"type": "n8n-nodes-base.gmail",
"position": [
-208,
-576
],
"parameters": {
"sendTo": "user@example.com",
"message": "=<h2 style='color: #d32f2f;'>Critical Guest Feedback Alert</h2>\n\n<div style='background-color: #fff3e0; padding: 15px; border-left: 4px solid #ff9800;'>\n<strong>Guest Information:</strong><br>\nName: {{ $('Extract Feedback Data').item.json.guestName }}<br>\nRoom: {{ $('Extract Feedback Data').item.json.roomNumber }}<br>\nEmail: {{ $('Extract Feedback Data').item.json.guestEmail }}<br>\nStay Dates: {{ $('Extract Feedback Data').item.json.stayDates }}<br>\nRating: {{ $('Extract Feedback Data').item.json.overallRating }}/5\n</div>\n\n<div style='background-color: #ffebee; padding: 15px; margin-top: 15px;'>\n<strong>Sentiment Analysis:</strong><br>\nSentiment: {{ $json.sentiment }} (Score: {{ $json.sentimentScore }}/100)<br>\nUrgency Level: <span style='color: #d32f2f; font-weight: bold;'>{{ $json.urgencyLevel }}</span><br>\nReputation Impact: {{ $json.estimatedImpactOnReputation }}\n</div>\n\n<div style='padding: 15px; margin-top: 15px; background-color: #f5f5f5;'>\n<strong>Key Issues Identified:</strong><br>\n{{ $json.keyIssues.join(', ') }}\n</div>\n\n<div style='padding: 15px; margin-top: 15px;'>\n<strong>Guest Feedback:</strong><br>\n<em>{{ $('Extract Feedback Data').item.json.feedbackText }}</em>\n</div>\n\n<div style='background-color: #e8f5e9; padding: 15px; margin-top: 15px;'>\n<strong>AI Suggested Recovery Action:</strong><br>\n{{ $json.suggestedRecoveryAction }}\n</div>\n\n<p style='margin-top: 20px;'><strong>\u26a0\ufe0f Action Required:</strong> Please contact the guest immediately to address their concerns and prevent potential negative online reviews.</p>\n\n<p style='color: #666; font-size: 12px; margin-top: 30px;'>Submission ID: {{ $('Extract Feedback Data').item.json.submissionId }}</p>",
"options": {
"ccList": "user@example.com"
},
"subject": "=\ud83d\udea8 URGENT: Guest Feedback Requires Immediate Action - Room {{ $('Extract Feedback Data').item.json.roomNumber }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "af0bf2f2-02bf-4d46-b622-13ce04b97acd",
"name": "Slack Notification",
"type": "n8n-nodes-base.httpRequest",
"position": [
-192,
-416
],
"parameters": {
"url": "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "application/json"
},
"typeVersion": 4.2
},
{
"id": "b9e17aa8-d1c5-4ab0-8326-8aa1a5ef90f9",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-880,
-304
],
"parameters": {
"color": 3,
"width": 292,
"height": 324,
"content": "## \ud83d\udd04 Service Recovery Check\n\n**Triggers recovery flow when:**\n- Sentiment = negative\n- Rating \u2264 3 stars\n\n**Actions:**\n- Generate AI recovery offer\n- Send personalized email\n- Create PMS ticket"
},
"typeVersion": 1
},
{
"id": "a00249ab-1f13-41bf-bbdc-9a5a93d23244",
"name": "Check Service Recovery Needed",
"type": "n8n-nodes-base.if",
"position": [
-576,
-176
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "negative_sentiment",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.sentiment }}",
"rightValue": "negative"
},
{
"id": "low_rating",
"operator": {
"type": "number",
"operation": "lte"
},
"leftValue": "={{ $('Extract Feedback Data').item.json.overallRating }}",
"rightValue": 3
}
]
}
},
"typeVersion": 2
},
{
"id": "81a2fc7f-3add-4b20-84ab-1d5722a41c20",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
-272
],
"parameters": {
"color": 2,
"width": 360,
"height": 408,
"content": "## \ud83c\udf81 AI Recovery Offer Generator\n\n**Generates personalized offers:**\n- Discount percentages\n- Room upgrades\n- Complimentary services\n- Future stay credits\n\n**Based on:**\n- Issue severity\n- Guest emotional state\n- Long-term value potential"
},
"typeVersion": 1
},
{
"id": "e90d1035-95f0-4479-ab1a-5de22d779eec",
"name": "Generate Recovery Offer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-48,
-112
],
"parameters": {
"text": "=Based on the guest feedback analysis, generate a personalized service recovery offer:\n\nGuest: {{ $('Extract Feedback Data').item.json.guestName }}\nRating: {{ $('Extract Feedback Data').item.json.overallRating }}/5\nSentiment Score: {{ $('Parse AI Response').item.json.sentimentScore }}/100\nKey Issues: {{ $('Parse AI Response').item.json.keyIssues.join(', ') }}\nService Area: {{ $('Extract Feedback Data').item.json.serviceArea }}\n\nGenerate a service recovery package in JSON format:\n{\n \"offerType\": \"discount/upgrade/complimentary/credit\",\n \"offerValue\": \"specific value or percentage\",\n \"offerDescription\": \"detailed description\",\n \"emailSubject\": \"personalized subject line\",\n \"emailBody\": \"personalized apology and offer email (HTML formatted)\",\n \"validityPeriod\": \"number of days/months\",\n \"additionalPerks\": [\"perk1\", \"perk2\"]\n}\n\nConsider:\n- Severity of issues\n- Guest's emotional state\n- Potential long-term value\n- Service recovery best practices",
"agent": "conversationalAgent",
"options": {
"systemMessage": "You are a hotel guest relations expert specializing in service recovery. Create compelling, personalized recovery offers that turn negative experiences into opportunities for guest loyalty."
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "33b27d78-dd49-4efc-ba5d-2dc27dd9255f",
"name": "Parse Recovery Offer",
"type": "n8n-nodes-base.set",
"position": [
304,
-128
],
"parameters": {
"mode": "expressionData",
"options": {}
},
"typeVersion": 3.3
},
{
"id": "c6d3c845-bd20-4ece-b58a-d61396d334e1",
"name": "Send Recovery Email (Gmail)",
"type": "n8n-nodes-base.gmail",
"position": [
512,
-32
],
"parameters": {
"sendTo": "={{ $('Extract Feedback Data').item.json.guestEmail }}",
"message": "={{ $json.emailBody }}",
"options": {},
"subject": "={{ $json.emailSubject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "89034d72-fd20-4c0d-bf17-f26ff27b4981",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
96
],
"parameters": {
"width": 320,
"content": "## \ud83c\udfab PMS Ticket Creation\n\n**Creates ticket with:**\n- Guest details\n- Sentiment analysis\n- Key issues\n- Priority level\n- Suggested actions\n\nIntegrates with your Property Management System"
},
"typeVersion": 1
},
{
"id": "fc279e1f-dc7b-4f97-8580-f4e3124d67b1",
"name": "Create PMS Ticket",
"type": "n8n-nodes-base.httpRequest",
"position": [
208,
144
],
"parameters": {
"url": "https://your-pms-system.com/api/tickets",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "application/json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "ca8a3c86-ad8d-4ca9-8b99-4efd3348cd7b",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
-16
],
"parameters": {
"color": 5,
"width": 320,
"height": 368,
"content": "## \u2b50 Positive Feedback Handler\n\n**For ratings \u2265 4 and positive sentiment:**\n- Send thank you email\n- Request online review\n- Offer return guest discount\n\n**Turns happy guests into brand advocates**"
},
"typeVersion": 1
},
{
"id": "e03a7af4-5657-40a9-bd20-27465000338c",
"name": "Check Positive Feedback",
"type": "n8n-nodes-base.if",
"position": [
-432,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "positive_feedback",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Parse AI Response').item.json.sentiment }}",
"rightValue": "positive"
},
{
"id": "high_rating",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $('Extract Feedback Data').item.json.overallRating }}",
"rightValue": 4
}
]
}
},
"typeVersion": 2
},
{
"id": "89c1eb9d-35ba-4bfe-ab18-7876e99866ec",
"name": "Send Thank You Email (Gmail)",
"type": "n8n-nodes-base.gmail",
"position": [
-176,
208
],
"parameters": {
"sendTo": "={{ $('Extract Feedback Data').item.json.guestEmail }}",
"message": "=<div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;'>\n <h2 style='color: #2e7d32;'>Dear {{ $('Extract Feedback Data').item.json.guestName }},</h2>\n \n <p>Thank you so much for taking the time to share your positive experience with us! Your kind words truly brighten our day and motivate our entire team.</p>\n \n <div style='background-color: #e8f5e9; padding: 15px; border-left: 4px solid #4caf50; margin: 20px 0;'>\n <strong>Your Rating:</strong> {{ $('Extract Feedback Data').item.json.overallRating }}/5 \u2b50\n </div>\n \n <p>We're thrilled that you enjoyed your stay with us. Guests like you make our work truly rewarding!</p>\n \n <p><strong>Would you mind sharing your experience online?</strong><br>\nYour review would help other travelers discover our hotel. You can leave a review on:</p>\n \n <ul>\n <li><a href='https://www.google.com/search?q=YOUR_HOTEL_NAME' style='color: #1976d2;'>Google Reviews</a></li>\n <li><a href='https://www.tripadvisor.com/YOUR_HOTEL' style='color: #1976d2;'>TripAdvisor</a></li>\n <li><a href='https://www.booking.com/YOUR_HOTEL' style='color: #1976d2;'>Booking.com</a></li>\n </ul>\n \n <div style='background-color: #fff3e0; padding: 15px; margin: 20px 0; border-radius: 5px;'>\n <strong>\ud83c\udf81 Special Return Guest Offer:</strong><br>\n As a token of our appreciation, enjoy <strong>15% off</strong> your next stay! Use code: <strong>WELCOME-BACK-2025</strong>\n </div>\n \n <p>We look forward to welcoming you back soon!</p>\n \n <p style='margin-top: 30px;'>Warm regards,<br>\n <strong>Guest Relations Team</strong><br>\n Your Hotel Name</p>\n \n <hr style='border: none; border-top: 1px solid #e0e0e0; margin: 30px 0;'>\n <p style='color: #666; font-size: 12px;'>This email was sent in response to your recent feedback. If you have any questions, please contact us at guestrelations@yourhotel.com</p>\n</div>",
"options": {},
"subject": "=Thank You for Your Wonderful Feedback, {{ $('Extract Feedback Data').item.json.guestName }}!"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cf378548-3922-4b2f-ab34-629f62bc353d",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
224,
-576
],
"parameters": {
"color": 4,
"width": 360,
"height": 220,
"content": "## \ud83d\udcca Analytics & Tracking\n\n**Logs all feedback to Google Sheets:**\n- Timestamp & submission details\n- Guest information\n- Ratings & sentiment scores\n- Key issues & categories\n- Recovery actions taken\n\n**Enables:**\n- Trend analysis\n- Performance tracking\n- Staff training insights"
},
"typeVersion": 1
},
{
"id": "88b54124-f4cd-4378-b5aa-a1ea7dc4454a",
"name": "Log to Analytics Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
288,
-368
],
"parameters": {
"columns": {
"value": {
"guestName": "={{ $('Extract Feedback Data').item.json.guestName }}",
"keyIssues": "={{ $('Parse AI Response').item.json.keyIssues.join('; ') }}",
"sentiment": "={{ $('Parse AI Response').item.json.sentiment }}",
"stayDates": "={{ $('Extract Feedback Data').item.json.stayDates }}",
"timestamp": "={{ $now.toISO() }}",
"categories": "={{ $('Parse AI Response').item.json.categories.join('; ') }}",
"roomNumber": "={{ $('Extract Feedback Data').item.json.roomNumber }}",
"serviceArea": "={{ $('Extract Feedback Data').item.json.serviceArea }}",
"feedbackText": "={{ $('Extract Feedback Data').item.json.feedbackText }}",
"submissionId": "={{ $('Extract Feedback Data').item.json.submissionId }}",
"urgencyLevel": "={{ $('Parse AI Response').item.json.urgencyLevel }}",
"overallRating": "={{ $('Extract Feedback Data').item.json.overallRating }}",
"sentimentScore": "={{ $('Parse AI Response').item.json.sentimentScore }}",
"reputationImpact": "={{ $('Parse AI Response').item.json.estimatedImpactOnReputation }}",
"recoveryOfferSent": "={{ $('Check Service Recovery Needed').item.json.sentiment === 'negative' ? 'Yes' : 'No' }}"
},
"mappingMode": "defineBelow"
},
"options": {
"useAppend": true,
"cellFormat": "USER_ENTERED"
},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Guest Feedback Analytics"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.4
},
{
"id": "37366028-699f-4024-a9c7-0791808cd7da",
"name": "Jotorm Trigger",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
-2032,
-128
],
"parameters": {
"form": "252862984356471"
},
"credentials": {
"jotFormApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "64b3fab6-694a-4088-800f-0b4b5e100a11",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1360,
-32
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "7a0aa518-e312-48d4-928f-911a55cff2f1",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-48,
48
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
}
],
"connections": {
"Jotorm Trigger": {
"main": [
[
{
"node": "Extract Feedback Data",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Sentiment Analysis",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse AI Response": {
"main": [
[
{
"node": "Check Urgency Level",
"type": "main",
"index": 0
},
{
"node": "Check Service Recovery Needed",
"type": "main",
"index": 0
},
{
"node": "Check Positive Feedback",
"type": "main",
"index": 0
},
{
"node": "Log to Analytics Sheet",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Generate Recovery Offer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Check Urgency Level": {
"main": [
[
{
"node": "Alert Manager - Urgent (Gmail)",
"type": "main",
"index": 0
},
{
"node": "Slack Notification",
"type": "main",
"index": 0
}
]
]
},
"Parse Recovery Offer": {
"main": [
[
{
"node": "Send Recovery Email (Gmail)",
"type": "main",
"index": 0
}
]
]
},
"AI Sentiment Analysis": {
"main": [
[
{
"node": "Parse AI Response",
"type": "main",
"index": 0
}
]
]
},
"Extract Feedback Data": {
"main": [
[
{
"node": "AI Sentiment Analysis",
"type": "main",
"index": 0
}
]
]
},
"Check Positive Feedback": {
"main": [
[
{
"node": "Send Thank You Email (Gmail)",
"type": "main",
"index": 0
}
]
]
},
"Generate Recovery Offer": {
"main": [
[
{
"node": "Parse Recovery Offer",
"type": "main",
"index": 0
}
]
]
},
"Check Service Recovery Needed": {
"main": [
[
{
"node": "Generate Recovery Offer",
"type": "main",
"index": 0
},
{
"node": "Create PMS Ticket",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleSheetsOAuth2ApijotFormApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Transform guest complaints into loyalty opportunities - achieving 60% reduction in negative reviews, 85% faster service recovery, and turning dissatisfied guests into brand advocates through AI-powered sentiment analysis and automated response workflows.
Source: https://n8n.io/workflows/9811/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Transform patient intake from paperwork chaos into intelligent, automated triage that detects emergencies, prepares providers with comprehensive briefs, and streamlines scheduling—improving patient sa
Revolutionize your recruitment process with intelligent AI-driven candidate screening that evaluates resumes, scores applicants, and automatically routes them based on fit - saving 10-15 hours per wee
Transform lead chaos into systematic qualification and instant routing - achieving 5-minute response times, 300% conversion increase, and eliminating sales team conflicts through AI-powered BANT scori
This template automates the entire appointment request lifecycle using AI. When someone submits an appointment request through JotForm, the system automatically sends details for approval, generates p
Want to skip the manual work and instantly generate SWOT analyses for your business plans, investor decks, or strategy docs? 🚀 This workflow lets you automate the entire SWOT (Strengths, Weaknesses, O