Mi Flujo 2
Este es unTicket Management, AI Summarizationflujo de automatización del dominio deautomatización que contiene 15 nodos.Utiliza principalmente nodos como If, Code, Slack, Webhook, GoogleSheets. Construye un panel de análisis de boletines de soporte usando ScrapeGraphAI, Google Sheets y alertas de Slack
- •Bot Token de Slack o URL de Webhook
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Credenciales de API de Google Sheets
Nodos utilizados (15)
Categoría
{
"id": "VhEwspDqzu7ssFVE",
"meta": {
"instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3"
},
"name": "My workflow 2",
"tags": [],
"nodes": [
{
"id": "3b4ed448-99f2-41f3-b7fc-e5397dc6fac8",
"name": "Activador de Monitor de Soporte Automatizado",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-288,
608
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "51925e8e-1ff5-435a-8454-1511b9e94f52",
"name": "Activador de Ticket de Soporte Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-288,
400
],
"webhookId": "support-ticket-webhook",
"parameters": {
"path": "support-ticket-webhook",
"options": {
"noResponseBody": false
},
"httpMethod": "POST"
},
"typeVersion": 1.1
},
{
"id": "1216484d-7002-4116-a265-70ef1f20fe65",
"name": "Rastreador de Panel de Soporte con IA",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
128,
304
],
"parameters": {
"userPrompt": "Extract all open support tickets from this support dashboard. Focus on ticket details, customer information, and current status. Use this schema for response: { \"request_id\": \"unique_id\", \"status\": \"completed\", \"platform\": \"Support System\", \"tickets\": [{ \"ticket_id\": \"TICKET-12345\", \"customer_name\": \"John Smith\", \"customer_email\": \"john@company.com\", \"customer_tier\": \"Premium\", \"subject\": \"Login Issues\", \"description\": \"Full ticket description here\", \"category\": \"Technical\", \"priority\": \"High\", \"status\": \"Open\", \"created_date\": \"2024-01-15T10:30:00Z\", \"last_updated\": \"2024-01-15T14:20:00Z\", \"assigned_agent\": \"Agent Name\", \"tags\": [\"login\", \"authentication\"], \"customer_satisfaction_score\": null, \"response_count\": 3, \"escalated\": false, \"sla_breach\": false, \"estimated_resolution_time\": \"2024-01-16T10:30:00Z\" }] }",
"websiteUrl": "https://your-support-system.com/tickets/dashboard?status=open"
},
"typeVersion": 1
},
{
"id": "ca23168f-68a1-48a3-af78-493f32b57270",
"name": "Analizador de Tickets Cerrados con IA",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
128,
512
],
"parameters": {
"userPrompt": "Extract recently closed support tickets for performance analysis. Focus on resolution metrics and customer feedback. Use this schema: { \"request_id\": \"unique_id\", \"status\": \"completed\", \"platform\": \"Support System\", \"tickets\": [{ \"ticket_id\": \"TICKET-67890\", \"customer_name\": \"Jane Doe\", \"customer_email\": \"jane@company.com\", \"customer_tier\": \"Standard\", \"subject\": \"Billing Question\", \"description\": \"Full ticket description\", \"category\": \"Billing\", \"priority\": \"Medium\", \"status\": \"Closed\", \"created_date\": \"2024-01-14T09:00:00Z\", \"closed_date\": \"2024-01-15T11:30:00Z\", \"resolution_time_hours\": 26.5, \"assigned_agent\": \"Agent Name\", \"customer_satisfaction_score\": 4.5, \"resolution_summary\": \"Issue resolved by updating billing information\", \"tags\": [\"billing\", \"account\"], \"first_response_time_minutes\": 15, \"total_responses\": 5, \"escalated\": false }] }",
"websiteUrl": "https://your-support-system.com/tickets/closed?period=24h"
},
"typeVersion": 1
},
{
"id": "b0e5acf3-809a-4fcf-9600-a6174525f282",
"name": "Analizador de Base de Conocimiento con IA",
"type": "n8n-nodes-scrapegraphai.scrapegraphAi",
"position": [
128,
704
],
"parameters": {
"userPrompt": "Extract knowledge base articles and FAQ data to identify common issues and self-service opportunities. Use this schema: { \"request_id\": \"unique_id\", \"status\": \"completed\", \"platform\": \"Knowledge Base\", \"articles\": [{ \"article_id\": \"KB-001\", \"title\": \"How to Reset Password\", \"category\": \"Account Management\", \"views_count\": 1250, \"helpful_votes\": 89, \"not_helpful_votes\": 12, \"last_updated\": \"2024-01-10T00:00:00Z\", \"tags\": [\"password\", \"account\"], \"related_tickets_count\": 45, \"self_service_success_rate\": 0.75 }] }",
"websiteUrl": "https://your-support-system.com/knowledge-base/search?q=frequently-asked"
},
"typeVersion": 1
},
{
"id": "1e7fc7c7-1c39-4708-b46a-ad29aaf8cbac",
"name": "Analítica e Inteligencia Avanzada de Soporte",
"type": "n8n-nodes-base.code",
"notes": "Processes support tickets with\nadvanced analytics, SLA monitoring,\nand escalation intelligence",
"position": [
720,
512
],
"parameters": {
"jsCode": "// Advanced Customer Support Analytics & Intelligence Processing\nconst inputData = $input.all();\nconst processedTickets = [];\nconst analyticsData = [];\n\n// Configuration for support analytics and escalation rules\nconst supportConfig = {\n slaThresholds: {\n 'Critical': { first_response_minutes: 15, resolution_hours: 4 },\n 'High': { first_response_minutes: 30, resolution_hours: 8 },\n 'Medium': { first_response_minutes: 120, resolution_hours: 24 },\n 'Low': { first_response_minutes: 480, resolution_hours: 72 }\n },\n customerTiers: {\n 'Enterprise': { priority_multiplier: 1.5, escalation_threshold: 0.5 },\n 'Premium': { priority_multiplier: 1.2, escalation_threshold: 0.7 },\n 'Standard': { priority_multiplier: 1.0, escalation_threshold: 1.0 },\n 'Basic': { priority_multiplier: 0.8, escalation_threshold: 1.2 }\n },\n categoryPatterns: {\n 'Technical': {\n keywords: ['error', 'bug', 'not working', 'crash', 'performance', 'integration'],\n avg_resolution_hours: 12,\n escalation_rate: 0.15\n },\n 'Billing': {\n keywords: ['payment', 'invoice', 'charge', 'refund', 'subscription', 'billing'],\n avg_resolution_hours: 6,\n escalation_rate: 0.08\n },\n 'Account': {\n keywords: ['login', 'password', 'access', 'permissions', 'account', 'profile'],\n avg_resolution_hours: 4,\n escalation_rate: 0.05\n },\n 'Feature Request': {\n keywords: ['feature', 'enhancement', 'improvement', 'suggestion', 'request'],\n avg_resolution_hours: 48,\n escalation_rate: 0.03\n },\n 'General Inquiry': {\n keywords: ['question', 'information', 'how to', 'help', 'support'],\n avg_resolution_hours: 8,\n escalation_rate: 0.04\n }\n },\n escalationTriggers: {\n sla_breach: true,\n high_priority_long_wait: true,\n customer_tier_violation: true,\n multiple_responses_no_resolution: true,\n negative_sentiment: true\n }\n};\n\n// Advanced ticket categorization using AI-like pattern matching\nfunction categorizeTicket(subject, description) {\n const fullText = `${subject} ${description}`.toLowerCase();\n let bestMatch = { category: 'General Inquiry', confidence: 0 };\n \n Object.entries(supportConfig.categoryPatterns).forEach(([category, config]) => {\n let matchScore = 0;\n config.keywords.forEach(keyword => {\n if (fullText.includes(keyword)) {\n matchScore += 1;\n }\n });\n \n const confidence = matchScore / config.keywords.length;\n if (confidence > bestMatch.confidence) {\n bestMatch = { category, confidence: Math.round(confidence * 100) };\n }\n });\n \n return bestMatch;\n}\n\n// Calculate SLA compliance and breach detection\nfunction calculateSLAMetrics(ticket) {\n const priority = ticket.priority || 'Medium';\n const slaConfig = supportConfig.slaThresholds[priority] || supportConfig.slaThresholds['Medium'];\n const customerTier = supportConfig.customerTiers[ticket.customer_tier] || supportConfig.customerTiers['Standard'];\n \n // Adjust SLA based on customer tier\n const adjustedSLA = {\n first_response_minutes: Math.floor(slaConfig.first_response_minutes * customerTier.escalation_threshold),\n resolution_hours: Math.floor(slaConfig.resolution_hours * customerTier.escalation_threshold)\n };\n \n const createdTime = new Date(ticket.created_date);\n const currentTime = new Date();\n const lastUpdatedTime = new Date(ticket.last_updated || ticket.created_date);\n \n // Calculate time metrics\n const ageInMinutes = (currentTime - createdTime) / (1000 * 60);\n const ageInHours = ageInMinutes / 60;\n const timeSinceLastUpdate = (currentTime - lastUpdatedTime) / (1000 * 60);\n \n // SLA breach detection\n const slaBreaches = {\n first_response_breach: ticket.response_count === 0 && ageInMinutes > adjustedSLA.first_response_minutes,\n resolution_breach: ticket.status !== 'Closed' && ageInHours > adjustedSLA.resolution_hours,\n update_breach: timeSinceLastUpdate > (adjustedSLA.first_response_minutes * 2)\n };\n \n const overallSLABreach = Object.values(slaBreaches).some(breach => breach);\n \n return {\n age_minutes: Math.round(ageInMinutes),\n age_hours: Math.round(ageInHours * 100) / 100,\n time_since_last_update_minutes: Math.round(timeSinceLastUpdate),\n sla_thresholds: adjustedSLA,\n sla_breaches: slaBreaches,\n overall_sla_breach: overallSLABreach,\n sla_status: overallSLABreach ? 'Breached' : 'On Track'\n };\n}\n\n// Advanced escalation logic\nfunction calculateEscalationScore(ticket, slaMetrics, categorization) {\n let escalationScore = 0;\n const escalationReasons = [];\n \n // SLA breach escalation\n if (slaMetrics.overall_sla_breach) {\n escalationScore += 25;\n escalationReasons.push('SLA Breach Detected');\n }\n \n // Priority-based escalation\n const priorityScores = { 'Critical': 20, 'High': 15, 'Medium': 5, 'Low': 0 };\n escalationScore += priorityScores[ticket.priority] || 0;\n \n // Customer tier escalation\n const tierScores = { 'Enterprise': 15, 'Premium': 10, 'Standard': 5, 'Basic': 0 };\n escalationScore += tierScores[ticket.customer_tier] || 0;\n \n // Age-based escalation\n if (slaMetrics.age_hours > 48) {\n escalationScore += 15;\n escalationReasons.push('Ticket Age Exceeds 48 Hours');\n } else if (slaMetrics.age_hours > 24) {\n escalationScore += 10;\n escalationReasons.push('Ticket Age Exceeds 24 Hours');\n }\n \n // Response pattern analysis\n if (ticket.response_count > 5 && ticket.status !== 'Closed') {\n escalationScore += 12;\n escalationReasons.push('Multiple Responses Without Resolution');\n }\n \n // Already escalated penalty\n if (ticket.escalated) {\n escalationScore += 20;\n escalationReasons.push('Previously Escalated');\n }\n \n // Technical complexity\n if (categorization.category === 'Technical' && slaMetrics.age_hours > 8) {\n escalationScore += 8;\n escalationReasons.push('Complex Technical Issue');\n }\n \n // Determine escalation level\n let escalationLevel = 'None';\n let requiresEscalation = false;\n \n if (escalationScore >= 50) {\n escalationLevel = 'Critical - Immediate Manager Attention';\n requiresEscalation = true;\n } else if (escalationScore >= 35) {\n escalationLevel = 'High - Team Lead Review';\n requiresEscalation = true;\n } else if (escalationScore >= 20) {\n escalationLevel = 'Medium - Senior Agent Assignment';\n requiresEscalation = true;\n }\n \n return {\n escalation_score: escalationScore,\n escalation_level: escalationLevel,\n requires_escalation: requiresEscalation,\n escalation_reasons: escalationReasons\n };\n}\n\n// Performance analytics calculation\nfunction calculatePerformanceMetrics(tickets) {\n const totalTickets = tickets.length;\n if (totalTickets === 0) return {};\n \n const closedTickets = tickets.filter(t => t.status === 'Closed');\n const openTickets = tickets.filter(t => t.status !== 'Closed');\n \n // Resolution time analysis\n const resolutionTimes = closedTickets\n .filter(t => t.resolution_time_hours)\n .map(t => t.resolution_time_hours);\n \n const avgResolutionTime = resolutionTimes.length > 0 \n ? resolutionTimes.reduce((a, b) => a + b, 0) / resolutionTimes.length \n : 0;\n \n // Customer satisfaction analysis\n const satisfactionScores = closedTickets\n .filter(t => t.customer_satisfaction_score)\n .map(t => t.customer_satisfaction_score);\n \n const avgSatisfactionScore = satisfactionScores.length > 0\n ? satisfactionScores.reduce((a, b) => a + b, 0) / satisfactionScores.length\n : 0;\n \n // Category distribution\n const categoryDistribution = {};\n tickets.forEach(ticket => {\n const category = ticket.ai_category || ticket.category || 'Unknown';\n categoryDistribution[category] = (categoryDistribution[category] || 0) + 1;\n });\n \n return {\n total_tickets: totalTickets,\n open_tickets: openTickets.length,\n closed_tickets: closedTickets.length,\n resolution_rate: Math.round((closedTickets.length / totalTickets) * 100),\n avg_resolution_time_hours: Math.round(avgResolutionTime * 100) / 100,\n avg_satisfaction_score: Math.round(avgSatisfactionScore * 100) / 100,\n category_distribution: categoryDistribution,\n escalation_rate: Math.round((tickets.filter(t => t.requires_escalation).length / totalTickets) * 100)\n };\n}\n\n// Process each input (open tickets, closed tickets, knowledge base)\ninputData.forEach(input => {\n if (input.json.result && input.json.result.tickets) {\n const platform = input.json.result.platform || 'Support System';\n \n input.json.result.tickets.forEach(ticket => {\n const categorization = categorizeTicket(ticket.subject, ticket.description);\n const slaMetrics = calculateSLAMetrics(ticket);\n const escalationAnalysis = calculateEscalationScore(ticket, slaMetrics, categorization);\n \n processedTickets.push({\n json: {\n // Ticket Identification\n ticket_id: ticket.ticket_id,\n platform: platform,\n status: ticket.status,\n created_date: ticket.created_date,\n last_updated: ticket.last_updated,\n closed_date: ticket.closed_date,\n \n // Customer Information\n customer_name: ticket.customer_name,\n customer_email: ticket.customer_email,\n customer_tier: ticket.customer_tier || 'Standard',\n \n // Ticket Details\n subject: ticket.subject,\n description: ticket.description,\n priority: ticket.priority || 'Medium',\n original_category: ticket.category,\n ai_category: categorization.category,\n ai_categorization_confidence: categorization.confidence,\n \n // Agent and Assignment\n assigned_agent: ticket.assigned_agent,\n response_count: ticket.response_count || 0,\n \n // Time and SLA Metrics\n age_minutes: slaMetrics.age_minutes,\n age_hours: slaMetrics.age_hours,\n time_since_last_update_minutes: slaMetrics.time_since_last_update_minutes,\n sla_status: slaMetrics.sla_status,\n sla_breach: slaMetrics.overall_sla_breach,\n first_response_time_minutes: ticket.first_response_time_minutes,\n resolution_time_hours: ticket.resolution_time_hours,\n \n // Escalation Analysis\n escalation_score: escalationAnalysis.escalation_score,\n escalation_level: escalationAnalysis.escalation_level,\n requires_escalation: escalationAnalysis.requires_escalation,\n escalation_reasons: escalationAnalysis.escalation_reasons,\n previously_escalated: ticket.escalated || false,\n \n // Performance Metrics\n customer_satisfaction_score: ticket.customer_satisfaction_score,\n resolution_summary: ticket.resolution_summary,\n \n // Additional Context\n tags: ticket.tags || [],\n estimated_resolution_time: ticket.estimated_resolution_time,\n \n // Analytics Metadata\n processed_at: new Date().toISOString(),\n analytics_session: `analytics_${new Date().toISOString().split('T')[0].replace(/-/g, '')}`\n }\n });\n });\n }\n \n // Process knowledge base data\n if (input.json.result && input.json.result.articles) {\n const kbAnalytics = {\n total_articles: input.json.result.articles.length,\n high_traffic_articles: input.json.result.articles.filter(a => a.views_count > 1000).length,\n self_service_opportunities: input.json.result.articles.filter(a => a.related_tickets_count > 20).length\n };\n \n analyticsData.push({\n json: {\n analytics_type: 'knowledge_base',\n data: kbAnalytics,\n processed_at: new Date().toISOString()\n }\n });\n }\n});\n\n// Generate overall performance analytics\nif (processedTickets.length > 0) {\n const overallMetrics = calculatePerformanceMetrics(processedTickets.map(t => t.json));\n analyticsData.push({\n json: {\n analytics_type: 'performance_summary',\n data: overallMetrics,\n processed_at: new Date().toISOString()\n }\n });\n}\n\n// Return both processed tickets and analytics data\nreturn [...processedTickets, ...analyticsData];"
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "bdc4262f-f379-4b13-810b-d8f5c229656f",
"name": "Panel de Analítica de Soporte en Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1520,
512
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "ticket_id",
"type": "string",
"display": true,
"required": false,
"displayName": "Ticket ID",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "customer_name",
"type": "string",
"display": true,
"required": false,
"displayName": "Customer",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "customer_tier",
"type": "string",
"display": true,
"required": false,
"displayName": "Customer Tier",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "subject",
"type": "string",
"display": true,
"required": false,
"displayName": "Subject",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "priority",
"type": "string",
"display": true,
"required": false,
"displayName": "Priority",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "ai_category",
"type": "string",
"display": true,
"required": false,
"displayName": "AI Category",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "age_hours",
"type": "number",
"display": true,
"required": false,
"displayName": "Age (Hours)",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "sla_status",
"type": "string",
"display": true,
"required": false,
"displayName": "SLA Status",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "escalation_level",
"type": "string",
"display": true,
"required": false,
"displayName": "Escalation Level",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "requires_escalation",
"type": "boolean",
"display": true,
"required": false,
"displayName": "Requires Escalation",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "assigned_agent",
"type": "string",
"display": true,
"required": false,
"displayName": "Assigned Agent",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "customer_satisfaction_score",
"type": "number",
"display": true,
"required": false,
"displayName": "CSAT Score",
"defaultMatch": false,
"canBeUsedToMatch": false
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"ticket_id"
]
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit#gid=0",
"cachedResultName": "Support Data"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit#gid=0",
"cachedResultName": "Support Analytics Dashboard"
},
"authentication": "serviceAccount"
},
"typeVersion": 4.4
},
{
"id": "8bcab229-4e1e-4733-8c15-0cad5d52790e",
"name": "Filtro de Escalación Crítica",
"type": "n8n-nodes-base.if",
"position": [
720,
256
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"id": "critical-escalation",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.escalation_level }}",
"rightValue": "Critical - Immediate Manager Attention"
},
{
"id": "sla-breach",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.sla_breach }}",
"rightValue": true
},
{
"id": "high-tier-customer",
"operator": {
"type": "boolean",
"operation": "true"
},
"leftValue": "={{ $json.customer_tier === 'Enterprise' && $json.requires_escalation }}",
"rightValue": true
}
],
"combineOperation": "any"
}
},
"typeVersion": 2
},
{
"id": "e89856d6-57c0-4045-8436-7ec0a0b7dcec",
"name": "Alerta de Escalación a Slack Manager",
"type": "n8n-nodes-base.slack",
"position": [
1120,
256
],
"webhookId": "ebf5c02f-bca1-48ac-9347-d42e53db23ea",
"parameters": {
"text": "🚨 **SUPPORT ESCALATION ALERT** 🚨\n\n{% if $json.escalation_level contains 'Critical' %}🔴 **CRITICAL ESCALATION REQUIRED** 🔴{% else %}⚠️ **HIGH PRIORITY TICKET** ⚠️{% endif %}\n\n**Ticket**: {{ $json.ticket_id }}\n**Customer**: {{ $json.customer_name }} ({{ $json.customer_tier }} Tier)\n**Subject**: {{ $json.subject }}\n\n**Priority**: {{ $json.priority }}\n**Category**: {{ $json.ai_category }} ({{ $json.ai_categorization_confidence }}% confidence)\n**Assigned Agent**: {{ $json.assigned_agent || 'Unassigned' }}\n\n**Time Metrics**:\n⏰ **Ticket Age**: {{ $json.age_hours }} hours\n{% if $json.sla_breach %}🔴 **SLA STATUS**: BREACHED{% else %}🟢 **SLA STATUS**: {{ $json.sla_status }}{% endif %}\n⏱️ **Time Since Last Update**: {{ $json.time_since_last_update_minutes }} minutes\n\n**Escalation Analysis**:\n📊 **Escalation Score**: {{ $json.escalation_score }}/100\n🎯 **Escalation Level**: {{ $json.escalation_level }}\n\n**Why This Requires Attention**:\n{% for reason in $json.escalation_reasons %}- {{ reason }}\n{% endfor %}\n\n**Customer Context**:\n{% if $json.customer_satisfaction_score %}⭐ **Previous CSAT**: {{ $json.customer_satisfaction_score }}/5{% endif %}\n💬 **Response Count**: {{ $json.response_count }}\n{% if $json.previously_escalated %}⚠️ **Previously Escalated**: Yes{% endif %}\n\n**Ticket Description**:\n_{{ $json.description | truncate(200) }}_\n\n🔗 **Action Required**: Immediate manager review and assignment\n\n*Processed at {{ $json.processed_at | date('short') }} | Session: {{ $json.analytics_session }}*",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "C1234567890"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"typeVersion": 2.2
},
{
"id": "4db9ad91-4584-46d5-99f2-55907fcfb5ff",
"name": "Filtro de Resumen de Analítica",
"type": "n8n-nodes-base.if",
"position": [
720,
752
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"id": "analytics-data",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.analytics_type }}",
"rightValue": "performance_summary"
}
],
"combineOperation": "any"
}
},
"typeVersion": 2
},
{
"id": "f503cb4d-c6fb-4cd1-b9a8-be6c3414b773",
"name": "Informe de Resumen de Analítica Slack",
"type": "n8n-nodes-base.slack",
"position": [
1120,
752
],
"webhookId": "419f9429-af3c-4e4b-989c-c66e0aa1b0a0",
"parameters": {
"text": "📊 **SUPPORT ANALYTICS SUMMARY** 📊\n\n**Overall Performance Metrics:**\n\n**Ticket Volume:**\n🎫 **Total Tickets**: {{ $json.data.total_tickets }}\n📂 **Open Tickets**: {{ $json.data.open_tickets }}\n✅ **Closed Tickets**: {{ $json.data.closed_tickets }}\n📈 **Resolution Rate**: {{ $json.data.resolution_rate }}%\n\n**Performance Indicators:**\n⏱️ **Avg Resolution Time**: {{ $json.data.avg_resolution_time_hours }} hours\n⭐ **Avg Customer Satisfaction**: {{ $json.data.avg_satisfaction_score }}/5\n🔺 **Escalation Rate**: {{ $json.data.escalation_rate }}%\n\n**Category Breakdown:**\n{% for category, count in $json.data.category_distribution %}📋 **{{ category }}**: {{ count }} tickets\n{% endfor %}\n\n**Key Insights:**\n{% if $json.data.escalation_rate > 15 %}⚠️ High escalation rate detected - review process efficiency{% endif %}\n{% if $json.data.avg_satisfaction_score < 4.0 %}⚠️ Customer satisfaction below target - investigate common issues{% endif %}\n{% if $json.data.resolution_rate < 80 %}⚠️ Resolution rate below target - resource allocation needed{% endif %}\n\n*Generated at {{ $json.processed_at | date('short') }}*",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "C0987654321"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"typeVersion": 2.2
},
{
"id": "ec369956-4844-4d70-851c-ffb1bf59b2ac",
"name": "Nota Adhesiva - Activadores",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-480
],
"parameters": {
"color": 7,
"width": 350,
"height": 1330,
"content": "# Step 1: Support Monitoring Triggers 🎫\n\nDual trigger system for comprehensive support ticket analytics:\n\n## Automated Schedule Trigger\n- **Frequency**: Every hour for real-time monitoring\n- **Purpose**: Continuous SLA and escalation tracking\n- **Coverage**: Ensures no tickets fall through cracks\n\n## Webhook Trigger \n- **Purpose**: Real-time ticket notifications\n- **Usage**: Integration with support systems\n- **Endpoint**: `/support-ticket-webhook`\n\n## Benefits\n- Real-time escalation detection\n- SLA breach prevention\n- Performance monitoring\n- Automated manager notifications"
},
"typeVersion": 1
},
{
"id": "ecade188-9b0c-4d9f-a642-36354cc3d4bb",
"name": "Nota Adhesiva - Extracción de Datos",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
-464
],
"parameters": {
"color": 7,
"width": 350,
"height": 1282,
"content": "# Step 2: Multi-Source Support Data Extraction 🔍\n\nAI-powered scraping from multiple support system endpoints:\n\n## Data Sources\n- **Open Tickets**: Current active support requests\n- **Closed Tickets**: Historical performance analysis\n- **Knowledge Base**: Self-service effectiveness metrics\n\n## AI-Powered Extraction\n- Smart ticket parsing with ScrapeGraphAI\n- Structured data extraction from dashboards\n- Context-aware content analysis\n- Multi-system integration support\n\n## Extensible Design\n- Easy integration with Zendesk, Freshdesk, ServiceNow\n- Custom field extraction\n- Multi-language support\n- Real-time data synchronization"
},
"typeVersion": 1
},
{
"id": "5a660240-1b28-4c05-9f1d-17655042bb85",
"name": "Nota Adhesiva - Motor de Analítica",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-592
],
"parameters": {
"color": 7,
"width": 350,
"height": 1090,
"content": "# Step 3: Advanced Support Analytics 🧠\n\nSophisticated AI-powered ticket analysis and intelligence:\n\n## AI Categorization\n- **Smart Classification**: Technical, Billing, Account, etc.\n- **Confidence Scoring**: Reliability percentage\n- **Pattern Recognition**: Issue trend identification\n- **Keyword Analysis**: Automated tagging\n\n## SLA Management\n- **Multi-tier SLA Rules**: Enterprise, Premium, Standard\n- **Breach Detection**: Real-time monitoring\n- **Performance Metrics**: Response and resolution times\n- **Customer Tier Adjustments**: Priority multipliers\n\n## Escalation Intelligence\n- **Smart Scoring**: Multi-factor escalation algorithm\n- **Risk Assessment**: Crisis potential evaluation\n- **Automated Triggers**: Manager notification rules\n- **Historical Analysis**: Pattern-based predictions"
},
"typeVersion": 1
},
{
"id": "63852bb0-38e6-441f-9b43-ad866e34e391",
"name": "Nota Adhesiva - Informes y Alertas",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
-320
],
"parameters": {
"color": 7,
"width": 782,
"height": 1266,
"content": "# Step 4: Smart Escalation & Reporting 📊\n\nIntelligent notification system and performance dashboard:\n\n## Escalation Management\n- **Priority Filtering**: Critical, High, Medium escalations\n- **Manager Alerts**: Immediate Slack notifications\n- **SLA Breach Warnings**: Proactive intervention\n- **Customer Tier Priorities**: VIP customer handling\n\n## Google Sheets Dashboard\n- **Live Analytics**: Real-time ticket tracking\n- **Performance KPIs**: Resolution times, CSAT scores\n- **Trend Analysis**: Historical pattern identification\n- **Export Ready**: Management reporting\n\n## Dual Reporting Channels\n- **Escalation Channel**: Critical ticket alerts\n- **Analytics Channel**: Performance summaries\n- **Rich Formatting**: Actionable insights display\n- **Automated Scheduling**: Regular report delivery"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "d6b51a9f-e1e1-4cef-87ee-3f05bc6888f7",
"connections": {
"4db9ad91-4584-46d5-99f2-55907fcfb5ff": {
"main": [
[
{
"node": "f503cb4d-c6fb-4cd1-b9a8-be6c3414b773",
"type": "main",
"index": 0
}
]
]
},
"ca23168f-68a1-48a3-af78-493f32b57270": {
"main": [
[
{
"node": "1e7fc7c7-1c39-4708-b46a-ad29aaf8cbac",
"type": "main",
"index": 0
}
]
]
},
"b0e5acf3-809a-4fcf-9600-a6174525f282": {
"main": [
[
{
"node": "1e7fc7c7-1c39-4708-b46a-ad29aaf8cbac",
"type": "main",
"index": 0
}
]
]
},
"8bcab229-4e1e-4733-8c15-0cad5d52790e": {
"main": [
[
{
"node": "e89856d6-57c0-4045-8436-7ec0a0b7dcec",
"type": "main",
"index": 0
}
]
]
},
"1216484d-7002-4116-a265-70ef1f20fe65": {
"main": [
[
{
"node": "1e7fc7c7-1c39-4708-b46a-ad29aaf8cbac",
"type": "main",
"index": 0
}
]
]
},
"51925e8e-1ff5-435a-8454-1511b9e94f52": {
"main": [
[
{
"node": "1216484d-7002-4116-a265-70ef1f20fe65",
"type": "main",
"index": 0
},
{
"node": "ca23168f-68a1-48a3-af78-493f32b57270",
"type": "main",
"index": 0
},
{
"node": "b0e5acf3-809a-4fcf-9600-a6174525f282",
"type": "main",
"index": 0
}
]
]
},
"3b4ed448-99f2-41f3-b7fc-e5397dc6fac8": {
"main": [
[
{
"node": "1216484d-7002-4116-a265-70ef1f20fe65",
"type": "main",
"index": 0
},
{
"node": "ca23168f-68a1-48a3-af78-493f32b57270",
"type": "main",
"index": 0
},
{
"node": "b0e5acf3-809a-4fcf-9600-a6174525f282",
"type": "main",
"index": 0
}
]
]
},
"1e7fc7c7-1c39-4708-b46a-ad29aaf8cbac": {
"main": [
[
{
"node": "bdc4262f-f379-4b13-810b-d8f5c229656f",
"type": "main",
"index": 0
},
{
"node": "8bcab229-4e1e-4733-8c15-0cad5d52790e",
"type": "main",
"index": 0
},
{
"node": "4db9ad91-4584-46d5-99f2-55907fcfb5ff",
"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?
Intermedio - Gestión de tickets, Resumen de IA
¿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
vinci-king-01
@vinci-king-01Compartir este flujo de trabajo