Freshchat shift board that shows where your queue is stalling

By General Input

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

Integrations

  • Freshchat
  • Slack Bot

Type

App

Categories

  • Customer Support
  • Operations

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.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them