# Freshchat shift board that shows where your queue is stalling

> See every unresolved Freshchat conversation oldest first, spot who is drowning, and reassign, reply, or resolve without leaving the page.

- Workflow type: app
- Services: Freshchat, Slack Bot
- Categories: Customer Support, Operations
- Published: 2026-08-24

## What it does

- Puts every unresolved Freshchat conversation on one board, oldest first, with a running clock on each row so you can see exactly how long someone has been waiting
- Flags the two states that actually cost you: nobody has replied in over 30 minutes, and nobody has picked the conversation up in over 10
- Groups the queue by the agent handling it and by channel, with a side panel showing each agent and their current open count so you can tell who is buried and who is free
- Lets you reassign, resolve, or send a holding reply from any row, ask for an instant catch-up summary with a suggested next reply, and post an end-of-shift handover to Slack

## What you'll need

- A Freshchat account with admin access, so the board can see conversations across every agent rather than just one inbox
- A Slack workspace and the channel your support team uses for shift handovers
- Your team's own idea of what counts as too long to wait, since the two warning thresholds are yours to set

## Prompt

I run a support team on Freshchat and I want a shift board my team lead keeps open all day. Freshchat's own reporting is too thin to see where the queue is rotting, so this app is the supervisor view I do not get today. It is not a replacement for the agent inbox: my agents keep working in Freshchat, and this is the screen the person running the shift watches.

Important data-path note. Freshchat has no account-wide operation for listing all conversations, so the board has to assemble the queue itself. Page through List Users, call List User Conversations for each user, keep only conversations whose status is not resolved, and label each one with its channel using List Channels. Use Get Conversation when a single row needs fresher detail. This is expensive, so cache the assembled queue in the app and refresh it on a timer and on a manual Refresh button rather than rebuilding it on every render. Show when the queue was last refreshed and let me force a refresh.

The main view is a board of every unresolved conversation, sorted oldest first, with an age clock on each row that keeps counting while the page is open. Each row shows the customer, the channel, the assigned agent, the time since the last message, the time since the conversation was created, and a snippet of the most recent customer message. I can group the board by assigned agent or by channel, and filter to a single agent or channel. Two states get flagged loudly because they are the ones that hurt us: no reply from anyone on our side in over 30 minutes, and no agent assigned in over 10 minutes. Both thresholds live in app settings so I can tune them per channel.

A side panel lists every agent from List Agents with their current open count, computed from the assembled queue, plus their oldest waiting conversation. That is how I see who is drowning and who is idle. Clicking an agent filters the board to their rows.

From any row I can act without leaving the page. Reassign the conversation to another agent, or resolve it, both using Update Conversation, which takes status "resolved" to close and "reopened" to bring one back. I can also send a holding reply with Send Conversation Message, either free text or one of a few saved holding phrases I can edit in settings. Freshchat returns 202 Accepted on writes and processes them asynchronously, so update the row optimistically, mark it as pending, then re-fetch that conversation shortly after to confirm the change landed, and surface a clear error on the row if it did not.

Every row has a "Catch me up" button that kicks off a background agent. The agent reads the full transcript with List Conversation Messages, paging back to the start of the conversation, pulls the conversation record with Get Conversation and the customer with Get User for context, and writes back into the row a short summary in three parts: what the customer wants, what has already been tried, and a suggested next reply. The summary is stored against that conversation id with a timestamp so it persists across refreshes and the whole team lead session, and the row shows a spinner while the agent is working. The suggested reply lands in an editable box on the row, and once I am happy with it I send it with Send Conversation Message straight from there. Let me re-run Catch me up on a row whose conversation has moved on since the last summary.

At the end of a shift I press "Post handover", which composes a summary of what is still open with ages and owners, what got resolved during the shift, and who is carrying what into the next shift. Track a shift start time in the app so the resolved list is scoped to this shift. Show me the composed handover first so I can edit it, then post it to our Slack support channel with the Slack Bot "Send a Message" operation. Let me pick the destination channel in settings using Slack Bot's List Channels, and remember it.

Keep the whole thing dense and scannable, the way a supervisor wants it: the board is the page, the agent panel sits beside it, and nothing important is hidden behind a menu. The flagged rows should be obvious at a glance from across a desk.

## How to customize

- Change the two warning thresholds, for example 15 minutes without a reply on live chat and an hour on email
- Group by channel first instead of by agent, or filter the board down to one agent or one channel for a coaching session
- Pick which Slack channel the handover lands in and what it covers: still open, resolved this shift, and who is carrying what

## FAQ

### Does this replace the Freshchat agent inbox?

No. Your agents keep working in Freshchat exactly as they do today. This is the supervisor view on top: one screen a team lead keeps open all day to see where the queue is rotting and step in when a conversation is going cold.

### Why does the board take a moment to build the first time?

Freshchat does not offer a single list of every conversation in the account, so the board assembles the queue by walking your customer records and collecting their open conversations. It keeps that queue cached and refreshes it in the background, so only the first load feels slow.

### When I resolve or reassign from the board, does it really change Freshchat?

Yes. Resolving, reopening, reassigning, and replying all write straight back into Freshchat, and your agents see the change in their own inbox. Freshchat processes these changes a moment after they are sent, so the row updates immediately and then re-checks itself to confirm.

### What does the Catch me up button actually read?

It reads the full conversation transcript from the beginning and writes back a short summary of what the customer wants, what has already been tried, and a suggested next reply. The suggestion is a draft, so you can edit it before anything is sent.

### Does it cover chats from WhatsApp, email, and other channels too?

Yes. Every conversation is labelled with the channel it came in on, so you can group or filter by channel and hold live chat to a tighter response time than slower channels.

Use this prompt in General Input: https://www.generalinput.com/prompts/freshchat-shift-board-that-shows-where-your-queue-is-stalling