Back to Alchemy
Alchemy RecipeIntermediateautomation

Customer support ticket triage with AI-drafted responses and routing

Your support inbox hits 200 emails before breakfast. Your team spend the next three hours reading through repetitive requests, categorising them (billing issue, feature request, bug report), and drafting templated responses. By the time anyone actually solves a problem, half the day is gone. This scenario plays out in companies of every size, and it's almost entirely fixable. The real opportunity isn't hiring more support staff. It's removing the busywork that makes support feel like a bottleneck in the first place. When a customer email arrives, most of what happens next is predictable: someone reads it, decides what category it belongs to, and types out an initial response. Machines are genuinely good at all three of these tasks, yet most support teams still do them by hand. This Alchemy workflow automates the entire triage and response-drafting process. Incoming tickets are summarised, categorised, routed to the right team member, and come with an AI-drafted response ready to review. Your team goes from handling 15 tickets a day to reviewing 80 with the same effort, because they're no longer doing the reading and writing. They're just approving and sending. For more on this, see Multilingual customer support ticket automation with resp.... For more on this, see Customer support ticket analysis and response automation.

The Automated Workflow

The backbone here is n8n, which integrates with your ticketing system (we'll assume you're using something with a REST API; Zendesk, Freshdesk, and Intercom all work), your LLM provider, and your internal routing logic. Here's the flow: 1. New ticket arrives in your system (via webhook).

  1. Ticket text is sent to Claude Sonnet 4.6 for summarisation.

  2. A second Claude call categorises the ticket and suggests the appropriate team.

  3. HyperWrite or Claude Opus 4.6 drafts a response based on ticket content and your company knowledge base.

  4. Twig (if you're using it for agent assistance) can add context or flag escalation needs.

  5. The draft, category, and routing suggestion appear in your dashboard or are posted to Slack for agent review.

  6. Agent approves and sends, or edits before sending.

Setting up the n8n workflow:

The starting block is a webhook that listens for new ticket creation. Most ticketing systems allow you to configure outbound webhooks. Here's what that typically looks like:

POST https://your-n8n-instance.com/webhook/ticket-intake
Content-Type: application/json { "ticket_id": "12847", "customer_email": "alice@customer.com", "subject": "Can't reset password", "body": "I've tried three times to reset my password but the email never arrives.", "created_at": "2026-03-14T09:32:00Z", "priority": "normal"
}

Once the webhook fires, n8n receives this payload. The first step is to summarise the ticket.

Step 1: Summarisation with Claude Sonnet 4.6

Claude Sonnet 4.6 is fast and accurate for this task. Create an HTTP POST node in n8n that calls the Anthropic API:

POST https://api.anthropic.com/v1/messages
Authorization: Bearer $ANTHROPIC_API_KEY
Content-Type: application/json { "model": "claude-sonnet-4-6", "max_tokens": 200, "messages": [ { "role": "user", "content": "Summarise this support ticket in one sentence, focusing on the customer's core issue:\n\n{{ $json.body }}" } ]
}

Store the response in a variable, say ticketSummary.

Step 2: Categorisation and routing

Now send the same ticket text to Claude again, this time asking it to categorise the issue and suggest a team:

POST https://api.anthropic.com/v1/messages
Authorization: Bearer $ANTHROPIC_API_KEY
Content-Type: application/json { "model": "claude-sonnet-4-6", "max_tokens": 300, "system": "You are a support ticket router. Analyse the following ticket and respond with ONLY valid JSON (no markdown, no explanation). Respond with: {\"category\": \"[billing|technical|feature_request|bug|other]\", \"team\": \"[billing_team|engineering|product|general]\", \"urgency_override\": true/false}", "messages": [ { "role": "user", "content": "{{ $json.body }}" } ]
}

Parse the JSON response and extract category and team.

Step 3: Draft response with Claude Opus 4.6

For more detailed, context-aware responses, use Claude Opus 4.6. You'll want to pass your knowledge base or response templates as context:

POST https://api.anthropic.com/v1/messages
Authorization: Bearer $ANTHROPIC_API_KEY
Content-Type: application/json { "model": "claude-opus-4-6", "max_tokens": 500, "system": "You are a professional support agent. Draft a helpful, friendly response to this ticket. Keep responses to 150 words maximum. If you're unsure, suggest escalation rather than guessing. Our team will review before sending.", "messages": [ { "role": "user", "content": "Customer ticket:\n{{ $json.body }}\n\nSummary: {{ ticketSummary }}\n\nCategory: {{ category }}\n\nKnowledge base:\n[Include your FAQ, common solutions, and company policies here]" } ]
}

Store this response as draftResponse.

Step 4: Optional Twig enrichment

If you're using Twig for agent support, send the ticket data to Twig's API. Twig can flag if an issue might need escalation or if it matches known unresolved problems:

POST https://api.twig.ai/v1/analyse
Authorization: Bearer $TWIG_API_KEY
Content-Type: application/json { "ticket_id": "{{ $json.ticket_id }}", "content": "{{ $json.body }}", "category": "{{ category }}"
}

Twig's response might include escalation flags or similar resolved cases.

Step 5: Post to Slack or your dashboard

Create a Slack message (or update a database record) with all the prepared data:

POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL
Content-Type: application/json { "channel": "#support-queue-{{ team }}", "attachments": [ { "colour": "{{ urgency_override ? 'danger' : 'warning' }}", "title": "Ticket #{{ $json.ticket_id }}: {{ $json.subject }}", "text": "{{ ticketSummary }}", "fields": [ { "title": "Category", "value": "{{ category }}", "short": true }, { "title": "From", "value": "{{ $json.customer_email }}", "short": true }, { "title": "Draft Response", "value": "{{ draftResponse }}", "short": false } ], "actions": [ { "type": "button", "text": "Approve & Send", "url": "{{ approvalLink }}" }, { "type": "button", "text": "Edit & Review", "url": "{{ editLink }}" } ] } ]
}

Your team member sees a formatted message with the summary, category, and pre-written response. They can click "Approve & Send" (which triggers a webhook to actually send the email and mark the ticket resolved), or they can edit the draft first. The entire process takes 10-15 seconds after the ticket arrives. Your team goes from reading and typing to reviewing and deciding.

The Manual Alternative

If you prefer tighter control or want to keep AI assistance as a tool rather than an automated system, you can use HyperWrite inside your ticketing interface. HyperWrite offers browser extensions and API access that let you highlight a ticket and have it generate a response suggestion on demand, without any automation. Your team reads the ticket normally, then clicks "Generate Response" inside their support interface (HyperWrite integrates with many platforms). They review the suggestion, edit as needed, and send. This gives you AI help without the full automation, at the cost of more manual touchpoints. It's worth considering if your tickets are highly variable or if your team doesn't trust pre-written responses yet.

Pro Tips

Rate limiting and costs:

Claude Sonnet 4.6 is cheaper and faster than Opus for categorisation and summarisation.

Reserve Opus for the draft response, where quality matters most. With n8n's built-in rate limiting, you can queue tickets and process them in batches during off-peak hours if cost is a concern.

Error handling in n8n:

Always add a conditional block after the Claude API calls. If the categorisation returns invalid JSON, log the error and route the ticket to a human manually. Don't let a malformed response break your workflow. Use n8n's "Try/Catch" node type for this.

Testing the workflow:

Before deploying, run n8n in test mode with five real tickets from your backlog. Check that summaries are accurate, categories make sense, and draft responses match your tone. This typically takes 30 minutes and catches 80% of issues.

Knowledge base as a variable:

Store your FAQ and response templates as a JSON file in n8n's variable storage, or pull them from a Google Sheet. When you update your knowledge base, the workflow automatically uses the latest version. No code changes required.

Approval workflow:

Don't assume every draft gets sent automatically. Even with high accuracy, the approval step is where your team catches tone issues, missed context, or edge cases. Make approval frictionless (one click) but mandatory. Most teams find 85-95% of drafts are approvable with zero edits.

Cost Breakdown

ToolPlan NeededMonthly CostNotes
n8nPro (self-hosted) or Cloud $50/month£35–£50Cloud version easier; self-hosted cheaper at scale. Covers 1000+ workflow executions.
Claude Sonnet 4.6Pay-as-you-go£3–£8Estimate: 200 tickets daily, ~1000 tokens per categorisation/summary.
Claude Opus 4.6Pay-as-you-go£15–£25Estimate: 200 tickets daily, ~2000 tokens per draft response.
Twig (optional)Standard tier£40–£80Agent assistance and escalation flagging. Skip if you don't need advanced escalation logic.
HyperWrite (optional)Starter£12/monthUse only if you want manual assist without full automation.
Slack (optional)Pro£6.50 per user/monthIf not already on Slack; needed for the approval interface.
Total (essential tools),£55–£85Supports 200+ tickets daily with minimal overhead.