Mon workflow 2
Ceci est unTicket Management, AI Summarizationworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme If, Code, Slack, Webhook, GoogleSheets. Construire un tableau de bord d'analyse des tickets de support avec ScrapeGraphAI, Google Sheets et les alertes Slack
- •Token Bot Slack ou URL Webhook
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Informations d'identification Google Sheets API
Nœuds utilisés (15)
Catégorie
{
"id": "VhEwspDqzu7ssFVE",
"meta": {
"instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3"
},
"name": "My workflow 2",
"tags": [],
"nodes": [
{
"id": "3b4ed448-99f2-41f3-b7fc-e5397dc6fac8",
"name": "Déclencheur Automatisé de Surveillance du Support",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-288,
608
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "51925e8e-1ff5-435a-8454-1511b9e94f52",
"name": "Déclencheur de Ticket d'Assistance 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": "Récupérateur IA de Tableau de Bord de Support",
"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": "Analyseur IA de Tickets Fermés",
"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": "Analyseur IA de Base de Connaissances",
"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": "Analytiques et Intelligence Avancées du Support",
"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": "Tableau de Bord d'Analytiques de Support 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": "Filtre d'Escalade Critique",
"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": "Alerte d'Escalade au Manager Slack",
"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": "Filtre de Résumé d'Analytiques",
"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": "Rapport de Résumé d'Analytiques 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": "Note - Déclencheurs",
"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": "Note - Extraction de Données",
"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": "Note - Moteur d'Analytiques",
"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": "Note - Rapports et Alertes",
"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
}
]
]
}
}
}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é ?
Intermédiaire - 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
vinci-king-01
@vinci-king-01Partager ce workflow