Ticket auto-categorize

New tickets get a category and priority assigned automatically within seconds of creation.

When a ticket is created — manually, from a form, from email-in, from chat-to-ticket — and you have at least two categories defined, this feature classifies it and (optionally) sets its priority.

How it works

  1. Ticket is created. Its created event dispatches a queued background job.
  2. The job sends Claude Haiku the subject, the description, and the list of your existing category slugs.
  3. Claude returns a JSON answer: a category slug, a priority, and a confidence value (0.0–1.0).
  4. The job applies the result, only filling in fields the agent left empty:
    • If the ticket already has a category, we don't override.
    • If the ticket has a priority other than normal, we don't override.
    • For priority, we only fill in if confidence ≥ 0.6.

The job runs asynchronously so ticket creation isn't blocked on Anthropic latency. The categorized result appears moments later in the ticket page (refresh once).

When it skips

  • The category list is empty or has fewer than 2 entries (no point classifying into a list of one).
  • The ticket was created with both category and a non-default priority — agent input takes precedence.
  • The workspace has the feature toggle off.
  • The daily AI budget cap is exhausted.

Cost

A typical call is ~500 input tokens + ~30 output tokens — well under $0.001 per call. Even with hundreds of tickets a day you'd struggle to hit a daily budget meant for the whole suite.

Where you see it

  • Tickets that were auto-categorized show their assigned category and priority in the inbox immediately. There's no "AI-set" badge — once written, the fields look like any other.
  • The ai_calls log records each call with feature: ticket_categorize and the subject morph linked to the ticket.

When NOT to enable

  • Single-category workspace — nothing to classify.
  • Highly specialized categories — if your category list is technical jargon the LLM won't reliably distinguish ("API v2 vs API v3 issue"), you'll get noisy predictions. Use it as an inbox-only inbox triage; humans do final categorization.
  • Strict privacy — if you can't send ticket bodies to a third-party LLM, leave it off.

When it's most useful

  • High volume of incoming tickets, especially from email-in where customers don't pick categories themselves.
  • Stable category set that's been around long enough that an LLM can recognize the patterns.
  • A team that does routing by category — auto-categorization saves the triage step.