Prompt
How do I set up a ticket triage tool for routing and summarizing inbound support tickets in Zendesk and Slack?
Latest observation
Here’s a practical way to set up a ticket triage tool that routes and summarizes inbound support tickets using Zendesk + Slack.
Goal
When a new Zendesk ticket arrives:
- Capture ticket data
- Summarize the issue
- Classify it (billing, bug, login, feature request, etc.)
- Route it to the right team/assignee
- Post a Slack notification with the summary and recommended action
Recommended architecture
Option A: Low-code / no-code
Use:
- Zendesk Triggers + Webhooks
- Zapier / Make / Workato
- OpenAI or another LLM step
- Slack app or Slack webhook
This is fastest if you don’t want to build much.
Option B: Custom service
Use:
- Zendesk webhooks/triggers
- A small service in Node.js / Python
- LLM API for summarization/classification
- Zendesk API to update ticket fields/tags/assignee
- Slack API to post or thread notifications
This is best if you want control, reliability, and custom routing logic.
Setup steps
1) Define your routing rules
Before building anything, decide:
- Ticket categories: billing, technical bug, account access, feature request, cancellation, enterprise, etc.
- Priority rules: VIP customers, SLA breaches, keywords like “down”, “cannot login”, “refund”
- Assignment rules:
- Billing → Finance queue
- Bugs → Engineering support
- Login/account access → Ops/support queue
- Enterprise → Dedicated CS team
It helps to store these as:
- Zendesk custom fields
- tags
- routing maps in your app config
2) Prepare Zendesk
Create:
- Custom ticket fields:
- Category
- Priority
- Suggested assignee/team
- Summary
- Tags:
triagedneeds-human-reviewbillingbugurgent
- Groups in Zendesk for each support team
Then set up a Zendesk Trigger:
- Fire on ticket creation
- Call your webhook endpoint with:
- ticket ID
- subject
- description
- requester info
- tags
- priority
- custom fields
3) Build the summarization/classification step
Send the ticket content to an LLM with a structured prompt.
Example output schema
Have the model return JSON like:
{
"summary": "User cannot reset password after multiple attempts.",
"category": "account_access",
"priority": "high",
"sentiment": "frustrated",
"recommended_team": "support_ops",
"suggested_tags": ["login_issue", "urgent"],
"requires_human_review": true
}
Prompt guidance
Ask the model to:
- summarize in 1–2 sentences
- identify the category
- assess urgency
- extract key entities:
- product area
- error message
- customer impact
- account tier
- avoid making unsupported assumptions
4) Apply routing logic
Use your classification result to map tickets.
Example:
billing→ Zendesk group = Billingbug+highpriority → Engineering support + Slack escalationfeature_request→ product feedback queueaccount_access→ Support Ops
You can route by:
- tags
- custom fields
- group ID / assignee ID
- SLA escalation
Then update the Zendesk ticket via API:
- set category field
- add tags
- assign group
- optionally add an internal note with the summary
5) Notify Slack
Post a message to a support triage channel like #support-triage.
Include:
- Ticket ID and link
- Customer name / email
- Summary
- Category
- Priority
- Recommended team
- Suggested next action
Example Slack message
New Zendesk ticket #12345
Summary: User cannot reset password due to “invalid token” error.
Category: account_access
Priority: high
Recommended team: Support Ops
Action: Assign to on-call queue and investigate reset flow.
Open Ticket
You can also create:
- threaded updates
- emoji reactions for routing status
- buttons like “Assign to me”, “Escalate”, “Mark reviewed”
Suggested workflow
Inbound ticket flow
- Ticket created in Zendesk
- Zendesk trigger sends webhook to triage service
- Service fetches ticket details from Zendesk API
- Service runs summarization + classification
- Service maps category to team
- Service updates Zendesk ticket
- Service posts summary to Slack
- Optional: a human reviews edge cases
Best practices
Keep humans in the loop
Don’t fully automate every ticket at first. Use a confidence threshold:
- high confidence → auto-route
- low confidence → mark
needs-human-review
Use structured outputs
Have the model output strict JSON so your app can parse it safely.
Don’t rely only on AI
Combine AI with rule-based logic:
- VIP customer detection
- outage keywords
- spam filtering
- known product areas
Log everything
Store:
- raw ticket text
- model output
- final routing decision
- Slack message ID
- Zendesk update response
This helps debugging and tuning.
Protect customer data
Make sure:
- data access is restricted
- sensitive fields are masked if needed
- your LLM usage complies with your privacy/security requirements
Minimal custom implementation outline
Components
- Webhook endpoint: receives Zendesk trigger payload
- Ticket fetcher: gets full ticket from Zendesk API
- AI classifier: returns summary + category + priority
- Router: maps category to Zendesk group/Slack channel
- Updater: writes fields/tags back to Zendesk
- Notifier: posts to Slack
Pseudocode flow
def triage_ticket(ticket_id):
ticket = zendesk.get_ticket(ticket_id)
result = llm.classify_and_summarize(ticket.subject, ticket.description)
routing = route_map[result["category"]]
zendesk.update_ticket(ticket_id, {
"group_id": routing["zendesk_group_id"],
"tags": ticket.tags + result["suggested_tags"] + ["triaged"],
"custom_fields": {
"category": result["category"],
"summary": result["summary"],
"priority": result["priority"]
}
})
slack.post_message(
channel=routing["slack_channel"],
text=format_slack_message(ticket, result)
)
If you want a fast MVP
Here’s the simplest path:
- Create a Zendesk trigger on new ticket
- Send ticket payload to a webhook
- Use an LLM to output JSON summary/category/priority
- Update Zendesk fields via API
- Post summary to Slack via webhook
- Route only 3–5 categories initially
Common pitfalls
- Overcomplicated taxonomy too early
- LLM hallucination if prompt/output isn’t constrained
- No fallback routing for unknown categories
- Missing Zendesk rate-limit handling
- Not testing with historical tickets
- Posting too much detail to Slack if tickets contain sensitive data
Example rollout plan
Week 1
- Define categories and routing map
- Create Zendesk fields/tags/groups
- Set up Slack channel and webhook
Week 2
- Build webhook receiver
- Integrate summarization/classification
- Test on historical tickets
Week 3
- Add Zendesk updates and Slack posts
- Pilot with one queue
- Human review of all AI decisions
Week 4
- Expand categories
- Add confidence thresholds
- Optimize prompt and routing rules
If you want, I can also give you:
- a Zendesk trigger + webhook setup example
- a Node.js or Python reference implementation
- a sample LLM prompt for ticket triage
- a Slack message template and routing schema
Observation history
Unlock observation history
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.
How did Obsurfable measure this prompt?
Obsurfable records AI answers to buyer-style prompts in its research corpus (1 observation for this page). Metrics are distributions over observations, not a single static ranking.
Which AI systems does Obsurfable collect answers from?
OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.