Automatización de soporte con IA basada en Outlook, OpenAI y JIRA
Este es unTicket Management, Multimodal AIflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como If, Jira, Gmail, Webhook, Function. Sistema de automatización con soporte de AI, integrando Outlook, OpenAI y tickets de JIRA
- •Cuenta de Google y credenciales de API de Gmail
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Clave de API de OpenAI
Nodos utilizados (18)
Categoría
{
"meta": {
"instanceId": "54727bff0f5eeffb7bf9295509a4e3003a61b32ef52459f329ae99e7b5243230"
},
"nodes": [
{
"id": "b28b477c-281c-4371-9bc6-e9cdff0623cb",
"name": "Outlook Trigger1",
"type": "n8n-nodes-base.microsoftOutlook",
"position": [
-48,
1344
],
"webhookId": "d22fa384-f0e1-411f-bb06-867458d1a22c",
"parameters": {
"options": {},
"filtersUI": {
"values": {
"filters": {
"receivedAfter": "={{ $now.minus({ minutes: 30 }).toISO() }}"
}
}
},
"operation": "getAll"
},
"typeVersion": 2
},
{
"id": "51e582d1-d8ea-43f1-8db8-d8af869b41fe",
"name": "Disparador Webhook Trigger1",
"type": "n8n-nodes-base.webhook",
"position": [
-48,
1104
],
"webhookId": "f319cf3f-aad0-487d-b4a1-897ac7545efe",
"parameters": {
"path": "support",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1.1
},
{
"id": "96a9a667-47e9-4103-b3ff-239a2fe0b888",
"name": "Normalize Data1",
"type": "n8n-nodes-base.function",
"position": [
160,
1232
],
"parameters": {
"functionCode": "const data = $input.all();\nconst result = [];\n\nfor (const item of data) {\n let normalized = {\n source: item.json.from ? 'email' : 'webhook',\n email: item.json.from?.emailAddress?.address || item.json.email,\n name: item.json.from?.emailAddress?.name || item.json.name,\n subject: item.json.subject || 'Web Request',\n message: item.json.body?.content || item.json.message,\n timestamp: new Date().toISOString()\n };\n result.push({ json: normalized });\n}\n\nreturn result;"
},
"typeVersion": 1
},
{
"id": "b6447498-d7ad-4733-bcd7-bbf0bae1cb1e",
"name": "Eliminar duplicados1",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
368,
1232
],
"parameters": {
"options": {},
"operation": "removeItemsSeenInPreviousExecutions",
"dedupeValue": "={{ $json.email + $json.subject }}"
},
"typeVersion": 2
},
{
"id": "37505804-f4a2-445f-b751-bd4b5aa98062",
"name": "OpenAI Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
576,
1424
],
"parameters": {
"model": {
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "d8a47dc8-7baa-414f-9ffb-c36f1ee87294",
"name": "JSON Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
768,
1424
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"category\": {\"type\": \"string\"},\n \"urgency\": {\"type\": \"string\"},\n \"expertise\": {\"type\": \"string\"},\n \"canAutoResolve\": {\"type\": \"boolean\"},\n \"isVIP\": {\"type\": \"boolean\"}\n }\n}"
},
"typeVersion": 1.2
},
{
"id": "8210bcfa-c0f1-4329-a7ba-8d3b0fa3e3ac",
"name": "Route Decision1",
"type": "n8n-nodes-base.if",
"position": [
928,
1232
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ff7f1bf0-0ce3-4eb3-a9de-1675a785f2c2",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "3ef69825-72c7-4d8c-9009-eba6a7591c19",
"name": "Auto Response1",
"type": "n8n-nodes-base.microsoftOutlook",
"position": [
1184,
1056
],
"webhookId": "3d561e9a-2aaa-425b-8f3b-e0d9b51bed5f",
"parameters": {
"operation": "sendMessage"
},
"typeVersion": 2
},
{
"id": "1bfa088a-9721-4975-a7b0-cea8d6225114",
"name": "Assign Agente1",
"type": "n8n-nodes-base.function",
"position": [
1184,
1328
],
"parameters": {
"functionCode": "const request = $json;\nconst expertise = request.output.expertise;\nconst isVIP = request.output.isVIP;\nconst urgency = request.output.urgency;\n\n// Agent assignment logic\nconst agents = {\n 'frontend': 'john@company.com',\n 'backend': 'sarah@company.com',\n 'business': 'lisa@company.com',\n 'support': 'tom@company.com'\n};\n\nconst assignedAgent = agents[expertise] || agents['support'];\n\n// SLA calculation\nconst slaHours = {\n 'critical': isVIP ? 1 : 2,\n 'high': isVIP ? 4 : 8,\n 'medium': isVIP ? 8 : 24,\n 'low': 24\n};\n\nreturn [{\n json: {\n ...request,\n assignedAgent,\n slaHours: slaHours[urgency],\n priority: urgency === 'critical' ? 1 : urgency === 'high' ? 2 : 3\n }\n}];"
},
"typeVersion": 1
},
{
"id": "53f8485b-5287-433a-b7b7-e2e6356fd7ed",
"name": "Create JIRA Ticket1",
"type": "n8n-nodes-base.jira",
"position": [
1360,
1328
],
"parameters": {
"project": {
"value": "SUP"
},
"summary": "{{ $json.subject }}",
"issueType": {
"value": "Task"
},
"additionalFields": {
"labels": [
"{{ $json.output.category }}",
"{{ $json.source }}"
],
"assignee": {
"value": "{{ $json.assignedAgent }}"
},
"priority": {
"value": "{{ $json.priority }}"
},
"description": "Customer: {{ $json.name }} ({{ $json.email }})\nSource: {{ $json.source }}\nCategory: {{ $json.output.category }}\nUrgency: {{ $json.output.urgency }}\n{{ $json.output.isVIP ? 'VIP CUSTOMER' : '' }}\n\nMessage:\n{{ $json.message }}"
}
},
"typeVersion": 1
},
{
"id": "6d76ea6d-050c-4e36-a217-f6efd492217b",
"name": "Send Confirmation1",
"type": "n8n-nodes-base.gmail",
"position": [
1536,
1328
],
"webhookId": "909c81d1-fb58-4349-b978-0966e5d93e3b",
"parameters": {
"message": "Dear {{ $json.name }},\n\nYour support request has been received and assigned ticket #{{ $json.ticketKey }}.\n\nPriority: {{ $json.output.urgency }}{{ $json.output.isVIP ? ' (VIP)' : '' }}\nAssigned to: {{ $json.assignedAgent }}\nExpected response: {{ $json.slaHours }} hours\n\nWe'll update you as we work on your request.\n\nBest regards,\nSupport Team",
"options": {},
"subject": "Support Ticket Created - {{ $json.subject }}"
},
"typeVersion": 2.1
},
{
"id": "9811b90f-39a8-4c9d-9472-5ae94c29aa97",
"name": "Disparador Webhook Response1",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1728,
1056
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"status\": \"success\",\n \"message\": \"Request processed\",\n \"ticketId\": \"{{ $json.ticketKey || 'AUTO_RESOLVED' }}\"\n}"
},
"typeVersion": 1.1
},
{
"id": "2c96f390-163c-4b2a-8a69-ad53ffbfdd17",
"name": "AI Classifier2",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
592,
1232
],
"parameters": {
"text": "Subject: {{ $json.subject }}\nMessage: {{ $json.message }}\nFrom: {{ $json.name }} ({{ $json.email }})",
"messages": {
"messageValues": [
{
"message": "Classify this support request. Return JSON with:\n{\n \"category\": \"technical|billing|account|feature\",\n \"urgency\": \"critical|high|medium|low\",\n \"expertise\": \"frontend|backend|support|business\",\n \"canAutoResolve\": true|false,\n \"isVIP\": true|false\n}\n\nVIP indicators: enterprise email domains, mentions of \"enterprise\", \"premium\", urgent language.\nAuto-resolve: simple how-to questions, password resets, basic billing questions."
}
]
},
"hasOutputParser": true
},
"typeVersion": 1.6
},
{
"id": "ea4bb972-004b-4214-b9a7-4a0fe0ce014d",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
528
],
"parameters": {
"color": 3,
"width": 464,
"height": 336,
"content": "## SMART SUPPORT AGENT\n\nThis workflow handles support requests from:\n- Outlook emails (shared inbox)\n- Web forms (webhook endpoint)\n\n### KEY FEATURES:\n✅ AI-powered classification\n✅ Auto-resolution for simple issues\n✅ Smart agent routing\n✅ SLA tracking\n"
},
"typeVersion": 1
},
{
"id": "23bd9e14-7a5a-4ac0-82da-8c901f422557",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
880
],
"parameters": {
"color": 3,
"width": 464,
"height": 400,
"content": "### CUSTOMIZE FOR YOUR TEAM\n\nSTEP 1: Update \"Assign Agent\" node\n→ Edit function code\n→ Replace email addresses with your team\n\nSTEP 2: Modify JIRA settings\n→ \"Create JIRA Ticket\" node\n→ Change project key from \"SUP\"\n→ Update issue types if needed\n\nSTEP 3: Adjust SLA times\n→ In \"Assign Agent\" function\n→ Modify slaHours object values\n\nSTEP 4: Test webhook endpoint\n→ https://your-n8n.com/webhook/support"
},
"typeVersion": 1
},
{
"id": "40549f86-6fc2-427c-b382-944c5f321fb3",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
528,
528
],
"parameters": {
"width": 352,
"height": 1056,
"content": "### AI CLASSIFICATION TIPS\n\nThe AI determines:\n- Category (technical/billing/account/feature)\n- Urgency (critical/high/medium/low) \n- Who should handle it\n- If it can be auto-resolved\n\nTO IMPROVE ACCURACY:\n→ Add examples to the prompt\n→ Include your product-specific terms\n→ Train with your actual tickets\n\nVIP DETECTION:\nCurrently looks for enterprise domains\n→ Customize in the prompt!"
},
"typeVersion": 1
},
{
"id": "97a5075b-315d-406b-9e43-bf1f448eee67",
"name": "Nota adhesiva3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1104,
528
],
"parameters": {
"width": 288,
"height": 688,
"content": "### AUTO-RESOLUTION WORKS FOR:\n\n✅ Password reset requests\n✅ \"Where is my invoice?\" \n✅ Basic how-to questions\n✅ Documentation requests\n✅ Simple account questions\n\n### NEVER AUTO-RESOLVES:\n- Billing disputes\n- Security issues \n- Bug reports\n- VIP customer requests\n- Complex technical problems\n\nCUSTOMIZE: Edit the AI prompt to match your support patterns!"
},
"typeVersion": 1
},
{
"id": "6919f336-fc6b-4c46-b1dd-222b426c23cb",
"name": "Nota adhesiva4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-176,
528
],
"parameters": {
"width": 336,
"height": 752,
"content": "### WEBHOOK INTEGRATION\n\nENDPOINT: /webhook/support\nMETHOD: POST\n\nREQUIRED FIELDS:\n{\n \"email\": \"customer@company.com\",\n \"name\": \"Customer Name\", \n \"message\": \"Support request text\"\n}\n\nOPTIONAL FIELDS:\n{\n \"subject\": \"Custom subject\",\n \"priority\": \"high\",\n \"source\": \"website\"\n}\n\nINTEGRATE WITH:\n- Contact forms\n- Chat widgets\n- Mobile apps\n- Other systems\n\nReturns: {\"status\":\"success\", \"ticketId\":\"...\"}"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"d8a47dc8-7baa-414f-9ffb-c36f1ee87294": {
"ai_outputParser": [
[
{
"node": "2c96f390-163c-4b2a-8a69-ad53ffbfdd17",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Assign Agent1": {
"main": [
[
{
"node": "53f8485b-5287-433a-b7b7-e2e6356fd7ed",
"type": "main",
"index": 0
}
]
]
},
"37505804-f4a2-445f-b751-bd4b5aa98062": {
"ai_languageModel": [
[
{
"node": "2c96f390-163c-4b2a-8a69-ad53ffbfdd17",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"2c96f390-163c-4b2a-8a69-ad53ffbfdd17": {
"main": [
[
{
"node": "8210bcfa-c0f1-4329-a7ba-8d3b0fa3e3ac",
"type": "main",
"index": 0
}
]
]
},
"3ef69825-72c7-4d8c-9009-eba6a7591c19": {
"main": [
[
{
"node": "Webhook Response1",
"type": "main",
"index": 0
}
]
]
},
"96a9a667-47e9-4103-b3ff-239a2fe0b888": {
"main": [
[
{
"node": "Remove Duplicates1",
"type": "main",
"index": 0
}
]
]
},
"8210bcfa-c0f1-4329-a7ba-8d3b0fa3e3ac": {
"main": [
[
{
"node": "3ef69825-72c7-4d8c-9009-eba6a7591c19",
"type": "main",
"index": 0
}
],
[
{
"node": "Assign Agent1",
"type": "main",
"index": 0
}
]
]
},
"b28b477c-281c-4371-9bc6-e9cdff0623cb": {
"main": [
[
{
"node": "96a9a667-47e9-4103-b3ff-239a2fe0b888",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger1": {
"main": [
[
{
"node": "96a9a667-47e9-4103-b3ff-239a2fe0b888",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicates1": {
"main": [
[
{
"node": "2c96f390-163c-4b2a-8a69-ad53ffbfdd17",
"type": "main",
"index": 0
}
]
]
},
"6d76ea6d-050c-4e36-a217-f6efd492217b": {
"main": [
[
{
"node": "Webhook Response1",
"type": "main",
"index": 0
}
]
]
},
"53f8485b-5287-433a-b7b7-e2e6356fd7ed": {
"main": [
[
{
"node": "6d76ea6d-050c-4e36-a217-f6efd492217b",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Gestión de tickets, IA Multimodal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Annie To
@anniethCompartir este flujo de trabajo