This workflow corresponds to n8n.io template #10184 — 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 →
{
"id": "wDPgvREnPGzo267x",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI Customer Support Triage & Summarization System",
"tags": [],
"nodes": [
{
"id": "40bab90c-06e8-400e-ba35-d629ab529144",
"name": "Inbound Trigger (Email/Form/Chat)",
"type": "n8n-nodes-base.webhook",
"position": [
928,
1664
],
"parameters": {
"path": "support-intake",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2.1
},
{
"id": "94f25509-3536-4eaa-8e30-bb0d3d2bcb3a",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
1152,
1664
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "technicalSlackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Technical Slack Channel ID__>"
},
{
"id": "id-2",
"name": "billingSlackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Billing Slack Channel ID__>"
},
{
"id": "id-3",
"name": "generalSlackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__General Slack Channel ID__>"
},
{
"id": "id-4",
"name": "urgentSlackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Urgent Slack Channel ID__>"
},
{
"id": "id-5",
"name": "crmApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__CRM API Endpoint URL__>"
},
{
"id": "id-6",
"name": "googleSheetId",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Google Sheet ID__>"
},
{
"id": "id-7",
"name": "slaThresholdHours",
"type": "number",
"value": 24
},
{
"id": "id-8",
"name": "urgencyThreshold",
"type": "number",
"value": 4
},
{
"id": "id-9",
"name": "supportPortalUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Support Portal URL__>"
},
{
"id": "id-10",
"name": "companyName",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Company Name__>"
},
{
"id": "id-11",
"name": "supportEmail",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Support Email Address__>"
},
{
"id": "id-12",
"name": "standardSlaHours",
"type": "number",
"value": 48
},
{
"id": "id-13",
"name": "prioritySlaHours",
"type": "number",
"value": 24
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "6df1111d-ada7-4877-8f7c-e8499e9138ee",
"name": "Extract Customer Data",
"type": "n8n-nodes-base.set",
"position": [
1376,
1664
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "customerName",
"type": "string",
"value": "={{ $json.body.name || $json.body.from_name || 'Unknown' }}"
},
{
"id": "id-2",
"name": "customerEmail",
"type": "string",
"value": "={{ $json.body.email || $json.body.from_email || '' }}"
},
{
"id": "id-3",
"name": "product",
"type": "string",
"value": "={{ $json.body.product || $json.body.subject || '' }}"
},
{
"id": "id-4",
"name": "issueType",
"type": "string",
"value": "={{ $json.body.issue_type || $json.body.category || '' }}"
},
{
"id": "id-5",
"name": "rawMessage",
"type": "string",
"value": "={{ $json.body.message || $json.body.text || $json.body.content || '' }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "754686ef-a5a9-4158-9eee-be35c091b5f1",
"name": "AI Triage & Summarization Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1600,
1664
],
"parameters": {
"text": "=You are a customer support triage assistant. Analyze the customer inquiry and provide:\n\n1. A concise summary (max 200 words)\n2. Classification: technical, billing, general, or urgent\n3. Urgency score (1-5, where 5 is most urgent)\n4. Suggested next action\n\nCustomer Details:\nName: {{ $json.customerName }}\nEmail: {{ $json.customerEmail }}\nProduct: {{ $json.product }}\nIssue Type: {{ $json.issueType }}\nMessage: {{ $json.rawMessage }}\n\nProvide structured output with fields: summary, classification, urgency, nextAction",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "471ce97b-249c-4061-bdc1-be65d3d7e014",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1600,
1888
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {},
"typeVersion": 1.2
},
{
"id": "097c80f5-3577-4b45-985e-ef073c3a55f3",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1728,
1888
],
"parameters": {
"jsonSchemaExample": "{\n\t\"summary\": \"Brief summary of the customer issue (max 200 words)\",\n\t\"classification\": \"technical\",\n\t\"urgency\": 3,\n\t\"nextAction\": \"Recommended next action for support team\"\n}"
},
"typeVersion": 1.3
},
{
"id": "b97cd4c8-8dbe-434b-b47b-4ca4c9608218",
"name": "Route by Classification",
"type": "n8n-nodes-base.switch",
"position": [
1952,
1632
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "technical",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.classification }}",
"rightValue": "technical"
}
]
},
"renameOutput": true
},
{
"outputKey": "billing",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.classification }}",
"rightValue": "billing"
}
]
},
"renameOutput": true
},
{
"outputKey": "general",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.classification }}",
"rightValue": "general"
}
]
},
"renameOutput": true
},
{
"outputKey": "urgent",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.classification }}",
"rightValue": "urgent"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "27af38f5-7f57-48b0-9933-2f14fb492ba1",
"name": "Post to Technical Slack",
"type": "n8n-nodes-base.slack",
"position": [
2176,
1376
],
"parameters": {
"text": "=*New Technical Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.technicalSlackChannel }}"
},
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "22546b0f-d5e9-4f7a-b569-612df6d66721",
"name": "Post to Billing Slack",
"type": "n8n-nodes-base.slack",
"position": [
2176,
1568
],
"parameters": {
"text": "=*New Billing Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.billingSlackChannel }}"
},
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "397fc082-4440-47a2-a6a7-602471bf1485",
"name": "Post to General Slack",
"type": "n8n-nodes-base.slack",
"position": [
2176,
1760
],
"parameters": {
"text": "=*New General Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.generalSlackChannel }}"
},
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "96528838-d29c-497d-a221-b2b4c9025a5d",
"name": "Post to Urgent Slack",
"type": "n8n-nodes-base.slack",
"position": [
2176,
1952
],
"parameters": {
"text": "=*\ud83d\udea8 URGENT Support Ticket \ud83d\udea8*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.urgentSlackChannel }}"
},
"otherOptions": {
"includeLinkToWorkflow": true
}
},
"typeVersion": 2.3
},
{
"id": "b8aa6a61-7439-4af7-8dcd-00283d0684f8",
"name": "Create CRM Task (Technical)",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
1376
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={{ {\n \"customer_name\": $json.customerName,\n \"customer_email\": $json.customerEmail,\n \"product\": $json.product,\n \"classification\": \"technical\",\n \"urgency\": $json.urgency,\n \"summary\": $json.summary,\n \"next_action\": $json.nextAction,\n \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "ddb40ba2-945a-4f0f-ad46-ef46eb2d852a",
"name": "Create CRM Task (Billing)",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
1568
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={{ {\n \"customer_name\": $json.customerName,\n \"customer_email\": $json.customerEmail,\n \"product\": $json.product,\n \"classification\": \"billing\",\n \"urgency\": $json.urgency,\n \"summary\": $json.summary,\n \"next_action\": $json.nextAction,\n \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8b8e2540-5dd7-4ec1-bc5d-d7e8d4c80ac7",
"name": "Create CRM Task (General)",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
1760
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={{ {\n \"customer_name\": $json.customerName,\n \"customer_email\": $json.customerEmail,\n \"product\": $json.product,\n \"classification\": \"general\",\n \"urgency\": $json.urgency,\n \"summary\": $json.summary,\n \"next_action\": $json.nextAction,\n \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8e57b175-aca0-4c67-82dc-10f2bfd245eb",
"name": "Create CRM Task (Urgent)",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
1952
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={\n \"customer_name\": \"{{ $json.customerName }}\",\n \"customer_email\": \"{{ $json.customerEmail }}\",\n \"product\": \"{{ $json.product }}\",\n \"classification\": \"urgent\",\n \"urgency\": {{ $json.urgency }},\n \"summary\": \"{{ $json.summary }}\",\n \"next_action\": \"{{ $json.nextAction }}\",\n \"sla_hours\": {{ $('Workflow Configuration').first().json.slaThresholdHours }}\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "1fcfd918-bdb5-4ce3-b038-cab9cfa2c433",
"name": "Log to Google Sheets (Technical)",
"type": "n8n-nodes-base.googleSheets",
"position": [
2624,
1376
],
"parameters": {
"columns": {
"value": {
"Product": "={{ $json.product }}",
"Summary": "={{ $json.summary }}",
"Urgency": "={{ $json.urgency }}",
"Timestamp": "={{ $now.toISO() }}",
"Next Action": "={{ $json.nextAction }}",
"Customer Name": "={{ $json.customerName }}",
"Classification": "technical",
"Customer Email": "={{ $json.customerEmail }}"
},
"schema": [
{
"id": "Timestamp",
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Name",
"required": false,
"displayName": "Customer Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Email",
"required": false,
"displayName": "Customer Email",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "Product",
"required": false,
"displayName": "Product",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Classification",
"required": false,
"displayName": "Classification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Next Action",
"required": false,
"displayName": "Next Action",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Customer Email"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Support Tickets"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "dfecf8ef-ce60-4fa0-b944-529a637ce06b",
"name": "Log to Google Sheets (Billing)",
"type": "n8n-nodes-base.googleSheets",
"position": [
2624,
1568
],
"parameters": {
"columns": {
"value": {
"Product": "={{ $json.product }}",
"Summary": "={{ $json.summary }}",
"Urgency": "={{ $json.urgency }}",
"Timestamp": "={{ $now.toISO() }}",
"Next Action": "={{ $json.nextAction }}",
"Customer Name": "={{ $json.customerName }}",
"Classification": "billing",
"Customer Email": "={{ $json.customerEmail }}"
},
"schema": [
{
"id": "Timestamp",
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Name",
"required": false,
"displayName": "Customer Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Email",
"required": false,
"displayName": "Customer Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product",
"required": false,
"displayName": "Product",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Classification",
"required": false,
"displayName": "Classification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Next Action",
"required": false,
"displayName": "Next Action",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Timestamp"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Support Tickets"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "c492c5b8-8caa-422a-b291-be06512b1810",
"name": "Log to Google Sheets (General)",
"type": "n8n-nodes-base.googleSheets",
"position": [
2624,
1760
],
"parameters": {
"columns": {
"value": {
"Product": "={{ $json.product }}",
"Summary": "={{ $json.summary }}",
"Urgency": "={{ $json.urgency }}",
"Timestamp": "={{ $now.toISO() }}",
"Next Action": "={{ $json.nextAction }}",
"Customer Name": "={{ $json.customerName }}",
"Classification": "general",
"Customer Email": "={{ $json.customerEmail }}"
},
"schema": [
{
"id": "Timestamp",
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Name",
"required": false,
"displayName": "Customer Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Email",
"required": false,
"displayName": "Customer Email",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "Product",
"required": false,
"displayName": "Product",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Classification",
"required": false,
"displayName": "Classification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Next Action",
"required": false,
"displayName": "Next Action",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Customer Email"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Support Tickets"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "472ccb11-7e70-419c-822f-c6154ea2abc8",
"name": "Log to Google Sheets (Urgent)",
"type": "n8n-nodes-base.googleSheets",
"position": [
2624,
1952
],
"parameters": {
"columns": {
"value": {
"Product": "={{ $json.product }}",
"Summary": "={{ $json.summary }}",
"Urgency": "={{ $json.urgency }}",
"Timestamp": "={{ $now.toISO() }}",
"Next Action": "={{ $json.nextAction }}",
"Customer Name": "={{ $json.customerName }}",
"Classification": "urgent",
"Customer Email": "={{ $json.customerEmail }}"
},
"schema": [
{
"id": "Timestamp",
"required": false,
"displayName": "Timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Name",
"required": false,
"displayName": "Customer Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Email",
"required": false,
"displayName": "Customer Email",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "Product",
"required": false,
"displayName": "Product",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Classification",
"required": false,
"displayName": "Classification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Next Action",
"required": false,
"displayName": "Next Action",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Customer Email"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Support Tickets"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
}
},
"credentials": {},
"typeVersion": 4.7
},
{
"id": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
"name": "Check Urgency for SLA",
"type": "n8n-nodes-base.if",
"position": [
2848,
1664
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "id-1",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.urgency }}",
"rightValue": "={{ $('Workflow Configuration').first().json.urgencyThreshold }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b8991d6c-954f-487b-8f11-829761a6d5e6",
"name": "Error Handler - Log to DLQ",
"type": "n8n-nodes-base.httpRequest",
"position": [
928,
2176
],
"parameters": {
"url": "<__PLACEHOLDER_VALUE__Dead Letter Queue API Endpoint__>",
"method": "POST",
"options": {},
"jsonBody": "={{ { \"workflow\": \"AI Customer Support Triage\", \"error\": $json.error, \"timestamp\": $now.toISO(), \"data\": $json } }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "a6fe778b-d8de-4127-8bd6-1cfb0266d228",
"name": "Generate Reference Number",
"type": "n8n-nodes-base.code",
"position": [
3072,
1664
],
"parameters": {
"jsCode": "const timestamp = Date.now();\nconst random = Math.random().toString(36).substring(2, 8).toUpperCase();\nconst referenceNumber = `SUP-${timestamp}-${random}`;\nconst urgency = items[0].json.urgency;\nconst urgencyThreshold = items[0].json.urgencyThreshold || 4;\nconst slaHours = urgency >= urgencyThreshold ? items[0].json.slaThresholdHours || 24 : 48;\nconst slaResponseTime = `${slaHours} hours`;\nreturn { json: { ...items[0].json, referenceNumber, slaHours, slaResponseTime } };"
},
"typeVersion": 2
},
{
"id": "e3b53f01-39cf-40fa-b4b1-a16279d383fa",
"name": "Prepare Auto-Reply Email Data",
"type": "n8n-nodes-base.set",
"position": [
3296,
1664
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "emailSubject",
"type": "string",
"value": "=Your Support Request Received - Ref: {{ $json.referenceNumber }}"
},
{
"id": "id-2",
"name": "emailBody",
"type": "string",
"value": "=Dear {{ $json.customerName }},\n\nThank you for contacting {{ $('Workflow Configuration').first().json.companyName }} support. We have received your inquiry and our team is reviewing it.\n\n**Ticket Details:**\n\u2022 Reference Number: {{ $json.referenceNumber }}\n\u2022 Issue Summary: {{ $json.summary }}\n\u2022 Classification: {{ $json.classification }}\n\u2022 Priority Level: {{ $json.urgency }}/5\n\u2022 Expected Response Time: {{ $json.slaResponseTime }}\n\nOur support team will respond to your request within {{ $json.slaResponseTime }}. You can track the status of your ticket at:\n{{ $('Workflow Configuration').first().json.supportPortalUrl }}\n\nIf you have any additional information to add, please reply to this email with your reference number: {{ $json.referenceNumber }}\n\nBest regards,\n{{ $('Workflow Configuration').first().json.companyName }} Support Team\n{{ $('Workflow Configuration').first().json.supportEmail }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "113a0dee-5142-48ab-9b94-a1ef76407712",
"name": "Send Auto-Reply via Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
3520,
1664
],
"parameters": {
"sendTo": "={{ $json.customerEmail }}",
"message": "={{ $json.emailBody }}",
"options": {},
"subject": "={{ $json.emailSubject }}"
},
"credentials": {},
"typeVersion": 2.1
},
{
"id": "e92c40d8-b13e-4223-996e-ab9540592c46",
"name": "Retry Auto-Reply (Attempt 1)",
"type": "n8n-nodes-base.httpRequest",
"position": [
3744,
1664
],
"parameters": {
"url": "<__PLACEHOLDER_VALUE__SMTP Fallback API Endpoint__>",
"method": "POST",
"options": {},
"jsonBody": "={{ {\n \"to\": $json.customerEmail,\n \"subject\": $json.emailSubject,\n \"body\": $json.emailBody,\n \"referenceNumber\": $json.referenceNumber\n} }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "d05dc36d-bb82-42d6-a631-5fbe16d3ab04",
"name": "Retry Auto-Reply (Attempt 2)",
"type": "n8n-nodes-base.httpRequest",
"position": [
3968,
1664
],
"parameters": {
"url": "<__PLACEHOLDER_VALUE__SMTP Fallback API Endpoint (Backup)__>",
"method": "POST",
"options": {
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={{ {\n \"to\": $json.customerEmail,\n \"subject\": $json.emailSubject,\n \"body\": $json.emailBody,\n \"referenceNumber\": $json.referenceNumber\n} }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "bacdcf4a-d4ae-4436-bfaf-43954b53d832",
"name": "Log Failed Auto-Reply to DLQ",
"type": "n8n-nodes-base.httpRequest",
"position": [
4192,
1664
],
"parameters": {
"url": "<__PLACEHOLDER_VALUE__Dead Letter Queue API Endpoint__>",
"method": "POST",
"options": {},
"jsonBody": "={{ { \"workflow\": \"AI Customer Support Auto-Reply\", \"error\": \"Failed to send auto-reply after 3 attempts\", \"timestamp\": $now.toISO(), \"customerEmail\": $json.customerEmail, \"referenceNumber\": $json.referenceNumber, \"data\": $json } }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "1b09b649-cda1-4e24-aef7-dda7c3edede8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
496
],
"parameters": {
"color": 4,
"width": 736,
"height": 640,
"content": "# \ud83d\udfe2 Setup & Intake\n\n## Configure your email or webhook trigger for new support tickets. \n\n## Update the \u201cWorkflow Configuration\u201d node:\n\n## Slack Channel IDs\n\n## CRM Type (HubSpot or Salesforce)\n\n## Google Sheet ID\n\n## SLA (Service Level Agreement) thresholds \n\n## Connect credentials for OpenAI, Slack, Google Sheets, and Gmail before running.\n"
},
"typeVersion": 1
},
{
"id": "28b93a1c-529b-47b2-bea0-3b6c78ad215b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
512
],
"parameters": {
"color": 3,
"width": 784,
"height": 624,
"content": "# \ud83e\udd16 AI Triage\n\n## The AI Triage & Summarization node uses OpenAI to:\n## Summarize the message (<200 words)\n## Classify issue type (technical, billing, general, urgent)\n## Assign urgency (1\u20135)\n## Suggest next action \n## Model: GPT 5 (editable). \n## Output feeds into routing, logging, and auto-reply generation.\n"
},
"typeVersion": 1
},
{
"id": "2abd4593-c630-4bb0-96df-f5c592d489d2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2128,
528
],
"parameters": {
"color": 5,
"width": 784,
"height": 608,
"content": "# \ud83d\udd00 Routing & Logging\n## Route by Classification directs tickets to Slack channels & CRM task queues. \n## Each triaged ticket is logged to Google Sheets with:\n## Timestamp\n## Classification & urgency\n## AI summary & suggested action \n## Failed or missing data goes to the DLQ tab for review.\n"
},
"typeVersion": 1
},
{
"id": "3482614e-7fe0-4e62-93dd-d15d43c83e60",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
3040,
544
],
"parameters": {
"width": 736,
"height": 592,
"content": "# \u2709\ufe0f Auto-Reply & Error Handling\n## The \u201cAuto-Reply Generator\u201d node drafts a personalized acknowledgment email with:\n## Customer name\n## Issue summary\n## Ticket ID & support SLA timeframe \n## Email sent via Gmail or SMTP. \n## Invalid or failed triage attempts are logged to the DLQ for auditing.\n"
},
"typeVersion": 1
},
{
"id": "5e3bc0f5-b4be-4b12-892c-d9f24a8ad2d3",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
2144
],
"parameters": {
"color": 2,
"width": 496,
"height": 320,
"content": "# \ud83d\udd34 Error Handler \u2013 Log to DLQ\n## Optional global error catcher for failed executions. Configure with your Google Sheet DLQ tab or remove if handling errors elsewhere in the workflow.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "cddc9402-f487-4610-8ff6-7b0a423840cc",
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Triage & Summarization Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Post to Urgent Slack": {
"main": [
[
{
"node": "Create CRM Task (Urgent)",
"type": "main",
"index": 0
}
]
]
},
"Check Urgency for SLA": {
"main": [
[
{
"node": "Generate Reference Number",
"type": "main",
"index": 0
}
]
]
},
"Extract Customer Data": {
"main": [
[
{
"node": "AI Triage & Summarization Agent",
"type": "main",
"index": 0
}
]
]
},
"Post to Billing Slack": {
"main": [
[
{
"node": "Create CRM Task (Billing)",
"type": "main",
"index": 0
}
]
]
},
"Post to General Slack": {
"main": [
[
{
"node": "Create CRM Task (General)",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Extract Customer Data",
"type": "main",
"index": 0
}
]
]
},
"Post to Technical Slack": {
"main": [
[
{
"node": "Create CRM Task (Technical)",
"type": "main",
"index": 0
}
]
]
},
"Route by Classification": {
"main": [
[
{
"node": "Post to Technical Slack",
"type": "main",
"index": 0
}
],
[
{
"node": "Post to Billing Slack",
"type": "main",
"index": 0
}
],
[
{
"node": "Post to General Slack",
"type": "main",
"index": 0
}
],
[
{
"node": "Post to Urgent Slack",
"type": "main",
"index": 0
}
]
]
},
"Create CRM Task (Urgent)": {
"main": [
[
{
"node": "Log to Google Sheets (Urgent)",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Triage & Summarization Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Create CRM Task (Billing)": {
"main": [
[
{
"node": "Log to Google Sheets (Billing)",
"type": "main",
"index": 0
}
]
]
},
"Create CRM Task (General)": {
"main": [
[
{
"node": "Log to Google Sheets (General)",
"type": "main",
"index": 0
}
]
]
},
"Generate Reference Number": {
"main": [
[
{
"node": "Prepare Auto-Reply Email Data",
"type": "main",
"index": 0
}
]
]
},
"Send Auto-Reply via Gmail": {
"main": [
[
{
"node": "Retry Auto-Reply (Attempt 1)",
"type": "main",
"index": 0
}
]
]
},
"Create CRM Task (Technical)": {
"main": [
[
{
"node": "Log to Google Sheets (Technical)",
"type": "main",
"index": 0
}
]
]
},
"Retry Auto-Reply (Attempt 1)": {
"main": [
[
{
"node": "Retry Auto-Reply (Attempt 2)",
"type": "main",
"index": 0
}
]
]
},
"Retry Auto-Reply (Attempt 2)": {
"main": [
[
{
"node": "Log Failed Auto-Reply to DLQ",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets (Urgent)": {
"main": [
[
{
"node": "Check Urgency for SLA",
"type": "main",
"index": 0
}
]
]
},
"Prepare Auto-Reply Email Data": {
"main": [
[
{
"node": "Send Auto-Reply via Gmail",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets (Billing)": {
"main": [
[
{
"node": "Check Urgency for SLA",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets (General)": {
"main": [
[
{
"node": "Check Urgency for SLA",
"type": "main",
"index": 0
}
]
]
},
"AI Triage & Summarization Agent": {
"main": [
[
{
"node": "Route by Classification",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets (Technical)": {
"main": [
[
{
"node": "Check Urgency for SLA",
"type": "main",
"index": 0
}
]
]
},
"Inbound Trigger (Email/Form/Chat)": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
🧾 Short Description
Source: https://n8n.io/workflows/10184/ — 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.
Enhance your support, onboarding, and internal knowledge workflows with an intelligent RAG-powered chatbot that responds using live data stored in Google Sheets. 🤖📚 Built for teams that rely on struct
This workflow automates the creation and publishing of LinkedIn posts with AI-generated content and human approval via Slack, using Google Sheets, OpenAI (GPT-4), Slack Interactive Messages, and the L
This workflow automates legislative compliance analysis by coordinating multiple specialized OpenAI agents to interpret regulatory documents, evaluate organizational impact, and manage stakeholder com
[](https://www.youtube.com/watch?v=NAn5BSr15Ks) > This workflow connects a Slack chatbot with AI agents and Google Sheets to automate candidate resume evaluation. It extracts resume details, identi
This workflow automates the entire process of taking a raw user-submitted script, rewriting it into a polished HeyGen-ready narration, generating a full avatar video, handling all processing checks, r