Skip to content

Hourly

Flag messages that nobody has answered

Each hour, inbound messages waiting more than your limit without a reply are posted to Slack.

Runs
Hourly
Apps
Sprout Social
AI
Not needed
Access
API token

Send this to your assistant

Create a ClickRuntime automation: every hour, find inbound Sprout Social messages older than 2 hours with no reply and post them to #social-inbox in Slack.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Social customers expect a reply within hours, and many brands promise it publicly. In practice, messages arrive at all hours across several networks, teammates assume someone else answered, and a direct message about a damaged order sits unread for two days. The person who sent it posts a public complaint, tags the brand and mentions it was ignored. Sprout shows the inbox, but there is no simple way to see which conversations have gone quiet on your side.

Every hour, ClickRuntime queries Sprout for messages in a time window, finds the ones that still have no reply, and posts them to Slack with the network, sender and age of the message. As soon as someone replies in Sprout, the message drops out of the next list.

Social care teams and agencies with response-time promises are the typical users.

What you get out of it

  • Slow replies are caught before they escalate

    A message that has waited three hours is listed while the customer is still calm. A quick reply at that point often prevents the public complaint that would follow later.

  • Response-time promises can be kept

    Brands that advertise a reply within a few hours need to know when they are about to miss it. An hourly list shows precisely which conversations are close to the limit.

  • Coverage gaps are exposed

    If messages tend to go unanswered in the evenings or at weekends, the list shows it repeatedly. That evidence supports a case for extra shifts or better handover between regions. Staffing decisions then rest on evidence, not on a hunch about when messages arrive.

  • Shared inboxes get ownership

    When everyone assumes a colleague has handled a message, nobody does. A posted list puts the unanswered ones where the whole team sees them and someone claims each one. Replies speed up because the question of who should answer is settled in the channel.

  • Agencies can prove diligence

    For a client, a record of what was unanswered and how quickly it was cleared shows that the account is monitored, and it quickly settles questions about missed messages. That evidence can also support a case for more budget or staff.

How it works

What happens, step by step

  1. Every hour ClickRuntime checks your Sprout Social inbox for messages people sent you in the last day.

  2. It picks out the ones that have had no reply for more than 2 hours and skips any it has already flagged.

  3. Each is posted to your #social-inbox Slack channel with the network, the sender's name, the message and a link to it.

Before it runs live

  • Connect Sprout Social

What you get

RunsHourly
Flag messages that nobody has answeredtoday, 9:00Succeeded
Slack · #social-inboxNo reply for 2h+ on instagram from Dana Lee: Is the Northwind bundle back in stock?

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

  • Run it at a different time, more or less often, or only on weekdays
  • 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 Sprout Social steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
unanswered_inbox_messages_alert.pyexample
from datetime import datetime, timedelta, timezone
from clickruntime import on_trigger, credentials, http, state, notify

API = "https://api.sproutsocial.com/v1"

def sprout():
    h = {"Authorization": f"Bearer {credentials.secret('SPROUT_API_TOKEN')}"}
    cid = http.get(f"{API}/metadata/client", headers=h).json()["data"][0]["customer_id"]
    return h, cid

@on_trigger
def run(event):
    h, cid = sprout()
    now = datetime.now(timezone.utc)
    window = f"created_time.in({(now - timedelta(days=1)).isoformat()}..{(now - timedelta(hours=2)).isoformat()})"
    msgs = http.post(f"{API}/{cid}/messages", headers=h, json={
        "filters": [window, "activity_type.eq(INBOUND)"],
        "fields": ["guid", "text", "from", "network", "perma_link", "action_last_update_time"]}).json()["data"]
    posted = set(state.get("posted") or [])
    waiting = [m for m in msgs if not m.get("action_last_update_time") and m["guid"] not in posted]
    for m in waiting:
        notify.slack(f"No reply for 2h+ on {m['network']} from {m['from'].get('name')}: {m['text'][:200]}\n{m.get('perma_link', '')}",
                     channel="#social-inbox")
    state.set("posted", list(posted | {m["guid"] for m in waiting})[-2000:])
    return {"waiting": len(waiting)}

FAQ

Common questions

How does it decide a message is unanswered?
It looks at messages in the chosen time frame and checks whether a reply from your brand exists in the conversation. Messages without one are listed, and those with a reply are not. Only your own replies count, so a message answered by another customer does not.
Can I set a minimum age?
Yes. If you only want to see messages older than two hours, the list leaves out fresher ones, giving your team time to reply first. A shorter or longer window can be chosen for each network. Choose whatever fits your promise to customers. The cutoff can differ by network if you prefer.
Does it include comments as well as direct messages?
It covers inbound messages that Sprout's inbox returns, which can include comments, mentions and direct messages depending on how your profiles are connected. You can narrow the list to just direct messages. Say which types you want counted when setting it up. The choice affects how long the list is.
What permissions does it need?
API token. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (hourly). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Flag messages that nobody has answered” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.