On a schedule
Find tickets no agent has picked up
Tickets still without an agent after 2 hours land in Slack, each one only once.
- Runs
- On a schedule
- Apps
- Freshdesk
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every 30 minutes, find Freshdesk tickets with no agent assigned that are more than 2 hours old and send the list to #helpdesk in Slack.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Tickets that nobody owns are the quiet failures of a support team. Email creates a ticket, the round-robin misses it or the group has no agent online, and it lies in the queue with no responder. Each agent assumes someone else saw it. A customer who wrote in on Monday morning is still waiting on Tuesday, and what started as a simple question has become a complaint that needs a manager's apology.
On a regular check, ClickRuntime filters Freshdesk tickets that have no responder, looks at how long each has been open, and posts a message to Slack for each one that has waited longer than your limit. It remembers each ticket it has mentioned, so a given ticket produces one warning.
It suits teams with shared inboxes, rotating shifts or several groups where ownership can slip.
What you get out of it
Find tickets nobody owns
The check looks for the absence of a responder, which is exactly the situation people cannot see in a busy list. A ticket without an owner gets one before the customer has waited long.
Warn at the right moment
Only tickets older than your limit are mentioned, so new ones that are being handled are left alone. The alert means a ticket has genuinely been waiting, not that it just arrived.
Cover shift changes and time zones
Handovers are when tickets fall through. An alert at the start of a shift lists what was left unassigned overnight, so the new team starts with the neglected items. A good handover habit starts with a list.
Reduce escalations to managers
Customers who wait a day for a first reply often escalate. Catching unowned tickets early prevents many of those messages and the apologies that follow. That saves the manager time and the customer frustration.
Give each ticket one clear warning
Posting once per ticket stops the channel from filling with repeated notices. People learn to take each message seriously instead of treating the alert as noise. Fewer notices carry more weight.
How it works
What happens, step by step
Every 30 minutes ClickRuntime checks Freshdesk for open tickets that have no agent assigned.
It keeps the ones that have been waiting more than 2 hours.
It skips any ticket it has already posted, so each one is flagged only once.
The list goes to your #helpdesk Slack channel with each ticket's number, subject and a link to open it.
Before it runs live
- Connect Freshdesk
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 Slack
- Combine it with other Freshdesk steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, state, notify, report_fetched
DOMAIN = "acme" # acme.freshdesk.com
@on_trigger
def run(event):
key = credentials.secret("FRESHDESK_API_KEY")
resp = http.get(f"https://{DOMAIN}.freshdesk.com/api/v2/search/tickets",
params={"query": '"status:2 AND agent_id:null"'}, auth=(key, "X"))
resp.raise_for_status()
cutoff = datetime.now(timezone.utc) - timedelta(hours=2)
posted = set(state.get("posted") or [])
old = [t for t in resp.json()["results"]
if datetime.fromisoformat(t["created_at"].replace("Z", "+00:00")) < cutoff and t["id"] not in posted]
report_fetched(len(old))
if not old:
return {"summary": "Nothing new"}
lines = [f"#{t['id']} {t['subject']} https://{DOMAIN}.freshdesk.com/a/tickets/{t['id']}" for t in old]
notify.slack("Unassigned for 2h+:\n" + "\n".join(lines), channel="#helpdesk")
state.set("posted", list(posted | {t["id"] for t in old})[-1000:])
return {"posted": len(old)}FAQ
Common questions
How long counts as unattended?
Does assigning a group count as an owner?
What if an agent replies without being assigned?
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
Get warned about overdue Freshdesk tickets
Every hour you see which tickets have passed their due-by time.
See how it worksHear about negative satisfaction ratings fast
A poor rating reaches you within 15 minutes, with the comment, agent and ticket link.
See how it worksPost new Freshdesk tickets to Slack
Each new ticket shows up in Slack with its subject, requester and priority.
See how it worksKeep exploring
Set up “Find tickets no agent has picked up” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.
