This workflow follows the Agent → Error Trigger 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": "3b1q6ZJTxeONrpUV",
"name": "Error Alert and Summarizer",
"tags": [],
"nodes": [
{
"id": "d29a5b06-1609-416f-bc74-0274d3321019",
"name": "Error Trigger",
"type": "n8n-nodes-base.errorTrigger",
"position": [
-600,
-40
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a71d3052-a89b-4e8e-baee-7fe245575f42",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
528,
180
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "gpt-4o"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "e71dee7b-4dfd-49ab-8939-f3808ee112d7",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
648,
180
],
"parameters": {
"jsonSchemaExample": "{\n\"diagnosis\":\"\",\n\"cause\":\"\",\n\"resolution\":\"\"\n}"
},
"typeVersion": 1.2
},
{
"id": "3611e9e8-f677-49c4-b06c-fa6c28f43930",
"name": "SET EMAIL",
"type": "n8n-nodes-base.set",
"position": [
-380,
-40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "45e1443a-fb44-42f8-96ad-423197c7265b",
"name": "TO",
"type": "string",
"value": "myemail@myemail.com"
},
{
"id": "968b05dc-f476-4e13-8166-e62005d0f936",
"name": "CC",
"type": "string",
"value": "theiremail@theiremail.com"
},
{
"id": "570663c5-29c0-44fb-9992-908b7cca8136",
"name": "BCC",
"type": "string",
"value": "theiremail@theiremail.com"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3676f72e-d06d-44f8-be35-19efe09a257e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-450,
-260
],
"parameters": {
"color": 3,
"height": 380,
"content": "# SET YOUR EMAILS"
},
"typeVersion": 1
},
{
"id": "f0b08a20-6ecc-4487-9a0a-30be07cc0cbb",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-40,
-260
],
"parameters": {
"color": 3,
"width": 280,
"height": 380,
"content": "# Enable/Disable Manual Executions"
},
"typeVersion": 1
},
{
"id": "b35cd2a6-5f22-4e06-9bb0-880855c423a8",
"name": "Remove Manual Exec",
"type": "n8n-nodes-base.if",
"position": [
60,
-40
],
"parameters": {
"options": {
"ignoreCase": true
},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9b2f3ff3-db9c-406b-a97f-37620dc5fab9",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.mode }}",
"rightValue": "manual"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "2a33b02a-78f1-4243-ba7d-f217ea4d1895",
"name": "Get Failed Exec",
"type": "n8n-nodes-base.n8n",
"position": [
-160,
-40
],
"parameters": {
"options": {
"activeWorkflows": true
},
"resource": "execution",
"operation": "get",
"executionId": "={{ $('Error Trigger').item.json.execution.id }}",
"requestOptions": {}
},
"credentials": {
"n8nApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "b36ccbf9-4e47-44fc-aed3-424b6f121329",
"name": "Extract Error Details",
"type": "n8n-nodes-base.code",
"position": [
280,
-40
],
"parameters": {
"jsCode": "// 1) Grab your full execution JSON\nconst exec = items[0].json;\n\n// 2) Build execution\u2010level metadata\nconst meta = {\n executionId: exec.id,\n finished: exec.finished,\n mode: exec.mode,\n status: exec.status,\n createdAt: exec.createdAt,\n startedAt: exec.startedAt,\n stoppedAt: exec.stoppedAt,\n deletedAt: exec.deletedAt,\n workflowId: exec.workflowId,\n workflowName: exec.workflowData?.name,\n retryOf: exec.retryOf,\n retrySuccessId: exec.retrySuccessId,\n};\n\n// 3) Identify trigger node name from startData\nconst runNodeFilter = exec.data?.startData?.runNodeFilter || [];\nconst triggerNodeName = runNodeFilter[0] || null;\n\n// 4) Grab the raw trigger runData\nconst runData = exec.data?.resultData?.runData || {};\nconst triggerRuns = triggerNodeName ? (runData[triggerNodeName] || []) : [];\n\n// 5) Extract the JSON payload from the first run of the trigger\nlet triggerPayload = {};\nif (triggerRuns.length && triggerRuns[0].data?.main?.[0]?.[0]?.json) {\n triggerPayload = triggerRuns[0].data.main[0][0].json;\n}\n\n// 6) Merge trigger info into meta\nmeta.triggerNodeName = triggerNodeName;\nmeta.triggerPayload = triggerPayload;\n\n// 7) Now scan for all node errors, **excluding** any nodeName that contains \u201cSERP\u201d\nconst allErrors = [];\nfor (const [nodeName, runs] of Object.entries(runData)) {\n // Skip any of the SERP nodes\n if (nodeName.includes('SERP')) continue;\n\n runs.forEach(run => {\n if (run.executionStatus === 'error') {\n const err = run.error || exec.data.resultData.error || {};\n const nodeDef = err.node || run.node || {};\n\n allErrors.push({\n ...meta, // exec + trigger metadata\n\n nodeName,\n nodeId: nodeDef.id,\n nodeType: nodeDef.type,\n nodeLabel: nodeDef.name,\n\n startTime: run.startTime,\n executionTime: run.executionTime,\n source: run.source,\n\n errorName: err.name,\n errorMessage: err.message,\n errorDescription: err.description,\n httpCode: err.httpCode,\n messages: err.messages,\n context: err.context,\n stack: err.stack,\n\n parameters: nodeDef.parameters,\n credentials: nodeDef.credentials,\n });\n }\n });\n}\n\n// 8) Return results\nif (!allErrors.length) {\n return [{ json: { message: '\u2705 No (non\u2011SERP) errors found in this execution.' } }];\n}\nreturn allErrors.map(e => ({ json: e }));\n"
},
"typeVersion": 2
},
{
"id": "a26fb0c8-99eb-466d-b201-89c402fa1af4",
"name": "Error Solver Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
500,
-40
],
"parameters": {
"text": "=Can you please help me with this error that occured in my n8n workflow? {{ JSON.stringify($json) }}",
"options": {
"systemMessage": "You are an seasoned n8n expert with specializations in managing n8n instances and workflows. The user will provide a detailed error json object and your goal is to review, analyze and understand the error and using your expertise diagnose the error and provide a detailed report to the user with your diagnosis, cause and resolution so the user understands and can immediately fix the issue."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.8
},
{
"id": "8cfd7229-3ff1-4ba1-a67d-caa21be8064f",
"name": "Set Diagnosis Fields",
"type": "n8n-nodes-base.set",
"position": [
876,
-40
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "fac5fbee-d63d-4148-b047-5ed5af4f2574",
"name": "error.diagnosis",
"type": "string",
"value": "={{ $json.output.diagnosis }}"
},
{
"id": "ece9388d-f667-4984-a143-7241f622fe76",
"name": "error.cause",
"type": "string",
"value": "={{ $json.output.cause }}"
},
{
"id": "acb6b34a-a651-42fc-a44a-331b2e0d745c",
"name": "error.resolution",
"type": "string",
"value": "={{ $json.output.resolution }}"
},
{
"id": "c765754b-d6d5-4592-ac3f-99a350bc3c19",
"name": "error.workflowName",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.workflowName }}"
},
{
"id": "dabebc62-3e0c-4d22-afbf-54ba66a912fb",
"name": "error.workflowId",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.workflowId }}"
},
{
"id": "6ab19800-9a0f-439f-bf62-7a7afc5bf958",
"name": "workflowLink",
"type": "string",
"value": "={{ $execution.resumeUrl.split('/').slice(0, 3).join('/') }}/workflow/{{ $('Extract Error Details').item.json.workflowId }}"
},
{
"id": "29daaea5-052b-46d4-8192-141db159bff2",
"name": "error.executionId",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.executionId }}"
},
{
"id": "9e4e553c-c82b-41ec-8ee2-14162cdc3bd8",
"name": "executionLink",
"type": "string",
"value": "={{ $execution.resumeUrl.split('/').slice(0, 3).join('/') }}/workflow/{{ $('Extract Error Details').item.json.workflowId }}/executions/{{ $('Extract Error Details').item.json.executionId }}"
},
{
"id": "7269ea9f-ed49-46cd-89f2-d4a467da529d",
"name": "error.finished",
"type": "boolean",
"value": "={{ $('Extract Error Details').item.json.finished }}"
},
{
"id": "29a6e6d2-5058-4dd9-b2f9-3980a6a9073a",
"name": "error.startedAt",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.startedAt }}"
},
{
"id": "a0ad0e13-5a6e-48db-9a80-74c09434de7f",
"name": "error.nodeName",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.nodeName }}"
},
{
"id": "6c1001d4-a581-4520-9f16-a2c7cf0e1f84",
"name": "error.previousNode",
"type": "string",
"value": "={{ $('Extract Error Details').item.json.source[0].previousNode }}"
},
{
"id": "8c3402ca-3f15-44ae-9b96-ea37c174334c",
"name": "rawJson",
"type": "string",
"value": "={{ JSON.stringify($('Extract Error Details').item.json) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9e95edf0-b2f1-443b-9ac4-3e3b3311cad5",
"name": "Send Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
1316,
-40
],
"parameters": {
"sendTo": "={{ $('SET EMAIL').item.json.TO }}",
"message": "={{ $json.html }}",
"options": {
"ccList": "={{ $('SET EMAIL').item.json.CC }}",
"bccList": "={{ $('SET EMAIL').item.json.BCC }}",
"appendAttribution": true
},
"subject": "={{ $json.subject }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "1705ee42-0be4-41a2-8ff9-f6963eef7382",
"name": "Generate Email",
"type": "n8n-nodes-base.code",
"position": [
1100,
-40
],
"parameters": {
"jsCode": "// 1. Pull in your error payload\nconst rawInput = items[0].json;\nconst parsed = typeof rawInput === 'string' ? JSON.parse(rawInput) : rawInput;\nconst errorArray = Array.isArray(parsed) ? parsed : [parsed];\n\n// 2. Build HTML & Markdown sections\nlet htmlSections = '';\n\n\nfor (const errObj of errorArray) {\n const {\n error: {\n workflowName,\n executionId,\n nodeName,\n previousNode,\n diagnosis,\n cause,\n resolution,\n startedAt,\n },\n workflowLink,\n executionLink,\n } = errObj;\n\n // HTML block\n htmlSections += `\n <div style=\"border:1px solid #ddd;border-radius:4px;padding:16px;margin-bottom:20px;background:#fafafa;\">\n <h3 style=\"margin:0 0 10px;color:#c0392b;font-family:Arial,sans-serif;\">\n \ud83d\uded1 ${workflowName} \u2014 Error in node: ${nodeName}\n </h3>\n <p style=\"margin:4px 0;font-family:Arial,sans-serif;\">\n <strong>Workflow:</strong> \n <a href=\"${workflowLink}\" style=\"color:#2980b9;text-decoration:none;\">\n ${workflowName}\n </a><br/>\n <strong>Execution:</strong> \n <a href=\"${executionLink}\" style=\"color:#2980b9;text-decoration:none;\">\n #${executionId}\n </a><br/>\n <strong>Previous Node:</strong> ${previousNode}<br/>\n <strong>Started At:</strong> ${new Date(startedAt).toLocaleString('en-US', { timeZone: 'America/New_York' })}\n </p>\n <hr style=\"border:none;border-top:1px solid #ccc;margin:12px 0;\"/>\n <h4 style=\"margin:0 0 6px;color:#e67e22;font-family:Arial,sans-serif;\">\ud83d\udd0d Diagnosis</h4>\n <p style=\"margin:4px 0 12px;font-family:Arial,sans-serif;\">${diagnosis}</p>\n <h4 style=\"margin:0 0 6px;color:#e67e22;font-family:Arial,sans-serif;\">\u2699\ufe0f Cause</h4>\n <p style=\"margin:4px 0 12px;font-family:Arial,sans-serif;\">${cause}</p>\n <h4 style=\"margin:0 0 6px;color:#e67e22;font-family:Arial,sans-serif;\">\u2705 Resolution</h4>\n <p style=\"white-space:pre-wrap;margin:4px 0;font-family:Arial,sans-serif;\">${resolution}</p>\n </div>`;\n\n// 3. Wrap up\nconst html = `\n <div style=\"font-family:Arial,sans-serif;color:#333;background:#fff;padding:20px;\">\n <h2 style=\"margin-top:0;color:#2c3e50;\">Automated Error Report</h2>\n ${htmlSections}\n <p style=\"font-size:12px;color:#777;font-family:Arial,sans-serif;\">\n This message was generated automatically by \n <a href=\"https://realsimple.dev\" style=\"color:#777;text-decoration:none;\"><b>Real Simple Solutions</b></a>.\n</p>\n<div style=\"background:#f0f4ff;padding:8px 12px;margin-top:6px;border-radius:6px;font-size:12px;font-family:Arial,sans-serif;\">\n \u2728 <strong>Want more n8n AI automation templates?</strong><br>\n Check out our full collection on \n <a href=\"https://joeper.es/4jXyRub\" style=\"color:#0066cc;text-decoration:none;\"><b>Gumroad</b></a>.\n</div>\n </div>\n`;\n\n// 4. Return all three\nreturn [\n {\n json: {\n subject: `\ud83d\udea8 n8n Error: ${errorArray[0].error.workflowName} (#${errorArray[0].error.executionId})`,\n html\n },\n },\n];\n"
},
"typeVersion": 2
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "be484a20-26cd-4df4-a993-f7d01c2956e6",
"connections": {
"SET EMAIL": {
"main": [
[
{
"node": "Get Failed Exec",
"type": "main",
"index": 0
}
]
]
},
"Error Trigger": {
"main": [
[
{
"node": "SET EMAIL",
"type": "main",
"index": 0
}
]
]
},
"Generate Email": {
"main": [
[
{
"node": "Send Gmail",
"type": "main",
"index": 0
}
]
]
},
"Get Failed Exec": {
"main": [
[
{
"node": "Remove Manual Exec",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Error Solver Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Error Solver Agent": {
"main": [
[
{
"node": "Set Diagnosis Fields",
"type": "main",
"index": 0
}
]
]
},
"Remove Manual Exec": {
"main": [
[
{
"node": "Extract Error Details",
"type": "main",
"index": 0
}
]
]
},
"Set Diagnosis Fields": {
"main": [
[
{
"node": "Generate Email",
"type": "main",
"index": 0
}
]
]
},
"Extract Error Details": {
"main": [
[
{
"node": "Error Solver Agent",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Error Solver Agent",
"type": "ai_outputParser",
"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.
gmailOAuth2n8nApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow swiftly detects errors in your n8n automations and delivers concise, actionable summaries via Gmail, saving you hours of manual troubleshooting by highlighting root causes and suggested fixes. It's ideal for teams managing complex workflows who need reliable alerts without constant monitoring. The key step involves feeding error details into an OpenAI chat model, which generates a structured summary before emailing it out.
Use this when your n8n setups involve multiple integrations prone to failures, like API timeouts or data mismatches, ensuring quick recovery. Avoid it for simple, low-risk automations where built-in logging suffices, or if you prefer real-time Slack notifications over email. Common variations include routing summaries to Microsoft Teams or adding a Slack integration for instant team alerts.
About this workflow
Error Alert and Summarizer. Uses errorTrigger, lmChatOpenAi, outputParserStructured, stickyNote. Event-driven trigger; 13 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
> ⚠️ This template is available on ☁️ Cloud & 🖥️ self-hosted n8n instances with the OpenAI node enabled.
Transform your manual hiring process into an intelligent evaluation system that saves 15-20 minutes per candidate! This workflow automates the entire candidate assessment pipeline - from CSV/XLSX uplo
Streamline customer support with a real-time, AI-powered answer engine that detects incoming support emails, classifies intent, identifies the customer’s GEO region, and generates a tailored reply rea
📘 Description This workflow automates keyword-level SEO research and content opportunity discovery using live Google SERP data and AI-driven analysis. It takes a single keyword request, pulls real-tim
Consultants, agencies, freelancers, and project managers who want to ensure proposals, emails, and tasks are followed up on time.