8
n8n 한국어amn8n.com

내 작업流程 2

중급

이것은Ticket Management, AI Summarization분야의자동화 워크플로우로, 15개의 노드를 포함합니다.주로 If, Code, Slack, Webhook, GoogleSheets 등의 노드를 사용하며. ScrapeGraphAI, Google 스프레드시트, Slack 알림을 사용하여 작업 분석 대시보드를 지원하는 시스템을 구축합니다.

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
  • Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "VhEwspDqzu7ssFVE",
  "meta": {
    "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3"
  },
  "name": "My workflow 2",
  "tags": [],
  "nodes": [
    {
      "id": "3b4ed448-99f2-41f3-b7fc-e5397dc6fac8",
      "name": "자동 지원 모니터 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -288,
        608
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "51925e8e-1ff5-435a-8454-1511b9e94f52",
      "name": "지원 티켓 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": "AI 지원 대시보드 스크레이퍼",
      "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": "AI 종료 티켓 분석기",
      "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": "AI 지식 베이스 분석기",
      "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": "고급 지원 분석 및 인텔리전스",
      "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": "Google 시트 지원 분석 대시보드",
      "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": "중요 에스컬레이션 필터",
      "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": "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": "분석 요약 필터",
      "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": "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": "스티커 메모 - 트리거",
      "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": "스티커 메모 - 데이터 추출",
      "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": "스티커 메모 - 분석 엔진",
      "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": "스티커 메모 - 보고 및 알림",
      "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
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - 티켓 관리, AI 요약

유료인가요?

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

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

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34