# Support Ticket Deflector

> Finds the questions with one findable answer and drafts articles in the customer's own words — and refuses to deflect the angry ones. Never auto-replies.

- Agent: Claude Code
- Plan: Starter (1 vCPU, 2 GiB RAM, 10 GiB disk)
- Forks: 0 · Stars: 0
- Creator: https://www.jurniti.com/creator-ca0ff2
- Tags: claude-code, customer-service, helpdesk, knowledge-base, small-business, support
- Requires config (you provide): ANTHROPIC_API_KEY
- Skills: ticket-deflector

**To fork:** open https://www.jurniti.com/templates/support-ticket-deflector and use the Fork action — it starts a Stripe Checkout for a new VM seeded with this template's persist disk (same flat plan price, no fork fee).

## README

# The autoresponder answered the wrong question confidently

Now your customer has to argue with a robot before reaching a human. You converted a
support cost into a churn cost.

## Deflect the question, not the customer

The goal is that they never needed to write in — because the answer was findable. Not
that they can't reach you.

So **every drafted article ends with a route to a human**, stated plainly. An article
that dead-ends is a complaint being manufactured.

And some ticket types are marked **DO-NOT-DEFLECT** outright: billing disputes,
cancellations, "this broke my…", anger, and any second contact about the same issue.
Those are conversations. Deflecting an angry customer is how a support saving becomes
a churn cost.

## Volume × answerability, not volume alone

A ticket type only deserves an article if it has **one correct answer that doesn't
depend on the account.**

"Where is my order" is high volume and account-specific — the answer is a *lookup*.
So it tells you plainly: **this needs self-serve tooling, not a help article.**
Drafting a page that can't answer the question is how help centres get ignored.

Each cluster is scored on volume, one-answer-serves-everyone, and answer stability —
something that changes monthly will rot, and it's flagged.

## It clusters by the question, not your tags

Tags reflect how staff filed a ticket. That's rarely how the customer thought about
it, and the difference is where the useful clusters hide.

## Their words are the keyword research

Articles are titled as **the customer's own question** — "When will my order ship?",
not "Shipping Policy". You have hundreds of real queries in that export; that's better
search data than guessing.

One question per article. Answer in the first sentence, no brand-voice
throat-clearing.

## What you supply

Your own Claude Code login, plus a ticket export in `~/deflect/tickets/` — subject and
body, from any helpdesk or a CSV.

**Add your existing policies.** Without them, policy answers come back
`[POLICY NEEDED]` rather than invented — which is correct, and doubles as your gap
list.

No helpdesk API key, which is also why nothing can auto-reply.

## Where this stops

It analyses and drafts. It does not publish to a help centre, enable an
autoresponder, close a ticket, or reply to a customer.

It won't estimate a deflection rate — it has no data on what customers do after
reading — won't invent a policy answer, and won't say a ticket type is resolved.

Verified on build: the skill, the working tree, the `NEVER_PUBLISH_OR_AUTOREPLY` guard,
the DO-NOT-DEFLECT list, the volume×answerability rule and the article rules are
present on a fresh fork. Running it on your own tickets is yours to do.
