8
n8n 한국어amn8n.com

OpenAI를 사용한 워크플로 오류 분석 및 FreshDesk 티켓과 Slack 알림 생성

고급

이것은AI Summarization, Multimodal AI분야의자동화 워크플로우로, 16개의 노드를 포함합니다.주로 Set, Code, Merge, Slack, HttpRequest 등의 노드를 사용하며. OpenAI를 사용하여 워크플로 오류 분석 및 FreshDesk 티켓과 Slack 알림 생성

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • 대상 API의 인증 정보가 필요할 수 있음
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "94fc2c6a7a77ded555aa833bb96d962eb52fa6fab7c08bc61fda4e8d5d10e8c1"
  },
  "nodes": [
    {
      "id": "bf182e19-4083-4344-ac68-329663a429c8",
      "name": "오류 트리거",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -1104,
        -128
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c1b77e3e-81a2-4c24-a6a1-798637afb053",
      "name": "오류 알림",
      "type": "n8n-nodes-base.slack",
      "position": [
        368,
        -128
      ],
      "webhookId": "7846bf42-10f8-494f-9874-efcef323dc95",
      "parameters": {
        "text": "={{ $json.slack_text }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C08UZ06DYAE",
          "cachedResultName": "n8n"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.3
    },
    {
      "id": "c1e264c0-33fa-4d41-a02a-5c6e3e37611b",
      "name": "구조화된 출력 파서",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -800,
        96
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"analysis\": {\n    \"issue\": \"Workflow execution failed at 'Node With Error' during manual execution, marked as retry attempt of execution #34\",\n    \"reasoning\": \"This appears to be a persistent error that has caused multiple retry attempts. The fact that this is execution #231 retrying execution #34 suggests either a recurring issue or a stuck workflow that keeps failing at the same node. The generic 'Example Error Message' indicates this is sample data, but the pattern suggests a node configuration or data processing issue that prevents successful completion.\",\n    \"confidence_level\": \"Medium\",\n    \"error_category\": \"Configuration/Data Processing\"\n  },\n  \"solution\": {\n    \"primary_fix\": \"Examine the 'Node With Error' configuration for missing required fields, incorrect data mappings, or authentication issues\",\n    \"alternative_approaches\": [\n      \"Check if the node has proper error handling configured\",\n      \"Verify input data format and structure meets node requirements\",\n      \"Review node credentials and permissions\"\n    ],\n    \"implementation_steps\": [\n      \"Step 1: Open the 'Node With Error' in the n8n workflow editor\",\n      \"Step 2: Review all required parameters and ensure they are properly configured\",\n      \"Step 3: Check the input data format using the node's test functionality\",\n      \"Step 4: Add error handling branches or 'Continue on Fail' if appropriate\",\n      \"Step 5: Test the workflow in manual mode before enabling automatic execution\"\n    ]\n  },\n  \"prevention\": {\n    \"recommendations\": [\n      \"Implement proper error handling with 'Continue on Fail' settings where appropriate\",\n      \"Add data validation nodes before critical processing steps\",\n      \"Set up workflow-level error notifications\"\n    ],\n    \"monitoring_suggestions\": [\n      \"Monitor retry patterns to identify recurring issues\",\n      \"Set up alerts for failed executions\",\n      \"Regular review of execution logs for error trends\"\n    ],\n    \"best_practices\": [\n      \"Use 'Set' nodes to validate and transform data before processing\",\n      \"Implement timeout settings for external API calls\",\n      \"Add logging nodes to track data flow at critical points\"\n    ]\n  },\n  \"additional_context\": {\n    \"requires_verification\": [\n      \"Actual error message content\",\n      \"Specific node type that's failing\",\n      \"Input data structure and content\"\n    ],\n    \"assumptions_made\": [\n      \"This is a configuration or data processing error\",\n      \"The node requires specific input format or parameters\",\n      \"Multiple retries suggest a persistent rather than transient issue\"\n    ],\n    \"follow_up_questions\": [\n      \"What is the actual error message?\",\n      \"What type of node is 'Node With Error'?\",\n      \"What data is being passed to this node?\",\n      \"Are there any authentication or API rate limiting issues?\"\n    ]\n  }\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d03ba933-d017-41fb-9671-f3334b80a9a1",
      "name": "디버거",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -880,
        -128
      ],
      "parameters": {
        "text": "=You are an expert n8n workflow debugger. Analyze n8n execution errors using systematic reasoning: decompose the error, identify root causes from multiple perspectives, and provide actionable solutions.\nAlways respond in this JSON format:\njson{\n  \"analysis\": {\n    \"issue\": \"Brief problem description\",\n    \"reasoning\": \"Why this occurred\",\n    \"confidence_level\": \"High/Medium/Low\",\n    \"error_category\": \"Authentication/Data Processing/API Limits/Configuration/etc\"\n  },\n  \"solution\": {\n    \"primary_fix\": \"Main solution\",\n    \"alternative_approaches\": [\"Alt 1\", \"Alt 2\"],\n    \"implementation_steps\": [\"Step 1\", \"Step 2\", \"Step 3\"]\n  },\n  \"prevention\": {\n    \"recommendations\": [\"Rec 1\", \"Rec 2\"],\n    \"best_practices\": [\"Practice 1\", \"Practice 2\"]\n  }\n}\nFocus on practical, n8n-specific solutions that can be implemented immediately.\nUSER PROMPT\nAnalyze this n8n workflow error and provide diagnostic analysis with actionable solutions:\n{{ $('Error Trigger').item.json.execution.id }}\n{{ $('Error Trigger').item.json.execution.url }}\n{{ $('Error Trigger').item.json.execution.retryOf }}\nError:\n{{ $json.execution.error.message }}\n{{ $json.execution.error.stack }}\n{{ $json.execution.lastNodeExecuted }}\n{{ $json.execution.mode }}\n{{ $json.execution.startedAt }}\n{{ $json.execution.stoppedAt }}\nWorkflow:\n{{ $json.workflow.id }}\n{{ $json.workflow.name }}\n{{ $json.workflow.active }}",
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.6
    },
    {
      "id": "cb3430b5-fe77-4cc0-a895-d2f95e4aa598",
      "name": "Slack 메시지 준비",
      "type": "n8n-nodes-base.code",
      "position": [
        144,
        -128
      ],
      "parameters": {
        "jsCode": "// n8n Code Node: Generate Slack Message for Workflow Errors\n// Enhanced to include FreshDesk ticket information from merged input\n\n// Get the merged data from the current input (contains both ticket and analysis data)\nconst mergedData = $input.first().json;\n\n// Get execution data from the Error Trigger node (previous node in workflow)\nconst executionData = $('Error Trigger').first().json;\n\n// Debug: Log the input structure\nconsole.log('Merged data:', JSON.stringify(mergedData, null, 2));\nconsole.log('Execution data:', JSON.stringify(executionData, null, 2));\n\n// Extract execution details with safe access\nconst execution = executionData?.execution || {};\nconst workflow = executionData?.workflow || {};\n\n// Extract analysis details from merged data - using the clean variable names\nconst issueText = mergedData?.debugger_analysis_issue || 'No analysis available';\nconst reasoning = mergedData?.debugger_analysis_reasoning || 'No reasoning provided';\nconst confidenceLevel = mergedData?.debugger_analysis_level || 'Unknown';\nconst errorCategory = mergedData?.debugger_analysis_category || 'General';\nconst primaryFix = mergedData?.debugger_solution || 'No solution provided';\nconst implementationSteps = mergedData?.debugger_steps || ['No steps available'];\nconst alternativeApproaches = mergedData?.debugger_approaches || ['No alternatives available'];\nconst prevention = mergedData?.debugger_prevention || {};\n\n// Extract FreshDesk ticket details from merged data\nconst ticketId = mergedData?.id || 'Unknown';\nconst ticketSubject = mergedData?.subject || 'No subject available';\nconst ticketStatus = mergedData?.status || 'Unknown';\nconst ticketPriority = mergedData?.priority || 'Unknown';\nconst ticketCreatedAt = mergedData?.created_at || 'Unknown';\nconst ticketUrl = ticketId !== 'Unknown' ? `https://qlabs.freshdesk.com/a/tickets/${ticketId}` : '#';\n\n// Set default values for missing properties\nconst workflowName = mergedData?.workflow_name || workflow?.name || 'Unknown Workflow';\nconst executionId = execution?.id || 'Unknown';\nconst executionUrl = mergedData?.workflow_url || execution?.url || '#';\nconst lastNode = execution?.lastNodeExecuted || 'Unknown Node';\nconst executionMode = execution?.mode || 'unknown';\nconst errorMessage = mergedData?.workflow_error_message || execution?.error?.message || 'No error message available';\nconst errorStack = execution?.error?.stack || '';\n\nconst recommendations = prevention?.recommendations || ['No recommendations available'];\nconst bestPractices = prevention?.best_practices || ['No best practices available'];\n\n// Helper function to format arrays as bullet points\nfunction formatArray(array, prefix = \"• \") {\n  if (!Array.isArray(array)) return 'No data available';\n  return array.map(item => `${prefix}${item}`).join('\\n');\n}\n\n// Generate confidence emoji based on level\nfunction getConfidenceEmoji(level) {\n  switch(level.toLowerCase()) {\n    case 'high': return '🔴';\n    case 'medium': return '🟡';\n    case 'low': return '🟢';\n    default: return '⚪';\n  }\n}\n\n// Generate category emoji\nfunction getCategoryEmoji(category) {\n  switch(category.toLowerCase()) {\n    case 'configuration': return '⚙️';\n    case 'authentication': return '🔐';\n    case 'network': return '🌐';\n    case 'data': return '📊';\n    case 'data processing': return '📊';\n    case 'timeout': return '⏰';\n    default: return '❌';\n  }\n}\n\n// Generate priority emoji\nfunction getPriorityEmoji(priority) {\n  switch(priority) {\n    case 1: return '🔥'; // Urgent\n    case 2: return '🟡'; // High\n    case 3: return '🟢'; // Medium\n    case 4: return '🔵'; // Low\n    default: return '⚪';\n  }\n}\n\n// Generate status text\nfunction getStatusText(status) {\n  switch(status) {\n    case 2: return 'Open';\n    case 3: return 'Pending';\n    case 4: return 'Resolved';\n    case 5: return 'Closed';\n    default: return 'Unknown';\n  }\n}\n\n// Build the Slack message\nconst slackMessage = {\n  \"blocks\": [\n    {\n      \"type\": \"header\",\n      \"text\": {\n        \"type\": \"plain_text\",\n        \"text\": \"🚨 n8n Workflow Error Alert\"\n      }\n    },\n    {\n      \"type\": \"divider\"\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Workflow:*\\n${workflowName}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Execution ID:*\\n${executionId}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Failed Node:*\\n${lastNode}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Mode:*\\n${executionMode}`\n        }\n      ]\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Error Message:*\\n\\`\\`\\`${errorMessage}\\`\\`\\``\n      }\n    },\n    {\n      \"type\": \"actions\",\n      \"elements\": [\n        {\n          \"type\": \"button\",\n          \"text\": {\n            \"type\": \"plain_text\",\n            \"text\": \"View Execution\"\n          },\n          \"url\": executionUrl,\n          \"style\": \"primary\"\n        }\n      ]\n    },\n    {\n      \"type\": \"divider\"\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*🎫 Support Ticket Created*`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Ticket ID:*\\n#${ticketId}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Status:*\\n${getStatusText(ticketStatus)}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Priority:*\\n${getPriorityEmoji(ticketPriority)} Priority ${ticketPriority}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Created:*\\n${new Date(ticketCreatedAt).toLocaleString()}`\n        }\n      ]\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Subject:*\\n${ticketSubject}`\n      }\n    },\n    {\n      \"type\": \"actions\",\n      \"elements\": [\n        {\n          \"type\": \"button\",\n          \"text\": {\n            \"type\": \"plain_text\",\n            \"text\": \"View Ticket\"\n          },\n          \"url\": ticketUrl,\n          \"style\": \"primary\"\n        }\n      ]\n    },\n    {\n      \"type\": \"divider\"\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*${getCategoryEmoji(errorCategory)} AI Analysis*`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"fields\": [\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Category:*\\n${errorCategory}`\n        },\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `*Confidence:*\\n${getConfidenceEmoji(confidenceLevel)} ${confidenceLevel}`\n        }\n      ]\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Issue:*\\n${issueText}`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Reasoning:*\\n${reasoning}`\n      }\n    },\n    {\n      \"type\": \"divider\"\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"*🔧 Recommended Solution*\"\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Primary Fix:*\\n${primaryFix}`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Implementation Steps:*\\n${formatArray(implementationSteps)}`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Alternative Approaches:*\\n${formatArray(alternativeApproaches)}`\n      }\n    },\n    {\n      \"type\": \"divider\"\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": \"*🛡️ Prevention Recommendations*\"\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Recommendations:*\\n${formatArray(recommendations)}`\n      }\n    },\n    {\n      \"type\": \"section\",\n      \"text\": {\n        \"type\": \"mrkdwn\",\n        \"text\": `*Best Practices:*\\n${formatArray(bestPractices)}`\n      }\n    },\n    {\n      \"type\": \"context\",\n      \"elements\": [\n        {\n          \"type\": \"mrkdwn\",\n          \"text\": `Generated at ${new Date().toLocaleString()} | Execution ID: ${executionId} | Ticket #${ticketId}`\n        }\n      ]\n    }\n  ]\n};\n\n// Also create a detailed text fallback for basic Slack integrations\nconst textMessage = `🚨 n8n Workflow Error Alert\n\n--- WORKFLOW DETAILS ---\nWorkflow: ${workflowName}\nExecution ID: ${executionId}\nFailed Node: ${lastNode}\nMode: ${executionMode}\nError Message: ${errorMessage}\n\n🔗 View Execution: ${executionUrl}\n\n--- SUPPORT TICKET ---\n🎫 Ticket ID: #${ticketId}\nStatus: ${getStatusText(ticketStatus)}\nPriority: ${getPriorityEmoji(ticketPriority)} Priority ${ticketPriority}\nSubject: ${ticketSubject}\nCreated: ${new Date(ticketCreatedAt).toLocaleString()}\n\n🔗 View Ticket: ${ticketUrl}\n\n--- AI ANALYSIS ---\n${getCategoryEmoji(errorCategory)} Category: ${errorCategory}\nConfidence: ${getConfidenceEmoji(confidenceLevel)} ${confidenceLevel}\n\nIssue: ${issueText}\n\nReasoning: ${reasoning}\n\n--- RECOMMENDED SOLUTION ---\n🔧 Primary Fix: ${primaryFix}\n\nImplementation Steps:\n${formatArray(implementationSteps)}\n\nAlternative Approaches:\n${formatArray(alternativeApproaches)}\n\n--- PREVENTION RECOMMENDATIONS ---\n🛡️ Recommendations:\n${formatArray(recommendations)}\n\nBest Practices:\n${formatArray(bestPractices)}\n\n--- \nGenerated at ${new Date().toLocaleString()} | Execution ID: ${executionId} | Ticket #${ticketId}`;\n\n// Return both formatted message and text fallback\nreturn [\n  {\n    json: {\n      slack_blocks: slackMessage,\n      slack_text: textMessage,\n      execution_url: executionUrl,\n      workflow_name: workflowName,\n      error_category: errorCategory,\n      confidence_level: confidenceLevel,\n      ticket_id: ticketId,\n      ticket_url: ticketUrl,\n      ticket_status: getStatusText(ticketStatus),\n      ticket_priority: ticketPriority\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "e8ea095f-4455-4e89-b29f-76497b41b5b4",
      "name": "데이터 정리",
      "type": "n8n-nodes-base.set",
      "position": [
        -528,
        -128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "58246464-a6cb-48e9-b2ce-20ba40c00a24",
              "name": "workflow_url",
              "type": "string",
              "value": "={{ $('Error Trigger').item.json.execution.url }}"
            },
            {
              "id": "12ad3719-0c46-435f-86fa-3892b26e8b5e",
              "name": "workflow_name",
              "type": "string",
              "value": "={{ $('Error Trigger').item.json.workflow.name }}"
            },
            {
              "id": "c27df7fa-6b42-4251-8353-f764bb6eeb33",
              "name": "workflow_error_message",
              "type": "string",
              "value": "={{ $('Error Trigger').item.json.execution.error.message }}"
            },
            {
              "id": "e4913f6b-ecff-4b1a-b723-9691d0325763",
              "name": "debugger_analysis_issue",
              "type": "string",
              "value": "={{ $json.output.analysis.issue }}"
            },
            {
              "id": "1ebb9237-1a59-473a-8b81-dc8ad4c37dbc",
              "name": "debugger_analysis_reasoning",
              "type": "string",
              "value": "={{ $json.output.analysis.reasoning }}"
            },
            {
              "id": "021419df-5e2c-42d7-812c-02d5420ed206",
              "name": "debugger_analysis_level",
              "type": "string",
              "value": "={{ $json.output.analysis.confidence_level }}"
            },
            {
              "id": "dc6894e2-6f11-4e8f-960b-89e140f69cf7",
              "name": "debugger_analysis_category",
              "type": "string",
              "value": "={{ $json.output.analysis.error_category }}"
            },
            {
              "id": "e9faf043-6d14-472d-848e-5f28b56954e0",
              "name": "debugger_solution",
              "type": "string",
              "value": "={{ $json.output.solution.primary_fix }}"
            },
            {
              "id": "98ef52e7-fd0d-4b22-8e60-95627b6acf39",
              "name": "debugger_approaches",
              "type": "array",
              "value": "={{ $json.output.solution.alternative_approaches }}"
            },
            {
              "id": "4d9f47ec-9ba1-46d9-b3ed-2900d6d9109f",
              "name": "debugger_steps",
              "type": "array",
              "value": "={{ $json.output.solution.implementation_steps }}"
            },
            {
              "id": "fcb4ce9d-151d-4ef5-ba9d-eb3341504e91",
              "name": "debugger_prevention",
              "type": "object",
              "value": "={{ $json.output.prevention }}"
            },
            {
              "id": "9be3b49b-7478-484d-b484-bd36afb8bb69",
              "name": "context",
              "type": "object",
              "value": "={{ $json.output.additional_context }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9767ecb1-2782-4cd4-af7e-c7091359baf4",
      "name": "FreshDesk 티켓 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -304,
        -208
      ],
      "parameters": {
        "url": "https://yourcompany.freshdesk.com/api/v2/tickets",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"subject\": \"{{ $json.workflow_name }} - {{ $json.workflow_error_message }}\",\n  \"description\": \"<h3>🔍 Debugger Analysis</h3><p><strong>Analysis Reasoning:</strong><br>{{ $json.debugger_analysis_reasoning }}</p><p><strong>Solution:</strong><br>{{ $json.debugger_solution }}</p><p><strong>Approaches:</strong><br>{{ $json.debugger_approaches.join(', ') }}</p><p><strong>Steps:</strong><br>{{ $json.debugger_steps.join('<br>• ') }}</p><hr><h3>🛡️ Prevention Measures</h3><p><strong>Recommendations:</strong><br>{{ $json.debugger_prevention.recommendations.join('<br>• ') }}</p><p><strong>Monitoring Suggestions:</strong><br>{{ $json.debugger_prevention.monitoring_suggestions ? $json.debugger_prevention.monitoring_suggestions.join('<br>• ') : 'None specified' }}</p><p><strong>Best Practices:</strong><br>{{ $json.debugger_prevention.best_practices.join('<br>• ') }}</p><hr><h3>📋 Context Information</h3><p><strong>Requires Verification:</strong><br>{{ $json.context.requires_verification.join('<br>• ') }}</p><p><strong>Assumptions Made:</strong><br>{{ $json.context.assumptions_made.join('<br>• ') }}</p><p><strong>Follow-up Questions:</strong><br>{{ $json.context.follow_up_questions.join('<br>• ') }}</p>\",\n  \"email\": \"yourcompany.com\",\n  \"priority\": ,\n  \"status\": ,\n  \"type\": \"Incident\",\n  \"source\": \n}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "7b64dd18-6f92-46f2-8465-974cc2d3a25c",
      "name": "병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        -80,
        -128
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.1
    },
    {
      "id": "42e67aed-53a8-4244-8703-5ff38f22b3d1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2128,
        -464
      ],
      "parameters": {
        "width": 640,
        "height": 996,
        "content": "## 🔍 AI-Powered Error Monitoring & Support Ticket System\n\n### Automatically analyze n8n workflow errors with AI, create support tickets, and send detailed Slack notifications\n\nPerfect for development teams and businesses that need intelligent error handling with automated support workflows. Never miss critical workflow failures again!\n\n### How it works\n* Error Trigger captures any workflow failure in your n8n instance\n* AI Debugger analyzes the error using structured reasoning to identify root causes\n* Clean Data transforms AI analysis into organized, actionable information\n* Create Support Ticket automatically generates a detailed ticket in FreshDesk\n* Merge combines ticket data with AI analysis for comprehensive reporting\n* Generate Slack Alert creates rich, formatted notifications with all context\n* Send to Team delivers instant alerts to your designated Slack channel\n\n### How to use\n* Replace FreshDesk credentials with your helpdesk system API\n* Configure Slack channel for your team notifications\n* Customize AI analysis prompts for your specific error types\n* Set up as global error handler for all your critical workflows\n\n### Requirements\n* FreshDesk account (or compatible ticketing system)\n* Slack workspace with bot permissions\n* OpenAI API access for AI analysis\n* n8n Cloud or self-hosted with AI nodes enabled\n\n### Good to know\n* OpenAI API calls cost approximately $0.01-0.03 per error analysis\n* Works with any ticketing system that supports REST API\n* Can be triggered by webhooks from external monitoring tools\n* Slack messages use rich formatting for mobile-friendly alerts\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)!\n\nHappy Monitoring!"
      },
      "typeVersion": 1
    },
    {
      "id": "03d6ec3b-c0c5-4b99-a141-d7a80edc78e5",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1264,
        -464
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 1. Error Detection\n[Read more about the Error Trigger node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/)\n\nAutomatically captures workflow failures across your n8n instance. This global trigger activates whenever any workflow encounters an error, providing execution details, error messages, and workflow context for analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "cb2547b9-76c5-4381-88da-1e5fd6a2f1e2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        -464
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 2. AI-Powered Analysis\n[Read more about the LLM Chain node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.chainllm/)\n\nUses advanced AI to analyze error patterns, identify root causes, and suggest solutions. The structured output parser ensures consistent, actionable analysis that can be automatically processed by downstream systems."
      },
      "typeVersion": 1
    },
    {
      "id": "33c5b3e3-f221-402f-91f2-d766954bc0cc",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -464
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 3. Data Standardization\n[Read more about the Set node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/)\n\nTransforms AI analysis and error data into clean, standardized fields for consistent processing. Creates properly named variables that can be easily used in tickets, notifications, and reports."
      },
      "typeVersion": 1
    },
    {
      "id": "99362779-fb50-4208-8867-80f2db30038a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        16
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 4. Support Ticket Creation\n[Read more about the HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)\n\nAutomatically creates detailed support tickets with AI analysis, error context, and suggested solutions. Ensures no critical errors are overlooked and provides your support team with actionable information."
      },
      "typeVersion": 1
    },
    {
      "id": "be797f46-e4ff-4cab-a12c-c06ec5449278",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -464
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 5. Rich Notification Creation\n[Read more about the Code node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/)\n\nCombines ticket information with AI analysis to create comprehensive Slack notifications. Generates both rich block-formatted messages and text fallbacks for maximum compatibility across devices."
      },
      "typeVersion": 1
    },
    {
      "id": "d26dd783-1baa-43fd-a4a9-eb3cbc19fe00",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 240,
        "content": "## 6. Instant Team Alerts\n[Read more about the Slack node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\nDelivers formatted alerts to your team's Slack channel with error details, AI analysis, solution recommendations, and direct links to both the failed execution and created support ticket."
      },
      "typeVersion": 1
    },
    {
      "id": "8bb77acb-c2d7-4685-a357-d5a614f060ef",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -368
      ],
      "parameters": {
        "color": 3,
        "width": 460,
        "height": 340,
        "content": "### ⚠️ Setup Requirements!\nThis template requires API access to external services which may incur costs:\n\n1. Set up OpenAI API credentials for AI analysis (~$0.01-0.03 per error)\n2. Configure FreshDesk API credentials (or replace with your ticketing system)\n3. Create Slack app with chat:write permissions for your workspace\n4. Replace placeholder channel ID with your actual Slack channel\n5. Test with a simple error first before deploying to production workflows"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "7b64dd18-6f92-46f2-8465-974cc2d3a25c": {
      "main": [
        [
          {
            "node": "cb3430b5-fe77-4cc0-a895-d2f95e4aa598",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d03ba933-d017-41fb-9671-f3334b80a9a1": {
      "main": [
        [
          {
            "node": "e8ea095f-4455-4e89-b29f-76497b41b5b4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e8ea095f-4455-4e89-b29f-76497b41b5b4": {
      "main": [
        [
          {
            "node": "9767ecb1-2782-4cd4-af7e-c7091359baf4",
            "type": "main",
            "index": 0
          },
          {
            "node": "7b64dd18-6f92-46f2-8465-974cc2d3a25c",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "bf182e19-4083-4344-ac68-329663a429c8": {
      "main": [
        [
          {
            "node": "d03ba933-d017-41fb-9671-f3334b80a9a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cb3430b5-fe77-4cc0-a895-d2f95e4aa598": {
      "main": [
        [
          {
            "node": "c1b77e3e-81a2-4c24-a6a1-798637afb053",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9767ecb1-2782-4cd4-af7e-c7091359baf4": {
      "main": [
        [
          {
            "node": "7b64dd18-6f92-46f2-8465-974cc2d3a25c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c1e264c0-33fa-4d41-a02a-5c6e3e37611b": {
      "ai_outputParser": [
        [
          {
            "node": "d03ba933-d017-41fb-9671-f3334b80a9a1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - AI 요약, 멀티모달 AI

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수16
카테고리2
노드 유형9
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34