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.

Agentic Task
ZendeskSlack BotCustomer SupportOperationsNotifications & AlertsFeedback Triage

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.

Additional information

What does this prompt do?
  • 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 do I need to use this?
  • 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 can I 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.

Frequently asked questions

Will this auto-reply to customers?
No. The agent only drafts a reply and posts it in Slack. A human still has to copy, edit, and send the response inside Zendesk. This is intentional, since urgent tickets are exactly where you want a person in the loop.
How does it avoid posting the same ticket twice?
The agent keeps a list of ticket ids it has already posted and skips them on the next run. Re-opened or updated tickets are also tracked so you do not get duplicate Slack pings every 15 minutes.
What ticket fields does the agent read?
Zendesk Search Tickets returns the candidate set, then for each ticket it calls Show Ticket and List Ticket Comments to read the subject, description, requester name, status, priority, tags, and the most recent customer comment.
Can I post into a private Slack channel?
Yes. Add the bot to that private channel first. The Slack Bot integration uses chat:write to post messages, and channel membership is what controls access for private channels.
What if the draft reply is wrong?
Edit it in Zendesk before sending. The Slack post is meant as a fast starting point, not a final response. The classification and link to the ticket are useful even when the draft itself needs to be rewritten.

Stop refreshing the Zendesk queue.

Connect Zendesk and Slack once, and Geni surfaces every urgent ticket with a draft reply ready to send.