Construire un catalogue d'erreurs d'API basé sur l'IA : de GitHub vers Airtable, Notion et Slack
Ceci est unTicket Management, AI Summarizationworkflow d'automatisation du domainecontenant 30 nœuds.Utilise principalement des nœuds comme If, Set, Code, Slack, Notion. Détecter et classer automatiquement les erreurs de l'API GitHub vers Airtable, Notion et Slack avec GPT-4o
- •Token Bot Slack ou URL Webhook
- •Clé API Notion
- •Clé API Airtable
- •Personal Access Token GitHub
- •Clé API OpenAI
Nœuds utilisés (30)
Catégorie
{
"id": "gceCBgo6PVxGolsl",
"meta": {
"instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
"templateCredsSetupCompleted": true
},
"name": "Build AI-Powered API Error Catalog from GitHub to Airtable, Notion & Slack",
"tags": [],
"nodes": [
{
"id": "36883e78-6c02-40b3-8749-8f9c2ca8fcfe",
"name": "Configuration du déclencheur",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1760,
-64
],
"parameters": {
"color": 2,
"width": 564,
"height": 376,
"content": "## 🧭 GitHub Issue Trigger \n\nListens for new or updated issues marked “bug” or “error.” \nPrepares clean JSON data (title, body, repo, timestamp) for AI processing.\n"
},
"typeVersion": 1
},
{
"id": "7d3e76db-cb71-4139-8771-734579629862",
"name": "Classification IA",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1168,
-176
],
"parameters": {
"color": 2,
"width": 660,
"height": 680,
"content": "## 🤖 AI Classification & Parsing \n\nAnalyzes the GitHub issue text using GPT-4o. \nExtracts error type, root cause, and severity, then formats structured results for Airtable, Notion, and Slack."
},
"typeVersion": 1
},
{
"id": "5e8dbb53-1a51-4ec8-8147-7bde48282472",
"name": "Analyse de la réponse",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-144
],
"parameters": {
"color": 2,
"width": 416,
"height": 472,
"content": "## ⚙️ Intelligent Routing \n\n\nDecides which team should handle the issue based on AI classification. \nRoutes the data to DevOps, Backend, Support, or API branches automatically."
},
"typeVersion": 1
},
{
"id": "911ab0f0-4a1b-4981-9229-39eff9e5fea5",
"name": "Alertes Slack",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
-352
],
"parameters": {
"color": 2,
"width": 460,
"height": 988,
"content": "## 🗂️ Database Logging \n\nSaves each analyzed error to Airtable and Notion for tracking and documentation. \nMaps standard fields like Error Code, Category, Severity, and Suggested Action."
},
"typeVersion": 1
},
{
"id": "34b1571d-94d4-4c19-83ca-66598c20e5b3",
"name": "Préparer les données d'issue GitHub",
"type": "n8n-nodes-base.set",
"position": [
-1328,
128
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9dfaa4d6-3b16-48e5-8787-36d45fc877d7",
"name": "Issue Title",
"type": "string",
"value": "={{ $json.body.issue.title }}"
},
{
"id": "c1d46bc2-0774-4999-aaa2-80dda17efa9b",
"name": "Issue Body",
"type": "string",
"value": "={{ $json.body.issue.body }}"
},
{
"id": "05f2e592-a943-4fa3-92f7-e635cbd5019b",
"name": "Issue URL",
"type": "string",
"value": "={{ $json.body.issue.html_url }}"
},
{
"id": "6aeef038-6b7e-4953-9a30-518201d90e12",
"name": "Issue Number",
"type": "number",
"value": "={{ $json.body.issue.number }}"
},
{
"id": "ead4db1d-0c1a-49d6-83a7-6368feecbc3c",
"name": "Repository Name",
"type": "string",
"value": "={{ $json.body.repository.full_name }}"
},
{
"id": "0eb094bb-8360-4240-bb60-c1fdf8eebc97",
"name": "Created At",
"type": "string",
"value": "={{ $json.body.repository.created_at }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5bc68cc4-2dd7-4f06-aee1-720003d1a42e",
"name": "Issue GitHub créée/mise à jour",
"type": "n8n-nodes-base.githubTrigger",
"position": [
-1552,
128
],
"webhookId": "api-error-catalog-webhook",
"parameters": {
"owner": {
"__rl": true,
"mode": "url",
"value": "="
},
"events": [
"issues"
],
"options": {},
"repository": {
"__rl": true,
"mode": "url",
"value": "="
},
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "Ih8web2ia8dlggr6",
"name": "GitHub account vivek"
}
},
"typeVersion": 1
},
{
"id": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
"name": "IA : Classifier l'erreur API (GPT-4o)",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1056,
128
],
"parameters": {
"text": "=Analyze this GitHub API error issue:\n\nTitle: {{ $json[\"Issue Title\"] }}\nRepository: {{ $json[\"Repository Name\"] }}\nIssue Number: #{{ $json[\"Issue Number\"] }}\nCreated: {{ $json[\"Created At\"] }}\nURL: {{ $json[\"Issue URL\"] }}\n\nIssue Details:\n{{ $json[\"Issue Body\"] }}\n\nPlease classify this error, identify the root cause, suggest a fix, and determine if it matches any existing FAQ category.",
"options": {
"systemMessage": "=You are an expert API error classification assistant for a SaaS engineering team.\n\nYour responsibilities include:\n1. Analyze GitHub issues related to API errors and exceptions.\n2. Extract and identify error codes, messages, and endpoints.\n3. Classify each error into one of the standard categories:\n - Authentication\n - Server Error\n - Rate Limit\n - Invalid Request\n - Database\n - Network\n - Configuration\n - Other\n4. Determine the root cause based on error patterns and context.\n5. Suggest a clear and actionable fix or next step.\n6. Assign a confidence level for your analysis (high / medium / low).\n7. Determine the severity level of the issue (critical / high / medium / low).\n8. Map the issue to an existing internal FAQ topic if relevant.\n9. Assign the responsible internal team based on the error category:\n - **Backend Team** → Authentication, Database, Server Error\n - **DevOps Team** → Infrastructure, Rate Limit, Network, Deployment\n - **API Team** → Invalid Request, Configuration, Schema or Integration Issues\n - **Support Team** → Other or unclear user-facing errors\n\nAlways respond in **valid JSON** following this exact schema:\n{\n \"errorCode\": \"\",\n \"category\": \"\",\n \"faqMatch\": \"\",\n \"rootCause\": \"\",\n \"suggestedAction\": \"\",\n \"confidence\": \"\",\n \"severity\": \"\",\n \"affectedEndpoint\": \"\",\n \"assignedTeam\": \"\"\n}\n\nBe concise but thorough in your reasoning. Avoid non-JSON text or explanations outside the JSON.\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "481c36b8-cbbe-49c6-9809-e2dc30f6f665",
"name": "Modèle LLM : GPT-4o",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1104,
352
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": ""
},
"options": {
"temperature": 0.7
}
},
"credentials": {
"openAiApi": {
"id": "5Kzt6hGSZ1JHZqWN",
"name": "OpenAi account 2"
}
},
"typeVersion": 1.2
},
{
"id": "ba53d5c2-177f-4ffa-84c8-6c1577c6ce03",
"name": "Analyseur de sortie : Schéma structuré JSON",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-848,
352
],
"parameters": {
"jsonSchemaExample": "{\n \"errorCode\": \"AUTH-401\",\n \"category\": \"Authentication\",\n \"faqMatch\": \"Token Expiry Issues\",\n \"rootCause\": \"Expired access token causing authorization failure on /api/v1/users\",\n \"suggestedAction\": \"Implement token refresh mechanism and validate expiration logic.\",\n \"confidence\": \"high\",\n \"severity\": \"medium\",\n \"affectedEndpoint\": \"/api/v1/users\",\n \"assignedTeam\": \"Backend Team\"\n}\n"
},
"typeVersion": 1.3
},
{
"id": "dba69663-c2b5-4f83-a378-547092bb9100",
"name": "Mémoire tampon IA",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-976,
352
],
"parameters": {
"sessionKey": "\"AI Agent - Error Analyzer\"",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "baa722d9-3f87-4391-83e1-30a39ec1942f",
"name": "Analyser la sortie de classification IA",
"type": "n8n-nodes-base.code",
"position": [
-640,
128
],
"parameters": {
"jsCode": "// Get all input items\nconst items = $input.all();\n\n// Process each item\nconst formattedItems = items.map(item => {\n // Get AI output\n const aiOutput = item.json.output || item.json;\n\n // Get original issue data from earlier node\n const issueData = $('Prepare GitHub Issue Data').first().json || {};\n\n // Format for Airtable, Notion, and Slack\n return {\n json: {\n // Original Issue Data\n issueTitle: issueData.issueTitle || issueData[\"Issue Title\"] || \"Untitled Issue\",\n issueUrl: issueData.issueUrl || issueData[\"Issue URL\"] || \"\",\n issueNumber: issueData.issueNumber || issueData[\"Issue Number\"] || 0,\n issueBody: issueData.issueBody || issueData[\"Issue Body\"] || \"\",\n repoName: issueData.repoName || issueData[\"Repository Name\"] || \"\",\n createdAt: issueData.createdAt || issueData[\"Created At\"] || new Date().toISOString(),\n\n // AI Analysis Results\n errorCode: aiOutput.errorCode || \"UNKNOWN\",\n category: aiOutput.category || \"Uncategorized\",\n faqMatch: aiOutput.faqMatch || \"No FAQ Match\",\n rootCause: aiOutput.rootCause || \"Root cause unknown\",\n suggestedAction: aiOutput.suggestedAction || \"Manual investigation required\",\n confidence: aiOutput.confidence || \"low\",\n severity: aiOutput.severity || \"medium\",\n affectedEndpoint: aiOutput.affectedEndpoint || \"Unknown endpoint\",\n assignedTeam: aiOutput.assignedTeam || \"Unassigned\",\n\n // Additional metadata\n analyzedAt: new Date().toISOString(),\n status: \"pending_review\",\n\n // 🧱 Formatted text for Notion description\n notionDescription: `**Error Code:** ${aiOutput.errorCode}\n**Category:** ${aiOutput.category}\n**Severity:** ${aiOutput.severity}\n**Confidence:** ${aiOutput.confidence}\n**Assigned Team:** ${aiOutput.assignedTeam}\n\n**Root Cause:**\n${aiOutput.rootCause}\n\n**Suggested Action:**\n${aiOutput.suggestedAction}\n\n**Affected Endpoint:**\n${aiOutput.affectedEndpoint}\n\n**Original Issue:**\n${issueData.issueBody || issueData[\"Issue Body\"] || \"\"}`,\n\n // 💬 Formatted text for Slack\n slackMessage: `🚨 *New API Error Analyzed*\n\n*Error Code:* ${aiOutput.errorCode}\n*Category:* ${aiOutput.category}\n*Severity:* ${aiOutput.severity}\n*Confidence:* ${aiOutput.confidence}\n👥 *Assigned Team:* ${aiOutput.assignedTeam}\n\n*FAQ Match:* ${aiOutput.faqMatch}\n\n*Root Cause:*\n${aiOutput.rootCause}\n\n*Suggested Action:*\n${aiOutput.suggestedAction}\n\n*GitHub Issue:* ${issueData.issueUrl || issueData[\"Issue URL\"] || \"N/A\"}\n*Repository:* ${issueData.repoName || issueData[\"Repository Name\"] || \"N/A\"}`,\n\n // 📊 Airtable fields object (ready to use)\n airtableFields: {\n \"Error Code\": aiOutput.errorCode,\n \"Error Category\": aiOutput.category,\n \"FAQ Match\": aiOutput.faqMatch,\n \"Root Cause\": aiOutput.rootCause,\n \"Suggested Action\": aiOutput.suggestedAction,\n \"Confidence\": aiOutput.confidence,\n \"Severity\": aiOutput.severity,\n \"Affected Endpoint\": aiOutput.affectedEndpoint,\n \"Assigned Team\": aiOutput.assignedTeam || \"Unassigned\",\n \"Source URL\": issueData.issueUrl || issueData[\"Issue URL\"] || \"\",\n \"Repository\": issueData.repoName || issueData[\"Repository Name\"] || \"\",\n \"Issue Number\": issueData.issueNumber || issueData[\"Issue Number\"] || 0,\n \"Status\": \"New\",\n \"Created At\": new Date().toISOString()\n }\n }\n };\n});\n\nreturn formattedItems;\n"
},
"typeVersion": 2
},
{
"id": "fc8db243-9c6a-417f-a538-1c6c3dbc747b",
"name": "Vérifier : Réponse IA valide ou données manquantes",
"type": "n8n-nodes-base.if",
"position": [
-416,
128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "32a385f7-3200-4e72-9730-555b90a42751",
"operator": {
"type": "string",
"operation": "isEmpty"
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
},
{
"id": "0eca57c7-3933-4f19-856a-7f0d4dc08902",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.airtableFields }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "8cd461a6-208e-4ff1-8fe5-744227986bd8",
"name": "Router par équipe assignée",
"type": "n8n-nodes-base.switch",
"position": [
-192,
96
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6fca3214-bd0f-4b4e-9acc-c6806e43584c",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.assignedTeam }}",
"rightValue": "DevOps Team"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d416b5a4-a371-4f26-b46c-e7e2f8a5b8e3",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.assignedTeam }}",
"rightValue": "Backend Team"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "b294f578-9eef-41db-99a4-63372b575be0",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.assignedTeam }}",
"rightValue": "Support Team"
}
]
}
},
{
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8d5d93bb-502e-41c5-9df8-18410f493e0e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.assignedTeam }}",
"rightValue": "API Team"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.3
},
{
"id": "51f79f94-dc6c-41df-984d-fe25efb895ff",
"name": "Airtable : Créer un enregistrement (DevOps)",
"type": "n8n-nodes-base.airtable",
"position": [
32,
-160
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": ""
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZvyR7J8hndLlUZ",
"cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"Name": "={{ $json.issueTitle }}",
"Status": "Todo",
"Severity": "={{ $json.severity }}",
"FAQ Match": "={{ $json.faqMatch }}",
"Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
"Repository": "={{ $json.airtableFields.Repository }}",
"Root Cause": "={{ $json.rootCause }}",
"Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
"Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
"Suggested Action": "={{ $json.suggestedAction }}",
"Affected Endpoint": "={{ $json.affectedEndpoint }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignee",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Assignee",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Todo",
"value": "Todo"
},
{
"name": "In progress",
"value": "In progress"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachments",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachments",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachment Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachment Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Code",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Category",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "FAQ Match",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "FAQ Match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Root Cause",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Root Cause",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Suggested Action",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Suggested Action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Confidence",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Severity",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Severity",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Affected Endpoint",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Affected Endpoint",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Source URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repository",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Repository",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Issue Number",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Issue Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "nWc9JHR6t25WPWVV",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2
},
{
"id": "be976a3b-ab8e-4095-9ba1-b36d47bc6817",
"name": "Notion : Journaliser l'issue (DevOps)",
"type": "n8n-nodes-base.notion",
"position": [
256,
-160
],
"parameters": {
"title": "={{ $json.fields.Name }}",
"simple": false,
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "url",
"value": ""
},
"propertiesUi": {
"propertyValues": [
{
"key": "Status|status",
"statusValue": "Todo"
},
{
"key": "Error Category|select",
"selectValue": "={{ $json.fields[\"Error Category\"] }}"
},
{
"key": "FAQ Match|rich_text",
"textContent": "={{ $json.fields[\"FAQ Match\"] }}"
},
{
"key": "Root Cause|rich_text",
"textContent": "={{ $json.fields[\"Root Cause\"] }}"
},
{
"key": "Suggested Action|rich_text",
"textContent": "={{ $json.fields[\"Suggested Action\"] }}"
},
{
"key": "Severity|select",
"selectValue": "High"
},
{
"key": "Affected Endpoint|rich_text",
"textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
},
{
"key": "Source URL|url",
"urlValue": "={{ $json.fields[\"Source URL\"] }}"
},
{
"key": "Repository|rich_text",
"textContent": "={{ $json.fields.Repository }}"
},
{
"key": "Created At|date",
"date": "={{ $json.fields[\"Created At\"] }}"
}
]
}
},
"credentials": {
"notionApi": {
"id": "E9jA8DFWT2IxdpMU",
"name": "Notion account Vivek"
}
},
"typeVersion": 2.2
},
{
"id": "63b1b8c7-f049-45e7-9985-ed0da37a66c2",
"name": "Notification Slack : Équipe DevOps",
"type": "n8n-nodes-base.slack",
"position": [
480,
-160
],
"webhookId": "4fdaef14-d3a3-4e8b-af66-ec277655146d",
"parameters": {
"text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
},
{
"id": "294932fc-d262-4915-98d1-be5d4a2357c5",
"name": "Notion : Journaliser l'issue (Backend)",
"type": "n8n-nodes-base.notion",
"position": [
32,
32
],
"parameters": {
"title": "={{ $json.airtableFields[\"Error Code\"] }}",
"simple": false,
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "url",
"value": ""
},
"propertiesUi": {
"propertyValues": [
{
"key": "Status|status",
"statusValue": "Todo"
},
{
"key": "Error Category|select",
"selectValue": "={{ $json.airtableFields[\"Error Category\"] }}"
},
{
"key": "FAQ Match|rich_text",
"textContent": "={{ $json.airtableFields[\"FAQ Match\"] }}"
},
{
"key": "Root Cause|rich_text",
"textContent": "={{ $json.airtableFields[\"Root Cause\"] }}"
},
{
"key": "Suggested Action|rich_text",
"textContent": "={{ $json.airtableFields[\"Suggested Action\"] }}"
},
{
"key": "Severity|select",
"selectValue": "High"
},
{
"key": "Affected Endpoint|rich_text",
"textContent": "={{ $json.airtableFields[\"Affected Endpoint\"] }}"
},
{
"key": "Source URL|url",
"urlValue": "={{ $json.airtableFields[\"Source URL\"] }}"
},
{
"key": "Repository|rich_text",
"textContent": "={{ $json.airtableFields.Repository }}"
},
{
"key": "Created At|date",
"date": "={{ $json.airtableFields[\"Created At\"] }}"
}
]
}
},
"credentials": {
"notionApi": {
"id": "E9jA8DFWT2IxdpMU",
"name": "Notion account Vivek"
}
},
"typeVersion": 2.2
},
{
"id": "924557fe-310e-43d9-a477-50e195ea9a38",
"name": "Notification Slack : Équipe Backend",
"type": "n8n-nodes-base.slack",
"position": [
256,
32
],
"webhookId": "4fdaef14-d3a3-4e8b-af66-ec277655146d",
"parameters": {
"text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
},
{
"id": "f2160801-0978-4a63-8bba-07b44f075606",
"name": "Airtable : Créer un enregistrement (Support)",
"type": "n8n-nodes-base.airtable",
"position": [
32,
224
],
"parameters": {
"base": {
"__rl": true,
"mode": "url",
"value": ""
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZvyR7J8hndLlUZ",
"cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"Name": "={{ $json.issueTitle }}",
"Status": "Todo",
"Severity": "={{ $json.severity }}",
"FAQ Match": "={{ $json.faqMatch }}",
"Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
"Repository": "={{ $json.airtableFields.Repository }}",
"Root Cause": "={{ $json.rootCause }}",
"Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
"Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
"Suggested Action": "={{ $json.suggestedAction }}",
"Affected Endpoint": "={{ $json.affectedEndpoint }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignee",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Assignee",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Todo",
"value": "Todo"
},
{
"name": "In progress",
"value": "In progress"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachments",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachments",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachment Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachment Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Code",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Category",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "FAQ Match",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "FAQ Match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Root Cause",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Root Cause",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Suggested Action",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Suggested Action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Confidence",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Severity",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Severity",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Affected Endpoint",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Affected Endpoint",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Source URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repository",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Repository",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Issue Number",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Issue Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "nWc9JHR6t25WPWVV",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2
},
{
"id": "c3bcb44a-b3ce-4da0-8fd3-507dad3d1a99",
"name": "Notification Slack : Équipe Support",
"type": "n8n-nodes-base.slack",
"position": [
480,
224
],
"webhookId": "4fdaef14-d3a3-4e8b-af66-ec277655146d",
"parameters": {
"text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (Support)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (Support)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (Support)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:* {{ $('Airtable: Create Record (Support)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
},
{
"id": "89a3e79b-89a9-498e-86cd-9fc06a920889",
"name": "Airtable : Créer un enregistrement (Équipe API)",
"type": "n8n-nodes-base.airtable",
"position": [
32,
416
],
"parameters": {
"base": {
"__rl": true,
"mode": "url",
"value": ""
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZvyR7J8hndLlUZ",
"cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"Name": "={{ $json.issueTitle }}",
"Status": "Todo",
"Severity": "={{ $json.severity }}",
"FAQ Match": "={{ $json.faqMatch }}",
"Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
"Repository": "={{ $json.airtableFields.Repository }}",
"Root Cause": "={{ $json.rootCause }}",
"Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
"Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
"Suggested Action": "={{ $json.suggestedAction }}",
"Affected Endpoint": "={{ $json.affectedEndpoint }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignee",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Assignee",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Todo",
"value": "Todo"
},
{
"name": "In progress",
"value": "In progress"
},
{
"name": "Done",
"value": "Done"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachments",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachments",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Attachment Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Attachment Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Code",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Error Category",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Error Category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "FAQ Match",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "FAQ Match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Root Cause",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Root Cause",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Suggested Action",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Suggested Action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Confidence",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Severity",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Severity",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Affected Endpoint",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Affected Endpoint",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Source URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Source URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repository",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Repository",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Issue Number",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Issue Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created At",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created At",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "nWc9JHR6t25WPWVV",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2
},
{
"id": "e619b7fc-f78b-4899-af27-a97d73578515",
"name": "Notion : Journaliser l'issue (Équipe Support)",
"type": "n8n-nodes-base.notion",
"position": [
256,
224
],
"parameters": {
"title": "={{ $json.fields.Name }}",
"simple": false,
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "url",
"value": ""
},
"propertiesUi": {
"propertyValues": [
{
"key": "Status|status",
"statusValue": "Todo"
},
{
"key": "Error Category|select",
"selectValue": "={{ $json.fields[\"Error Category\"] }}"
},
{
"key": "FAQ Match|rich_text",
"textContent": "={{ $json.fields[\"FAQ Match\"] }}"
},
{
"key": "Root Cause|rich_text",
"textContent": "={{ $json.fields[\"Root Cause\"] }}"
},
{
"key": "Suggested Action|rich_text",
"textContent": "={{ $json.fields[\"Suggested Action\"] }}"
},
{
"key": "Severity|select",
"selectValue": "High"
},
{
"key": "Affected Endpoint|rich_text",
"textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
},
{
"key": "Source URL|url",
"urlValue": "={{ $json.fields[\"Source URL\"] }}"
},
{
"key": "Repository|rich_text",
"textContent": "={{ $json.fields.Repository }}"
},
{
"key": "Created At|date",
"date": "={{ $json.fields[\"Created At\"] }}"
}
]
}
},
"credentials": {
"notionApi": {
"id": "E9jA8DFWT2IxdpMU",
"name": "Notion account Vivek"
}
},
"typeVersion": 2.2
},
{
"id": "eaded3ea-f394-45f8-ad39-cdb71ee40e56",
"name": "Notion : Journaliser l'issue (Équipe API)",
"type": "n8n-nodes-base.notion",
"position": [
256,
416
],
"parameters": {
"title": "={{ $json.fields.Name }}",
"simple": false,
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "url",
"value": ""
},
"propertiesUi": {
"propertyValues": [
{
"key": "Status|status",
"statusValue": "Todo"
},
{
"key": "Error Category|select",
"selectValue": "={{ $json.fields[\"Error Category\"] }}"
},
{
"key": "FAQ Match|rich_text",
"textContent": "={{ $json.fields[\"FAQ Match\"] }}"
},
{
"key": "Root Cause|rich_text",
"textContent": "={{ $json.fields[\"Root Cause\"] }}"
},
{
"key": "Suggested Action|rich_text",
"textContent": "={{ $json.fields[\"Suggested Action\"] }}"
},
{
"key": "Severity|select",
"selectValue": "High"
},
{
"key": "Affected Endpoint|rich_text",
"textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
},
{
"key": "Source URL|url",
"urlValue": "={{ $json.fields[\"Source URL\"] }}"
},
{
"key": "Repository|rich_text",
"textContent": "={{ $json.fields.Repository }}"
},
{
"key": "Created At|date",
"date": "={{ $json.fields[\"Created At\"] }}"
}
]
}
},
"credentials": {
"notionApi": {
"id": "E9jA8DFWT2IxdpMU",
"name": "Notion account Vivek"
}
},
"typeVersion": 2.2
},
{
"id": "5f83906a-f47d-4fad-99d8-916ddf9249c7",
"name": "Notifier l'équipe API",
"type": "n8n-nodes-base.slack",
"position": [
480,
416
],
"webhookId": "4fdaef14-d3a3-4e8b-af66-ec277655146d",
"parameters": {
"text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (API Team)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (API Team)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (API Team)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:* {{ $('Airtable: Create Record (API Team)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.1
},
{
"id": "72f825c7-add5-49b8-9458-dd4fa4e916b7",
"name": "Déclencheur de gestionnaire d'erreurs",
"type": "n8n-nodes-base.errorTrigger",
"position": [
-1616,
640
],
"parameters": {},
"typeVersion": 1
},
{
"id": "eb4f81f3-7256-4624-b8f5-a8050effbd57",
"name": "Slack : Envoyer une alerte d'erreur",
"type": "n8n-nodes-base.slack",
"position": [
-1408,
640
],
"webhookId": "d5eff2c3-ff6e-4116-bdda-59455acd861b",
"parameters": {
"text": "=❌ *Error in API Error Catalog Workflow* *Node:* {{ $json.node.name }} *Message:* {{ $json.error.message }} *Time:* {{ $json.timestamp }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": ""
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.3
},
{
"id": "7c0f800e-2632-4c48-b0ab-da4672f352ae",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1888,
496
],
"parameters": {
"color": 2,
"width": 672,
"height": 336,
"content": "## 🚨 Error Handling \n\n \nCatches any workflow failure and posts an alert to Slack. \nIncludes node name, error message, and timestamp for quick debugging.\n"
},
"typeVersion": 1
},
{
"id": "07514bfc-fd27-44e9-b269-25ef437daa3e",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1776,
-592
],
"parameters": {
"width": 512,
"height": 416,
"content": "## 🧩 Build AI-Powered API Error Catalog \n### How it works\nThis workflow automatically listens for new GitHub issues labeled as “bug” or “error”, classifies them with OpenAI GPT-4o, and logs structured insights into Airtable, Notion, and Slack. \nIt routes each issue to the correct internal team (DevOps, Backend, Support, or API) and provides an AI-suggested fix and FAQ match.\n\n### Setup steps\n1. Connect your **GitHub** account and select your repository.\n2. Add your **OpenAI** credentials (GPT-4o or GPT-4o-mini).\n3. Connect **Airtable** and create a table with matching field names.\n4. Connect **Notion** and select your database (status, category, etc.).\n5. Connect **Slack** and set your target channel IDs.\n6. Run once manually to initialize webhook triggers.\n"
},
"typeVersion": 1
},
{
"id": "616d9e85-fd78-40be-9508-1aea10a8896f",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
-352
],
"parameters": {
"color": 2,
"height": 976,
"content": "## 💬 Slack Alerts \nSends team-specific alerts summarizing the error, category, and recommended fix. \nHelps each team act quickly on critical issues."
},
"typeVersion": 1
},
{
"id": "8f53d912-7112-4496-bbee-a5c084fc3765",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
-592
],
"parameters": {
"width": 320,
"height": 272,
"content": "## 🔐 Credentials & Security\n\n \n- Use OAuth2 for GitHub and Slack. \n- API Keys for OpenAI, Airtable, and Notion. \n- Remove personal IDs or base URLs before publishing. \n- Test with dummy accounts before sharing the workflow.\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "7b4afc5d-daca-4124-ac02-953beffca4a2",
"connections": {
"dba69663-c2b5-4f83-a378-547092bb9100": {
"ai_memory": [
[
{
"node": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
"type": "ai_memory",
"index": 0
}
]
]
},
"481c36b8-cbbe-49c6-9809-e2dc30f6f665": {
"ai_languageModel": [
[
{
"node": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"72f825c7-add5-49b8-9458-dd4fa4e916b7": {
"main": [
[
{
"node": "eb4f81f3-7256-4624-b8f5-a8050effbd57",
"type": "main",
"index": 0
}
]
]
},
"8cd461a6-208e-4ff1-8fe5-744227986bd8": {
"main": [
[
{
"node": "51f79f94-dc6c-41df-984d-fe25efb895ff",
"type": "main",
"index": 0
}
],
[
{
"node": "294932fc-d262-4915-98d1-be5d4a2357c5",
"type": "main",
"index": 0
}
],
[
{
"node": "f2160801-0978-4a63-8bba-07b44f075606",
"type": "main",
"index": 0
}
],
[
{
"node": "89a3e79b-89a9-498e-86cd-9fc06a920889",
"type": "main",
"index": 0
}
]
]
},
"34b1571d-94d4-4c19-83ca-66598c20e5b3": {
"main": [
[
{
"node": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
"type": "main",
"index": 0
}
]
]
},
"be976a3b-ab8e-4095-9ba1-b36d47bc6817": {
"main": [
[
{
"node": "63b1b8c7-f049-45e7-9985-ed0da37a66c2",
"type": "main",
"index": 0
}
]
]
},
"294932fc-d262-4915-98d1-be5d4a2357c5": {
"main": [
[
{
"node": "924557fe-310e-43d9-a477-50e195ea9a38",
"type": "main",
"index": 0
}
]
]
},
"5bc68cc4-2dd7-4f06-aee1-720003d1a42e": {
"main": [
[
{
"node": "34b1571d-94d4-4c19-83ca-66598c20e5b3",
"type": "main",
"index": 0
}
]
]
},
"eaded3ea-f394-45f8-ad39-cdb71ee40e56": {
"main": [
[
{
"node": "5f83906a-f47d-4fad-99d8-916ddf9249c7",
"type": "main",
"index": 0
}
]
]
},
"baa722d9-3f87-4391-83e1-30a39ec1942f": {
"main": [
[
{
"node": "fc8db243-9c6a-417f-a538-1c6c3dbc747b",
"type": "main",
"index": 0
}
]
]
},
"6ac5f56a-aa1b-4236-a8df-ce3d242721c1": {
"main": [
[
{
"node": "baa722d9-3f87-4391-83e1-30a39ec1942f",
"type": "main",
"index": 0
}
]
]
},
"51f79f94-dc6c-41df-984d-fe25efb895ff": {
"main": [
[
{
"node": "be976a3b-ab8e-4095-9ba1-b36d47bc6817",
"type": "main",
"index": 0
}
]
]
},
"e619b7fc-f78b-4899-af27-a97d73578515": {
"main": [
[
{
"node": "c3bcb44a-b3ce-4da0-8fd3-507dad3d1a99",
"type": "main",
"index": 0
}
]
]
},
"f2160801-0978-4a63-8bba-07b44f075606": {
"main": [
[
{
"node": "e619b7fc-f78b-4899-af27-a97d73578515",
"type": "main",
"index": 0
}
]
]
},
"89a3e79b-89a9-498e-86cd-9fc06a920889": {
"main": [
[
{
"node": "eaded3ea-f394-45f8-ad39-cdb71ee40e56",
"type": "main",
"index": 0
}
]
]
},
"ba53d5c2-177f-4ffa-84c8-6c1577c6ce03": {
"ai_outputParser": [
[
{
"node": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"fc8db243-9c6a-417f-a538-1c6c3dbc747b": {
"main": [
[
{
"node": "8cd461a6-208e-4ff1-8fe5-744227986bd8",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Gestion des tickets, Résumé IA
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Rahul Joshi
@rahul08Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.
Partager ce workflow