QVCCS innovation · Live monitoring
CX Pulse: a push-driven Genesys Cloud presence wallboard, team by team
A supervisor at 08:55 wants one thing: who is actually on queue, who is available and who has been on break since half past seven. CX Pulse answers that on a single live board, grouped by Genesys group or routing queue, by streaming every presence and routing-status change from the Genesys Cloud notifications API.
Did you know that a Genesys Cloud routing status – Off Queue, Idle, Interacting, Communicating or Not Responding – is set by the system, not the agent? Agents are placed in Not Responding automatically when they do not pick up an interaction within the queue’s timeout.
Did you know that each Genesys Cloud notification WebSocket is limited to 1,000 topics, and that subscribing to more returns a 400 error? Watching an agent’s presence and routing status costs two topics, so one channel can stream at most 500 agents.
Did you know that a PUT to a Genesys Cloud notification channel’s subscriptions replaces the whole topic list, whereas a POST adds to it? Channels stay active for 24 hours, and an application can hold up to 20 of them.
01
The 08:55 question every supervisor asks
Every contact centre morning starts the same way. The phones open at nine, the forecast says thirty agents, and the team leader wants to know – right now – who is logged in, who is On Queue, who is still in Meeting from the stand-up and who has quietly sat in Break for forty minutes. They do not want a report about yesterday. They want line-of-sight of the floor, organised the way they think about it: by team, by Genesys group, by routing queue.
That was the brief for CX Pulse. It is a wallboard, not a reporting tool: one dot per agent, clustered by state, with a gauge for the overall shape of the floor, a strip of KPI tiles, a card for each group or queue and a ticker of state changes as they happen. Its design principle is simple – the moment an agent goes Available, joins the queue, steps away or misses an offered interaction, the board should change, pushed by Genesys rather than polled for.
02
Three fields, not one: how Genesys models presence
The first insight came from the Genesys data model itself. What a supervisor calls an agent’s “status” is really three independent things. There is the system presence – the primary category such as Available, Away, Busy, Meal, Meeting or Training. There is the organisation presence – the secondary status your administrators define, such as “Comfort Break” or “Customer Calls”, which sits under a primary. And there is the routing status, which describes the agent’s relationship with ACD and is set by the platform, not by the agent.
Genesys reports these separately, so CX Pulse tracks them separately and derives a display state on every change. A routing status of Not Responding becomes Ineligible – the system removed the agent from routing after a missed offer. Idle, Interacting or Communicating becomes On Queue. Off Queue, or no routing status at all, falls back to the system presence. That fallback matters: when an agent leaves the queue, the board reverts them to their real presence instead of leaving them visually stuck On Queue, and a presence change while on queue updates the label without knocking them out of On Queue.
Secondary statuses need one more step. Live events reference presence definitions by ID, so at boot the app caches the organisation’s full set of presence definitions – label and primary for each – and resolves every event through it. A custom secondary keeps its own name in the agent tooltip and still lands in the right family on the gauge. Along the way we also found that the primary enum arrives in different spellings depending on the surface, so a normaliser folds them into one key set before anything is classified.
Read this diagram as text
A two-panel diagram: on the left the three presence fields Genesys reports for an agent, on the right a three-row rule table mapping routing status to one display state.
- Left panel, "What Genesys reports", headed "Three independent fields".
- "System presence": "Available · Away · Busy · Meal …".
- "Organisation presence": "“Comfort Break” → primary Away".
- "Routing status": "Set by the platform, not the agent"; a note says secondaries resolve through the presence definitions request.
- An arrow leads to the right panel, "What CX Pulse derives", headed "One display state per agent", with columns Routing status and Display state.
- Rule 1: "NOT_RESPONDING" becomes "Ineligible". Rule 2: "IDLE · INTERACTING · COMMUNICATING" becomes "On Queue". Rule 3: "OFF_QUEUE or none" becomes "System presence".
- Each display state has its own coloured dot, and a note reads "Presence changes on queue update the label, not the state".
- The banner beneath, "Each agent counts once", reads: "The derived state colours the dot, sets the gauge family and lands in exactly one KPI tile".
03
Booting the floor over REST
A wallboard is only as good as its starting picture, so CX Pulse boots from the Genesys Cloud Platform API before it streams anything. A radar splash narrates each step: the organisation profile from /api/v2/organizations/me, the presence definitions from /api/v2/presencedefinitions, the full agent roster with current state from /api/v2/users?expand=presence,routingStatus (paged 100 at a time), then groups and their members, and finally the routing queue list.
Group membership resolves in parallel batches of eight, and a group whose member fetch fails is logged, counted and surfaced in the status bar rather than silently lost. Queue membership is deliberately lazy: /api/v2/routing/queues/{id}/members runs only the first time a supervisor shows that queue, then it is cached for the session, so boot cost stays at one listing even in an organisation with hundreds of queues. Every list call pages 100 at a time and, on a 429, waits for Retry-After plus jitter before retrying.
Read this diagram as text
A two-panel diagram: on the left the start-up requests and the live notification channel, on the right the wallboard they both feed.
- Left panel, "Genesys Cloud Platform API", headed "Boot once, then stream", with a first section marked "Boot · REST · paged 100".
- Five start-up requests are listed, each with what it supplies: the organisation details ("org name"), presence definitions ("labels + primaries"), users with presence and routing status ("roster + state"), groups and their members ("8 groups at a time") and routing queues and their members ("lazy, on first show").
- Curved arrows from these five requests converge on the wallboard.
- A second section, "Live · notifications API", shows a box for creating a channel and replacing its subscriptions, with an arrow to a box listing two subscription topics per user: presence and routing status.
- That box is annotated "2 topics / agent" and "≤ 1,000 / channel", and a separate arrow leads from it to the wallboard.
- Right panel, "One focal view", headed "CX Pulse wallboard": a mock-up with a "Gauge", a grid of "Nine KPI tiles", "Group cards", "Queue cards" and a "Ticker · agent → new state".
- The banner beneath reads: "Hidden teams cost zero topics – every show or hide replaces the whole subscription list".
04
Streaming: one channel, 1,000 topics, 500 agents
After boot, CX Pulse creates a notification channel with POST /api/v2/notifications/channels and the browser opens its WebSocket directly to Genesys. Each watched agent costs two topics, v2.users.{id}.presence and v2.users.{id}.routingStatus. Genesys limits a connection to 1,000 topics, so a single channel can stream 500 agents – and that budget shaped the whole user experience.
Every group and queue starts hidden, which means zero subscriptions. Showing a team pushes its members onto the channel; hiding it takes them off. Each toggle issues a PUT that replaces the entire topic list, so the subscription set is always an exact union of what is on screen and can never creep past the cap. An agent who appears in both a group card and a queue card still costs only two topics. Hiding everything issues a DELETE that clears the subscriptions. The status bar shows the budget in plain sight, for example “412 / 1000 subscriptions”.
Two details keep the stream trustworthy. After each successful PUT, the app re-fetches presence for the just-subscribed users over REST, in chunks of 50, so a change that happened between roster load and subscription activation is not silently lost. And the channel lifecycle is handled for the user: the client answers Genesys heartbeats, renews pre-emptively when v2.system.socket_closing warns that the channel is about to expire, and after an unexpected close creates a fresh channel rather than retrying a stale one.
05
Reading the board: gauge, tiles, cards and ticker
The sidebar gauge is a 270° instrument arc covering every agent in visible groups and queues, with stacked segments for Available, On Queue, Away and Busy and the unfilled remainder showing the offline share. Above the content pane, nine KPI tiles – Online, Available, On Queue, Ineligible, Away/Break, Meal, Meeting, Training and Overdue – classify each logged-in agent exactly once from the derived display state. Hover over any tile and it lists precisely which agents it is counting, with their time in state.
There are two deliberate “overdue” rules. On group cards, an agent held in an Away or Busy family state for more than 15 minutes gets a highlighted ring – “glance at this person now”. The KPI Overdue tile uses a separate 61-minute rule across all non-productive states, the classic “forgot to log off” check. Same word, different jobs, both explained in the user guide so nobody has to guess.
Along the bottom, a newsroom-style ticker records each meaningful transition as a chip – agent name, arrow, new state – with recent changes only and per-agent de-duplication of repeated frames. Hover pauses it and shows the exact wall-clock time the change arrived; click a chip and the grid scrolls to that agent’s dot. If the agent is in a hidden team, the relevant sidebar rows flash instead, a quiet hint to show that group.
06
Where CX Pulse sits beside native Genesys views
Genesys Cloud already gives supervisors strong tools here, and CX Pulse is designed to sit alongside them. The Agents Status Summary and Detail views show agent statuses in real time for current date ranges, with Duration, Timeline and Log In – Log Out displays, primary statuses broken down by secondary statuses, filtering, grouping and export. From the Detail view, a supervisor with the right permissions can change an agent’s status or log them off. Performance dashboards add Metric, Chart, Web Content and Agent Status widgets that refresh in near real time.
What CX Pulse adds is a particular shape of view: a dedicated wallboard, organised by Genesys group or routing queue, where every pushed event moves a dot, flashes a card and lands in a ticker, and where Not Responding is counted apart from On Queue. It is also intentionally narrow. It is read-only by construction – it never changes an agent’s state – and it keeps no history: there is no export, because the data is a moving target. For history, analysis and agent control, the native views remain the right place.
07
Read-only, zero persistence and built to our method
Security was part of the design from the first workshop, not a later hardening pass. CX Pulse signs in with an OAuth client-credentials grant whose role needs only view access to users, groups, routing queues and presence definitions. The only POST, PUT or DELETE calls it makes manage its own notification channel. Credentials stay on the server side of the app, the browser holds only an opaque session, and presence data is displayed and then superseded by the next event – nothing about your agents is stored anywhere.
CX Pulse went through the same QVCCS lifecycle we apply to client work: requirements captured as supervisor user stories, a design reviewed by design authority, a build peer-reviewed against the Senior Platform Practice Lead’s engineering standards, and testing that deliberately included the failure paths – channel expiry, missing presence definitions, a 403 on queues, a group whose members will not load. Behind it sits the bench: Solution Architects, Senior Developers, Systems Integration Testers and Support Engineers who live in the Genesys Cloud APIs every day.
How it compares
Native Genesys Cloud CX views and CX Pulse
Both read the same presence and routing-status data. They are built for different jobs.
| Aspect | Native Genesys Cloud CX | QVCCS CX Pulse |
|---|---|---|
| Real-time agent status | Agents Status Summary and Detail views show statuses in real time for current date ranges, with Duration, Timeline and Log In – Log Out displays. | A wallboard with one dot per agent, re-clustered on every pushed presence or routing-status event. |
| Dashboards | Performance dashboards with Metric, Chart, Web Content and Agent Status widgets, refreshed in near real time. | A fixed wallboard layout: 270° gauge, nine KPI tiles, group and queue cards and a live transition ticker. |
| Organisation (secondary) statuses | Shown to administrators in views such as Agents Status Summary and Queues Activity Detail. | Resolved through a cached presence-definitions set, so each custom label appears in the tooltip and rolls up under its primary. |
| Not Responding | A system-set routing status applied when an agent does not answer within the queue’s timeout. | Counted as its own Ineligible tile, separate from On Queue. |
| Long-held states | Time in each status by interval in the Agents Status Detail view. | A 15-minute stale ring on cards and a 61-minute Overdue tile for likely “forgot to log off” cases. |
| Agent control | Supervisors with the required permissions can change an agent’s status or log them off. | Read-only by construction; it never changes an agent’s state. |
| History and export | Historical date ranges, saved views and export. | No history or export by design; nothing is persisted. |
Native capabilities are as described in the Genesys Cloud Resource Center at the time of writing; what each user sees depends on their permissions.
The takeaways
- Supervisors see every team’s presence and routing status on one board, grouped by Genesys group or routing queue.
- Not Responding is split out as Ineligible, so missed offers never look like agents taking calls.
- Organisation-defined secondary statuses keep their own names and still roll up under the right primary.
- Show/hide controls double as the subscription budget, keeping the channel within Genesys’ 1,000-topic limit.
- Read-only, client-credentials sign-in and zero persistence keep the security conversation short.
CX Pulse is part of the QVCCS App Suite, included with every Managed Professional Services tier and built by the same certified team that designs, builds and supports Genesys Cloud CX solutions.
Sources
- Routing status – Genesys Cloud Resource Centerhelp.genesys.cloud
- Presence, status, and activity indicators overviewhelp.genesys.cloud
- Agents Status Detail viewhelp.genesys.cloud
- Performance dashboards overviewhelp.genesys.cloud
- About views and dashboardshelp.genesys.cloud
- Notifications – Genesys Cloud Developer Centerdeveloper.genesys.cloud