{
  "$schema": "https://promptfoo.tech/schemas/workflow-template.json",
  "name": "n8n: Zendesk/Freshdesk Ticket Triage with Claude",
  "slug": "n8n-support-ticket-triage-with-claude",
  "platform": "n8n",
  "category": "n8n",
  "difficulty": "Intermediate",
  "tags": [
    "n8n",
    "support",
    "claude",
    "triage"
  ],
  "summary": "Auto-categorize inbound support tickets, extract intent, suggest a reply draft, and route to the right team using n8n and Claude Sonnet.",
  "overview": "Every support team burns hours on triage. This workflow uses n8n to catch new tickets from Zendesk or Freshdesk, sends them to Claude with a structured classification prompt, and writes back three fields: category, sentiment, and a suggested first response. Agents open pre-analyzed tickets and start from a draft instead of a blank textarea.",
  "variables": {
    "WEBHOOK_URL": "<your webhook URL>",
    "API_KEY": "<your provider API key>",
    "ANTHROPIC_API_KEY": "sk-ant-..."
  },
  "steps": [
    {
      "order": 1,
      "name": "Configure the webhook in Zendesk",
      "description": "Zendesk → Extensions → Webhooks. Point it at your n8n webhook URL with a shared secret in the header."
    },
    {
      "order": 2,
      "name": "Build the classification prompt",
      "description": "Include category list, priority rubric, and voice guide. Enforce JSON output using the schema block."
    },
    {
      "order": 3,
      "name": "Wire Claude with structured output",
      "description": "Anthropic node; set max_tokens conservatively (~600) and validate the JSON. Retry once on schema error."
    },
    {
      "order": 4,
      "name": "Write fields back to the ticket",
      "description": "PUT to /api/v2/tickets/{id} with custom fields for category, priority, and internal note for the draft."
    },
    {
      "order": 5,
      "name": "Alert on critical tickets",
      "description": "If priority='critical' or sentiment='angry', send a Slack message with a deep link to the ticket."
    },
    {
      "order": 6,
      "name": "Sample and evaluate weekly",
      "description": "Pull 30 random tickets. Have a senior agent grade the classifications. Feed misses back into the prompt."
    }
  ],
  "howItWorks": [
    "A webhook trigger fires when a new ticket is created.",
    "The ticket body + subject + customer metadata are packed into a Claude request.",
    "A JSON-schema-constrained prompt returns category, priority, sentiment, and a draft response.",
    "n8n writes those fields back via Zendesk/Freshdesk API.",
    "High-severity tickets fire an additional Slack alert to the on-call channel."
  ],
  "benefits": [
    "Cuts median time-to-first-response by 40-60% in real deployments.",
    "Consistent categorization improves reporting and staffing forecasts.",
    "Agents keep judgment — they see a draft, not an auto-send."
  ],
  "useCases": [
    "SaaS support teams with 100+ inbound tickets a day.",
    "E-commerce brands routing between shipping / billing / product-defect queues.",
    "Agencies triaging client tickets across multiple accounts."
  ],
  "example": "Ticket: 'Order #4482 arrived broken, this is the second time!' → category:refund-request, priority:high, sentiment:angry, draft:'Hi Alex, I'm so sorry — I can see this is the second time...'",
  "faqs": [
    {
      "q": "Why not auto-reply?",
      "a": "You will regret it. Draft-in-agent-view keeps humans accountable and catches the 5% of edge cases that would erode trust."
    },
    {
      "q": "Cost per ticket?",
      "a": "About $0.002-0.005 on Claude Sonnet. Trivial versus agent time saved."
    },
    {
      "q": "Freshdesk vs Zendesk?",
      "a": "Same pattern — different API shape. n8n has native nodes for both."
    }
  ],
  "source": "https://promptfoo.tech/workflows/n8n-support-ticket-triage-with-claude",
  "updated": "2026-06-27",
  "license": "CC-BY-4.0"
}