Triage urgent Zendesk tickets to Slack with a draft reply
Every 15 minutes, post new urgent and high priority Zendesk tickets to a Slack channel with a classification and a draft first response.
Integrations
Zendesk
Slack Bot
Type
Categories
- Customer Support
- Operations
Build me an agent workflow that triages urgent Zendesk tickets into a dedicated Slack channel with a draft first response, so whoever is on-call can reply faster.
Trigger: cron, every 15 minutes.
On each run, do this:
1. Call Zendesk Search Tickets for tickets created or updated since the last run with priority urgent or high and status new or open. Use a query like 'type:ticket priority>=high status<solved updated>{last_run_iso}' and sort by updated_at descending.
2. For every ticket returned, call Zendesk Show Ticket to get the full ticket (subject, description, requester id, tags, status, priority, url) and Zendesk List Ticket Comments to get the conversation, then pick the most recent comment authored by the requester as the customer's actual question.
3. Classify the ticket into exactly one of these buckets: bug, billing, how-to, churn risk. Base the classification on the subject, description, and latest customer comment.
4. Draft a short proposed first response (3 to 6 sentences) grounded in the ticket body. Address the customer by first name when known. Do not invent facts, account ids, refund amounts, or commitments. If something cannot be answered without more info, the draft should ask for the missing detail.
5. For each ticket, post one Slack message via Slack Bot Send a Message into the channel #support-urgent. Format the message like this:
*New urgent ticket from {customer_name}* — {classification} Ticket #{ticket_id} • Priority: {priority} • Status: {status} *Question:* {requester_question} *Draft reply:* ``` {draft_reply} ``` <{ticket_url}|Open in Zendesk>
Use mrkdwn formatting. The ticket_url should deep link to the ticket inside the user's Zendesk subdomain.
6. Dedupe by ticket id. Keep a record of which Zendesk ticket ids have already been posted, and skip any ticket that has already been announced. Only post again if the ticket re-opens after being solved.
Other rules: never post tickets that are already solved or closed. Never auto-reply to the customer in Zendesk; the draft only goes to Slack. If no qualifying tickets exist on a given run, do nothing (no 'all clear' message). If Zendesk returns a 429, back off and retry on the next run.
What it does
- Polls Zendesk every 15 minutes for tickets created or updated since the last run with priority urgent or high and status new or open.
- Reads each ticket's full context, including the latest customer comment, then classifies it as bug, billing, how-to, or churn risk.
- Drafts a short, grounded first response based on the actual ticket body so the on-call agent can edit and send rather than write from scratch.
- Posts one Slack message per ticket into a dedicated #support-urgent channel with the customer name, classification, the question, the draft reply, and a deep link to the ticket.
- Dedupes by ticket id so the same ticket is not reposted on later runs.
What you’ll need
- A Zendesk account with API token access (Admin Center, Apps and integrations, APIs, API tokens). You will need the subdomain, an agent email, and the token.
- A Slack workspace with the Slack Bot integration connected, and a channel like #support-urgent that the bot has been added to.
- Permission to send messages in that channel as the bot (chat:write, plus chat:write.public if the bot is not yet a member).
How to customize it
- Change the cadence. Drop to every 5 minutes for a follow-the-sun rotation, or stretch to hourly for lower volume queues.
- Tighten the ticket filter. Restrict to a specific brand, group, form, or tag (for example tag:enterprise) instead of all urgent and high priority tickets.
- Change the classification taxonomy. Replace bug, billing, how-to, churn risk with the labels your team actually triages on.
- Route by classification. Send churn risk tickets to a CSM channel and bug tickets to an engineering channel instead of one shared #support-urgent.
Use cases
- Notifications & Alerts
- Feedback Triage