Automated workflow · n8n + Claude

Support Ticket Triage & Escalation Routing

Every incoming support ticket gets read the moment it arrives, not queued for a human to eyeball first. A webhook receives the ticket, Claude reads it for tone and business impact, tiers it escalate, standard, or self-serve, and drafts the tier-appropriate response itself — an urgent internal page, a support reply, or a self-serve answer — before archiving and returning the result immediately.

2
escalated
2
standard support
2
self-serve

What separates a page from a self-serve reply

Claude reads the ticket for tone, business impact, and repeat-contact signals — not just keyword matching — then assigns exactly one tier.

Escalate · churn risk, security/data/billing, Enterprise blocked, repeat contact
Standard · real issue, needs a human, not urgent or blocking
Self-serve · already answered by help-center docs
Tone & churn risk
Frustrated, angry, or explicit renewal-risk language pushes toward escalation.
Business impact
Is a core function blocked, and for which customer tier?
Repeat contact
Is this the second or later time the customer has raised the same unresolved issue?
Documentation coverage
Is the answer already sitting in the help center, or does it need a person?

How a ticket moves through it

One straight path from intake to triage, then a three-way fork on the tier. All three land in the same archive and response.

01 · trigger
Support Ticket Webhook
POST /webhook/support-ticket-triage receives the ticket fields.
02 · normalize
Normalize Ticket Input
Cleans the payload with defensive fallbacks for every field.
AI Triage Agent
Claude assigns the tier and sentiment, then drafts the tier-appropriate response itself — an internal page, a support reply, or a self-serve answer.
Route by Ticket Tier
Routes on tier: escalate / standard / self_serve, plus a fallback.
if escalate
Tag Escalate
Marks the record for the on-call Slack/email queue.
if standard
Tag Standard Support
Marks the record for the support agent's Slack/email queue.
if self_serve
Tag Self-Serve
Marks the record for auto-reply, no agent needed.
Save Triaged Ticket
All branches converge here — archived to the support_tickets_triaged Data Table.
Respond With Triage
Sends the tier, sentiment, reasoning, and drafted response straight back to whatever submitted the ticket.

Six test tickets, triaged live

The tickets below are made-up test data, not real customers. The tiers, sentiment reads, and drafted responses are genuine, unscripted output — each one is what Claude actually produced from running that ticket through the live workflow.

TKT-4401 · Priya Nair
Enterprise · chat · Locked out of admin dashboard for 3 hours
Escalate
Ticket
"This is the second time this month our whole team has been locked out of the admin dashboard. We're an Enterprise account and this is blocking payroll processing that's due today. If this isn't fixed in the next hour we are going to seriously reconsider renewing."
Sentiment
Frustrated
Reasoning
Repeat contact about the same unresolved issue, Enterprise tier blocked from a core function with a same-day deadline, and explicit churn-risk language — three escalation triggers at once.
Automated action · internal Slack/email page
#on-call-supportauto-drafted
🚨 URGENT ESCALATION — TKT-4401 | Enterprise Customer: Priya Nair @on-call-lead Please action this immediately. Second lockout incident this month, blocking payroll due today, customer stated they'll reconsider renewing within the hour. Page engineering to investigate the lockout, assign a senior agent to contact Priya within 10 minutes, and loop in the account's CSM.
TKT-4405 · Aisha Kone
Enterprise · email · Unauthorized charge and possible account breach
Escalate
Ticket
"I just noticed a $4,200 charge on our account that none of our admins authorized, and there's a login from an IP address in a country none of us have ever traveled to. This looks like our account may have been compromised. We need this looked at immediately."
Sentiment
Frustrated
Reasoning
A possible security breach and an unauthorized billing dispute on an Enterprise account, stacked together — either alone would escalate; together it's a critical incident.
Automated action · internal Slack/email page
#on-call-supportauto-drafted
🚨 URGENT ESCALATION — TKT-4405 | Enterprise Customer: Aisha Kone @on-call-support-lead @security-team @billing-team Unauthorized $4,200 charge plus a login from an unrecognized foreign IP — possible account compromise. Security: pull session logs and force-expire sessions now. Billing: hold the charge pending investigation. Contact customer within 30 minutes.
TKT-4402 · Marcus Webb
Pro · email · CSV export missing rows
Standard
Ticket
"I noticed our weekly CSV export is missing about 10% of rows compared to what's shown in the dashboard. Not urgent since I can work around it for now, but wanted to flag it since it's been happening for the last two exports."
Sentiment
Neutral
Reasoning
A reproducible bug across two exports needs an agent to check logs and pipeline behavior, but the customer explicitly says it's not urgent, has a workaround, and shows no churn-risk language.
Automated action · customer-facing support reply
TKT-4407 · Lena Kowalski
Pro · email · Integration with our CRM keeps disconnecting
Standard
Ticket
"Our Salesforce integration has disconnected three times this week and we have to manually reconnect it each time. It's not blocking us but it's becoming a real hassle for the sales team."
Sentiment
Neutral
Reasoning
A recurring integration bug is too account-specific for a help article, but the customer says it isn't blocking them and shows no urgency or churn-risk language — standard queue, not escalation.
Automated action · customer-facing support reply
TKT-4403 · Sofia Ramirez
Free · email · How do I reset my password?
Self-serve
Ticket
"I forgot my password and the reset email never arrived. Can you tell me how to reset it or resend the email?"
Sentiment
Neutral
Reasoning
A classic self-serve question — calm tone, no account-specific bug, fully covered by existing password-reset documentation.
Automated action · self-serve reply · article: "Resetting your password"
auto-replyauto-drafted
Hi Sofia, No worries! Go to the login page and click "Forgot Password?", then enter your account email. Check your spam folder if the email doesn't arrive within a few minutes. Full steps: "Resetting your password". The Support Team
TKT-4404 · Devon Clarke
Free · chat · When does my billing cycle renew?
Self-serve
Ticket
"Quick question - I signed up on the 14th, does that mean my subscription renews on the 14th of every month? Just want to plan around it."
Sentiment
Neutral
Reasoning
A general billing-cycle question with no account-specific issue — already covered by standard documentation, no agent needed.
Automated action · self-serve reply · article: "Understanding your monthly billing cycle"
auto-replyauto-drafted
Hi Devon! Yes — your billing cycle renews on the same date each month as your sign-up date, so the 14th. You can confirm your exact renewal date in the Billing section of your account. Full details: "Understanding your monthly billing cycle". The Support Team

Every tier gets a drafted response, not just a label

The same AI call that tiers the ticket also drafts what happens next, matched to the tier: escalate gets an urgent internal page, standard gets an empathetic support reply with a real next step, and self-serve gets a direct answer pointing to the specific help-center article. Nothing is left as a bare tag — even the calmest question above got a real drafted reply.

What is support_tickets_triaged? It's a Data Table — a lightweight database built directly into this n8n workspace, not a separate external system. It lives inside this n8n project, viewable in n8n's own Data Tables screen and reachable by any other workflow in the same project. It isn't exposed to the public internet on its own — the only way anything outside n8n sees this data is through what a workflow deliberately sends back out, like the drafted responses above.
ticket_id customer tier customer_tier sentiment reasoning
TKT-4401 Priya Nair escalate Enterprise frustrated Repeat contact, blocked payroll, explicit churn-risk language.
TKT-4405 Aisha Kone escalate Enterprise frustrated Possible account breach plus an unauthorized $4,200 charge.
TKT-4402 Marcus Webb standard Pro neutral Reproducible export bug, not urgent, has a workaround.
TKT-4407 Lena Kowalski standard Pro neutral Recurring integration disconnect, not blocking, no urgency.
TKT-4403 Sofia Ramirez self_serve Free neutral Password reset — fully covered by existing documentation.
TKT-4404 Devon Clarke self_serve Free neutral Billing-cycle question — a standard documented answer.

Going live: what changes outside this demo

Nothing here runs on a manual trigger in production. A real ticket has to enter this pipeline the moment it's submitted, and the result has to land somewhere a person actually sees it — usually the help desk system of record.

where tickets already are
Help desk inbox or chat widget
A ticket landing in Zendesk, Intercom, Freshdesk, or a chat widget fires a webhook the instant it's created, carrying the ticket fields shown above.
unchanged from this demo
This triage pipeline
Same normalize → triage → draft sequence shown above.
write-back
Help desk ticket updated
The tier, sentiment, and reasoning get written onto the ticket record — so any agent opening it sees the triage, not just this workflow's log.
human in the loop
Real page + a reviewed draft
Escalations post to a real on-call Slack/email channel immediately. Standard and self-serve drafts land as a suggested reply for a quick read before sending — not an auto-send.

Why not just use the help desk's built-in triage?

Zendesk, Intercom, and Freshdesk all ship their own routing rules and macros, and at a company that already has those tuned well, this workflow isn't a replacement for them.

Where a custom pipeline like this earns its place: native routing is typically keyword or field-based (a form dropdown, an SLA tag) rather than reading tone and business context the way this does, drafting a specific reply is usually a separate macro someone still has to pick and edit, and cross-tool judgment calls — like weighing "Enterprise plus repeat contact plus a deadline" together — are hard to express as rigid routing rules. This build is the shape you reach for when the native rules can't express that judgment, or when the drafted response needs to be genuinely tailored rather than a canned macro.