Docs/AI

AI triage — how it works and how to tune it

Auto-labeling, priority detection, and team routing that runs on every inbound ticket in under a second.

Last updated April 19, 2026

AI triage fires the moment a ticket enters your workspace. Its job is to prepare the ticket for a human — label, prioritize, and route — so whoever opens it first has everything they need.

What triage does

For every inbound ticket, in parallel:

  1. Assigns one or more labels from your workspace's label set (e.g., billing, bug, sales, churn-risk)
  2. Sets a priority: low, normal, high, or urgent
  3. Picks a team if auto-assign rules match (or leaves unassigned)
  4. Writes a reasoning trace you can read in the ticket timeline

Triage runs async — it never blocks ticket creation. If triage fails (credits exhausted, API outage, model timeout), the ticket still arrives, just uncategorized. You'll see a gentle "Triage skipped" note in the timeline.

What signals it uses

Seven inputs feed the triage model:

  • Subject line (for email)
  • First message body
  • Channel (email / WhatsApp / Slack / Discord)
  • Customer metadata (VIP tag, tier, total tickets, account age)
  • Recent ticket history for this customer (last 10)
  • Time of day + workspace business hours
  • Workspace-specific signals (custom labels, industry)

No customer PII is sent to the model beyond what's already in the ticket. The prompt is scoped per workspace — your labels and history stay in your tenant.

Credit cost

1 credit per triage run. Fires once per new ticket, not per message.

Tuning triage behavior

Settings → AI → Triage:

  • Enabled per workspace / per team / per channel. Turn it off entirely for a particular channel (e.g., disable for WhatsApp if you want manual labeling).
  • Custom labels. Add up to 50 custom labels per workspace. The model considers all of them.
  • Label hints. Optional one-sentence description per label (e.g., churn-risk = customer mentioning cancellation, downgrade, or competitors). Improves accuracy.
  • Priority bias. Nudge priority calculation (e.g., "default to high for VIP customers").
  • Team routing rules. Go to Settings → Teams → team → Auto-assign. Define rules like label includes "billing" → Billing team or priority=urgent → VIP team.

Reading the reasoning trace

Every triaged ticket has a reasoning trace in the timeline. It shows:

  • Which labels got picked and why (one-sentence rationale per label)
  • The priority and the cue that triggered it
  • Which team was routed to (if any)
  • Confidence scores (internal — not shown by default, available to admins via the "Show confidence" toggle)

If triage got something wrong, override it:

  1. Change the label / priority / team manually in the ticket
  2. Your correction is logged and (if you have enough corrections with similar patterns) nudges future triage behavior

What it's not

  • Triage is not auto-resolve. It prepares the ticket; it doesn't reply.
  • Triage doesn't rewrite the customer's message.
  • Triage doesn't share data across workspaces — your labels, your history, your tenant.

Troubleshooting

  • No triage happening? Check Settings → AI → Triage: enabled? Check Settings → Billing → Credits: any left? Check Settings → AI → Activity: errors?
  • Labels keep getting it wrong? Add label hints with one-sentence descriptions. This is the single biggest accuracy lever.
  • Triage too slow? Triage runs on a ~500ms P50 / ~2s P99. If you see consistent multi-second delays, check Settings → AI → Activity for upstream provider issues.

Summary

  • Runs once per inbound ticket, async, 1 credit
  • Labels + priority + team routing, with a readable reasoning trace
  • Tuneable via hints, rules, and per-channel/team on-off
  • Never blocks ticket creation

Questions? Email us.