Every 15 minutes
Get a Slack alert for tickets nobody has picked up
Slack tells you when a ticket has sat unassigned too long or is close to missing its SLA, once per ticket.
- Runs
- Every 15 minutes
- Apps
- Slack, Zendesk
- AI
- Not needed
- Access
- Zendesk read; chat:write
Send this to your assistant
Create a ClickRuntime automation: every 15 minutes, check Zendesk for open tickets with no assignee. If one is older than 30 minutes, post it to #support-leads with a link.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A support team of six shares one queue. On a busy morning everyone assumes someone else has taken the awkward ticket, and it sits for hours. The first anyone hears of it is an angry follow-up from the customer, or a missed SLA in the monthly report.
A short Slack alert for each ticket that is left unclaimed puts it in front of the team lead while there is still time to answer it well.
What you get out of it
Nothing slips between agents
Tickets that fall through the gaps are caught within minutes, not discovered at the end of the day.
Fewer SLA breaches
The lead hears about at-risk tickets while there is still time to assign them, rather than seeing the breach in a report afterwards.
One alert per ticket
Each ticket is flagged once, so the channel stays quiet enough that alerts are taken seriously.
Fairer workload
Seeing which tickets go unclaimed shows the lead where the queue needs another pair of hands or a better routing rule.
How it works
What happens, step by step
Every 15 minutes, ClickRuntime searches Zendesk for open tickets with no assignee.
It checks how long each one has been waiting against the limit you set.
Tickets past the limit are posted to your #support-leads Slack channel with a link to the ticket.
It remembers which tickets it has already flagged, so each one is posted only once.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect Zendesk
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and Zendesk steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timezone, timedelta
from clickruntime import on_trigger, report_fetched, http, credentials, state, notify
ZD, AGENT = "https://yourcompany.zendesk.com/api/v2", "you@yourcompany.com"
def zd(method, path, **kw):
r = http.request(method, ZD + path, auth=(f"{AGENT}/token", credentials.secret("ZENDESK_API_TOKEN")), **kw)
return r.raise_for_status() or (r.json() if r.content else None)
LIMIT = timedelta(minutes=30)
@on_trigger
def run(event):
tickets = zd("GET", "/search.json", params={"query": "type:ticket assignee:none status<solved"})["results"]
alerted = set(state.get("alerted") or [])
now = datetime.now(timezone.utc)
late = [t for t in tickets if t["id"] not in alerted
and now - datetime.fromisoformat(t["created_at"].replace("Z", "+00:00")) > LIMIT]
report_fetched(len(late))
if not late:
return {"summary": "Nothing waiting"}
lines = [f"• #{t['id']} {t['subject']} ({t['priority'] or 'normal'}) https://yourcompany.zendesk.com/agent/tickets/{t['id']}" for t in late]
notify.slack("Unassigned for over 30 minutes:\n" + "\n".join(lines), channel="#support-leads")
state.set("alerted", sorted(alerted | {t["id"] for t in late})[-2000:])
return {"flagged": len(late)}FAQ
Common questions
How long counts as too long?
Does it use our SLA policies?
Will it alert outside working hours?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Follow each Zendesk ticket in its own Slack thread
Every new ticket appears in Slack, and each reply or status change lands in that ticket's thread.
See how it worksPost weekly support numbers to Slack
Every Monday, Slack shows last week's new and solved tickets and the median first reply time, compared with the week before.
See how it worksTurn a Slack message into a Zendesk ticket with an emoji
React to any Slack message with 🎫 and it becomes a Zendesk ticket, with the link posted back in the thread.
See how it worksKeep exploring
Set up “Get a Slack alert for tickets nobody has picked up” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.