How to Classify and Route Support Tickets Automatically with AI

Let AI read support tickets, classify them by type and priority, and route them to the right team.

What This Integration Does

When a new support ticket arrives, this workflow reads the subject and body, asks an AI step for a structured classification, and routes the ticket to the right team queue and Slack channel. It also tags the source conversation so future humans see the auto-classification at a glance.

It runs on the inbound side - either via a Front webhook firing on new conversation, or via the Email Trigger reading a shared inbox. The classification is deterministic enough (with Structured Output enforcing an enum) that downstream Condition branches stay stable.

Prerequisites

  • A front connection with webhook delivery enabled (or use the Email Trigger if you read from a shared inbox).
  • A slack connection - one channel per team you route to.
  • Optional: a monday connection if you also create a board item per ticket.
  • A workspace LLM provider configured.

Step 1: Webhook Trigger

Drop a Trigger node and set the type to Webhook. Configure Front to fire on "conversation created" and point it at the Spojit webhook URL. The trigger exposes the conversation ID, subject, and first message body to the rest of the workflow.

Step 2: Fetch Full Conversation Context

The webhook payload is minimal. Add a Connector node on front / get-conversation using the conversation ID from the trigger. This gives you the full message thread, sender details, and any existing tags - useful if a customer follows up on an existing issue.

Step 3: AI Classification with Structured Output

Add a Connector node in Agent Mode (or a plain LLM call without tools if no lookups are needed). Set the prompt to classify the ticket and define this Structured Output schema:

{
  "type": "object",
  "properties": {
    "category":      { "type": "string", "enum": ["billing", "technical", "feature", "bug", "general"] },
    "priority":      { "type": "string", "enum": ["low", "medium", "high", "urgent"] },
    "summary":       { "type": "string" },
    "suggestedTeam": { "type": "string", "enum": ["billing", "support", "product", "engineering"] },
    "needsHuman":    { "type": "boolean" }
  },
  "required": ["category", "priority", "summary", "suggestedTeam"]
}

Keep the enums short - downstream routing breaks if the model invents new categories.

Step 4: Tag the Source Conversation

Add a Connector node on front / add-tag with the category and priority from the AI step. This makes the classification visible to anyone reading the conversation directly in Front, and lets you filter by tag later.

Step 5: Route via Condition Branches

Add a Condition node on {{ aiResult.suggestedTeam }}. Create a branch per team and inside each branch add a Connector node on slack / send-message targeting the team's channel. Include the AI summary, the Front conversation link, and the priority. For urgent items, also @here the channel:

{
  "channel": "#support-billing",
  "text": ":ticket: *[{{ aiResult.priority | upper }}]* {{ aiResult.summary }}\nFront: {{ conversation.url }}"
}

Step 6: Optional - Create a Monday Board Item

If you track work in Monday, add a parallel branch that calls monday / create-item on a board scoped to the suggested team. Map AI fields to board columns (category, priority, summary, source URL). When the conversation is resolved in Front, a follow-up workflow can call monday / update-item to close the matching item.

Tips

  • Cheap model is fine. Classification with an enum schema works on small, fast models - reserve premium models for harder tasks.
  • Include recent history. If a customer has prior conversations, pull their last 2-3 via front / list-conversations and include short summaries in the prompt - dramatic priority shifts when the same person keeps reporting issues.
  • Allow a human-override path. Add a tag like ai-skip in Front. Have the workflow short-circuit when present so humans can take a ticket back manually.

Common Pitfalls

  • Webhook retries. Front retries failed webhooks. Make the workflow idempotent by checking whether the AI tag already exists on the conversation before posting to Slack again.
  • Auto-replies from monitoring tools. Bounces and "do not reply" autoresponses look like tickets. Filter them out with a Condition before the AI step (cheaper than asking the model).
  • Sensitive content. Payment details and PII land in support tickets. Mask card numbers and SSNs with a regex / replace step before the AI step if compliance requires it.
  • Priority inflation. Users often write "urgent" when they don't mean it. Train the prompt with examples that distinguish business-urgent from emotionally-urgent.

Testing

Send 10-20 sample tickets covering each category (a billing question, a clear bug, a feature request, a vague complaint). Check that the routing matches the team's expectations and that the Slack messages render correctly. Once stable, enable the webhook and watch the first day of live traffic before relying on the routing.

Learn More

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.