QVCCS innovation · Analytics and insight

IVR Sankey: every call through your Genesys Cloud IVR, on one map

A funnel answers a question you already have. A map shows you the questions you did not know to ask. IVR Sankey harvests every call through an Architect flow into a warehouse, draws the whole population's journey, and lets you split it by any participant-data attribute your flows write.

QVCCS Innovation teamIVR Sankey user guide →

IVR Sankey: every call, one map A journey map in the style of a Sankey diagram. A broad band of callers flows from a Start node into a main menu node, with a dashed loop showing callers returning to the menu. From the menu the band splits by volume into three terminal nodes: Agent, Self-served and Hang-up, with band widths proportional to the number of callers. INNOVATION · IVR ANALYTICS Every call, one map Start Menu Agent Self-served Hang-up
  • Did you know Architect's journey flows show up to seven days of data, a fixed 168-hour period counted back from the most recent midnight UTC, and that Genesys recalculates the paths overnight?

  • Did you know the analytics conversation detail jobs API returns participant attributes for each conversation, with keys and values truncated to 1,024 characters, but that its data can run hours to a full day behind real time?

  • Did you know Genesys describes journey flow counts as directional and not intended to be exact, and that for flows with many milestones or outcomes the view may be limited to the most frequent paths?

01

Where did everybody go?

A contact centre manager opens the weekly review with a deceptively simple question: of everyone who rang the main number last month, how many were helped by the IVR, how many reached an agent, how many gave up, and where? The IVR owner knows the flow inside out, yet the honest answer usually starts with a caveat. Some of the data lives in queue reports, some in flow outcomes, some in the participant data the flow writes, and none of it sits on one picture of the whole population.

The follow-up question is the one that matters. Callers whose number did not match an account seem to end up with an agent far more often. Is that true, by how much, and what did those callers hear before they pressed zero? Answering it means joining the journey to the attributes the flow wrote on each call. That is what IVR Sankey does: one flow, every call in the window, drawn as a single journey map that can be split, filtered and explained.

02

What journey flows show natively

Genesys Cloud already gives flow authors a journey picture. Journey flows open from the Insights and Optimizations menu of an Architect bot, digital bot, inbound call, outbound call, secure call, inbound message or inbound email flow. Nodes are the flow's milestones and outcomes, from a start node to terminal nodes such as agent escalation, disconnect or resolution; node size and connector width follow how many customers passed through. Click a node to drill into the paths through it, or filter by exit reason, such as Abandoned.

Genesys is clear about the design intent. Journey flows cover a single Architect flow and cannot visualise journeys across multiple flows. They use up to seven days of data, recalculated overnight. Their counts are directional, meant to support the qualitative reading of the journey rather than exact measurement, and busy flows may be limited to the most frequent paths. For analysis beyond that, Genesys points to Journey Management. Architect's Flow Insights overlay adds a quick frequency view of which actions, menus and tasks ran most often over up to seven days.

We use both regularly, and they are the right first look. What clients kept asking us for sat just beyond them: exact counts over a window of their choosing, the journey across the bots and in-queue flows a call passes through, the menus and data action results that were never instrumented as milestones, and above all the participant data that explains why one cohort of callers fares worse than another.

03

The insight: three layers of data, each with a job

No single Genesys API holds the whole story, so IVR Sankey combines three, each used for what it does best. The macro layer comes from the analytics conversation detail jobs API, which covers every call in the window: each conversation's participants, sessions and segments are walked in order into a cross-flow path from Start through flows, bots and transfers to the queue outcome, and because job results carry participant attributes, the complete raw participant-data map of every call arrives in the same records at no extra cost.

The granular layer comes from flow execution traces, fetched through the flow instances API for a capped sample of calls you choose, from 50 to 20,000. Traces add what only the trace knows: the menu choices, the prompts callers actually heard, data action and data table results, outcomes and milestones as steps. They also teach the macro map where to place data and prompt nodes, with a placement-fidelity badge that says how faithfully that order holds for this flow. The attainment layer comes from the flow aggregates API: full-population success and failure for every Architect flow outcome, resolved to the names the engineer gave them.

IVR Sankey's three data layers Three Genesys Cloud CX APIs feed three layers. The analytics conversation detail jobs API supplies every call, walked from conversation to participants, sessions and segments with participant attributes, as the macro layer. The flow instances API supplies a capped sample of flow execution traces with menus, prompts heard and data action results as the granular layer. The flow aggregates query and flow outcomes API supply outcome success and failure as the attainment layer. All three converge on a warehouse that stores each conversation once and fetches only uncovered time, which feeds the journey map and the Insights area. IVR SANKEY · THREE DATA LAYERS Three Genesys APIs, one journey map. ANALYTICS · CONVERSATION DETAIL JOBS POST /api/v2/analytics/conversations/details/jobs conversation → participants → sessions → segments + participants[ ].attributes FLOW EXECUTION · CAPPED SAMPLE POST /api/v2/flows/instances/query · /jobs menus · prompts heard · data action results kept by Genesys for 10 days FLOW AGGREGATES POST /api/v2/analytics/flows/aggregates/query GET /api/v2/flows/outcomes outcome success and failure, by name MACRO Every call Journey spine · pdata map GRANULAR Trace sample Detail inside the flow ATTAINMENT Every call Outcome board WAREHOUSE Each conversation stored once Only uncovered time is fetched A run is a window over it Journey map Layers · lens Insights Findings · PDFs Toggling a layer re-renders from the warehouse: no new Genesys calls Read-only by construction: GET-only client with a short allowlist of analytics and trace query submissions
Three Genesys APIs, three layers: every call from conversation detail jobs, a trace sample for within-flow detail, and flow aggregates for outcomes.
Read this diagram as text

A left-to-right flow shows three Genesys APIs feeding three data layers, which converge on one warehouse that drives the journey map and Insights.

  1. First source, "Analytics · conversation detail jobs" (POST /api/v2/analytics/conversations/details/jobs), walks conversation to participants to sessions to segments, plus participant attributes; it feeds the Macro layer: "Every call", "Journey spine · pdata map".
  2. Second source, "Flow execution · capped sample" (the flows instances query and jobs), gives menus, prompts heard and data action results, kept by Genesys for 10 days; it feeds the Granular layer: "Trace sample", "Detail inside the flow".
  3. Third source, "Flow aggregates" (the flows aggregates query and GET /api/v2/flows/outcomes), gives outcome success and failure by name; it feeds the Attainment layer: "Every call", "Outcome board".
  4. All three layers converge on a Warehouse where each conversation is stored once, only uncovered time is fetched, and a run is a window over it.
  5. The warehouse feeds two outputs: "Journey map" (layers and lens) and "Insights" (findings and PDFs).
  6. A note says toggling a layer re-renders from the warehouse, with no new Genesys calls.
  7. A banner across the bottom says the tool is read-only by construction: a GET-only client with a short allowlist of analytics and trace query submissions.

04

Engineering the warehouse: harvest once, reuse forever

Conversation data does not change after the call, so IVR Sankey stores each conversation once per flow and layer, not once per run. A run is just a window over the warehouse, and its map, figures and insights are rebuilt on read. When you ask for a window, the app compares it with the flow's coverage, a gap-aware set of intervals rather than a single range, and fetches only the uncovered time, plus a short re-scan at the latest boundary to catch stragglers.

Per gap, it submits an asynchronous conversation detail job filtered to the flow, polls until Genesys has compiled it, and pages through the results by cursor, up to 50,000 conversations per run. Traces download in batches of up to 20 ids, halving the batch automatically when Genesys rejects it, and save incrementally so an abort keeps every finished batch. Calls known to have no trace are remembered and never fetched again. A coverage calendar under the date picker shades days already held, with per-day volumes, so analysts can see what is cached before they press Build.

This matters because of retention. Genesys keeps flow execution data for 10 days, while the analytics records behind the macro layer last far longer. Harvest recent windows and the warehouse becomes the durable copy of the granular detail. Progress streams live and survives navigating away. The Genesys client is read-only by construction: GET-only, with an allowlist of the handful of analytics and trace query submissions it needs, rate-limited per session and retrying once on an expired token.

05

Reading the map: reach on nodes, splits on edges

Real IVR journeys are cyclic: callers loop back through menus, and every bot converges on the same transfer. A strict Sankey or funnel cannot draw that without dropping edges, so the map is rendered as a layered directed graph, which draws loops faithfully, and scrolls and zooms in the browser. Each node shows the distinct callers whose path includes that step and their share of all callers; each edge shows the split relative to its source. Only terminal nodes add up to 100 per cent, because intermediate steps are pass-throughs, not funnel slices.

Edges under about half a per cent are pruned for readability, but every node keeps its top two outgoing edges and its top inbound edge, so no real step ever looks like a false dead end. Layers toggle without re-harvesting: menus, prompts, data actions and outcomes. A Data actions picker lists every data action, data table lookup and decision table the traced calls ran, with the split of result paths each took, and the chosen set lives in the page link so the view can be shared.

Explanation is one click away. The Disconnect node opens a breakdown of where callers hung up: true in-IVR hang-ups versus calls already in queue, and for IVR hang-ups the last node, the last prompt heard and the last lookup result. A prompt node plays its recorded audio per language from the Architect prompt library. Hovering a switch shows each case's readable condition from the flow design. And any real call can be replayed step by step in the per-call journey view.

Interactive explainer: with JavaScript on, explore a Sankey diagram of a fictitious IVR.

Reading IVR Sankey's numbers On the left, the disposition partition: all callers divide into transferred to queue, which splits into handled by agent and abandoned in queue; transferred elsewhere; and contained, which splits into self-served and IVR hang-up. The three dispositions sum to 100 percent. On the right, how to read the map: a node label gives the distinct callers who reached that step as a share of all callers, an edge label gives the split as a share of the source node's outgoing volume, journeys can loop back, and only terminal nodes sum to about 100 percent. THE DISPOSITION PARTITION Every call lands in exactly one place. All callers in the window Transferred to queue Transferred elsewhere Contained Handled by agent Abandoned in queue Self-served IVR hang-up Self-served means a success outcome was reached before disconnecting. The three dispositions sum to 100% of all callers NODE % AND EDGE % Reach on nodes, splits on edges. Main menu count (pct%) Billing count (pct%) Account bot count (pct%) SHARE LOOP BACK Node: distinct callers who reached it, of all Edge: share of the source's outgoing volume Only terminal nodes sum to about 100%
Every call lands in exactly one disposition; nodes show reach and edges show the source-relative split.
Read this diagram as text

Two panels explain how to read IVR Sankey's numbers: a tree showing how every call falls into one disposition, and a small map showing what node and edge percentages mean.

  1. Left panel, "The disposition partition: every call lands in exactly one place": "All callers in the window" splits into three dispositions, "Transferred to queue", "Transferred elsewhere" and "Contained".
  2. "Transferred to queue" splits into "Handled by agent" and "Abandoned in queue".
  3. "Contained" splits into "Self-served" and "IVR hang-up"; a note says self-served means a success outcome was reached before disconnecting.
  4. A summary under the tree says the three dispositions sum to 100% of all callers.
  5. Right panel, "Node % and edge %: reach on nodes, splits on edges": a "Main menu" node, labelled count (pct%), has arrows to "Billing" and "Account bot", each also labelled count (pct%); the arrow to Billing is labelled "Share".
  6. A dashed arrow labelled "Loop back" returns from Account bot to Main menu, showing journeys can revisit a step.
  7. Two definitions follow: a node shows distinct callers who reached it, of all callers; an edge shows the share of the source's outgoing volume.
  8. A closing note says only terminal nodes sum to about 100%.

06

The participant-data lens

Participant data is where a flow records what it learnt: whether the caller's number matched an account, the customer segment, the transfer reason. IVR Sankey captures the complete end-of-call attribute map for every call and builds a catalogue of every key, with its coverage, an inferred class (boolean, enum or high-cardinality text) and value buckets, always including a not-set bucket so incomplete attributes confess their coverage. Which attributes become diagram nodes is decided by value shape and cardinality alone, never by attribute names, because every client's flows are bespoke.

Expand a key and a per-bucket outcome table appears: calls, transferred, contained, abandoned in queue and handled by agent, side by side. Split builds the attribute into the map as a stage straight after Start, and splits stack in the order you pick them. Filter re-renders the whole map for one cohort, for its exact end-to-end pathing. Splits and filters live in the page link, so a lensed view is shareable and the Insights area can deep-link straight into a cohort.

The participant-data lens Illustrative. On the left, the journey map split by a participant-data attribute called ANI Match: from Start, callers divide into three cohorts, true, false and not set, which then flow on to the terminals Self-served, Handled by agent, Abandoned in queue and IVR hang-up, with the false cohort drawn mostly towards the agent. On the right, a per-bucket outcome table compares the transferred and contained shares of each cohort as bars, with Split and Filter controls and a note that the lens state lives in a shareable link. PARTICIPANT-DATA LENS · ILLUSTRATIVE Split the map by what the flow wrote. Start ANI Match: true ANI Match: false ANI Match: (not set) Self-served Handled by agent Abandoned in queue IVR hang-up Split to see cohort sizes; filter to one bucket for its exact paths PER-BUCKET OUTCOMES Compare the cohorts. BUCKET TRANSFERRED CONTAINED true false (not set) Split Filter Classes: boolean · enum · text or id “(not set)” is always a bucket Lens state lives in the link: every view is shareable
Illustrative: splitting the map by a participant-data attribute, with a per-bucket outcome table beside it.
Read this diagram as text

An illustrative two-panel view: on the left a journey map split by a participant-data attribute, on the right a table comparing the outcomes of each resulting bucket.

  1. Left panel, "Participant-data lens · illustrative", headed "Split the map by what the flow wrote": from Start, callers divide into three cohorts, "ANI Match: true", "ANI Match: false" and "ANI Match: (not set)".
  2. The true cohort flows mainly to "Self-served", with a smaller flow to "Handled by agent".
  3. The false cohort flows mainly to "Handled by agent", with smaller flows to "Abandoned in queue" and "IVR hang-up".
  4. The (not set) cohort flows to "Handled by agent".
  5. A note under the map says: "Split to see cohort sizes; filter to one bucket for its exact paths".
  6. Right panel, "Per-bucket outcomes: compare the cohorts", is a table with Bucket, Transferred and Contained columns drawn as bars: true is mostly contained, false is mostly transferred, and (not set) sits roughly between.
  7. Below the table are Split and Filter buttons, with notes "Classes: boolean · enum · text or id" and "(not set) is always a bucket".
  8. A closing note says: "Lens state lives in the link: every view is shareable".

07

Insights: findings ranked, outcomes boarded, funnels saved

The Insights area turns the harvested run into analysis without a single extra Genesys call. Findings scores every eligible participant-data value by how far it moves the escalation rate, meaning calls that left self-service for an agent, a queue abandon or a transfer, ranks them by lift weighted by cohort size, collapses duplicate key spellings and near-identical cohorts, and links each card to the cohort on the map. It adds outcomes that succeed 45 per cent of the time or less, the hour whose queue-abandon rate most exceeds the average, and data-quality flags such as one concept written under two spellings.

Alongside sit the outcome attainment board, full population from the flow aggregates API; a self-service funnel of up to ten stages defined once per flow over participant data, saved and reused on every future harvest; a pivot builder; and a milestone funnel from the trace sample. For the review meeting there is a one-page diagram PDF exactly as toggled and lensed, a KPI summary PDF that states the true first-to-last call span analysed, and an opt-in AI analyst narrative generated only from aggregate metrics, never per-call data.

08

Where IVR Sankey sits, and how we built it

IVR Sankey is the population view in a family of QVCCS flow tools. Journey Analyser builds Journey Management-style funnels with branches over the same kind of execution traces when you know the path you want to measure. Flow Journey replays one conversation through every flow it touched. Flow Mapper shows the flow as designed and audits its configuration. Start with the map to find the surprise, measure it with a funnel, and explain it with a single call.

We built it the way we build client solutions. A Business Analyst turned recurring review questions into acceptance criteria; the Solution Architect chose the three-layer model and the rule that diagram data is shape-filtered rather than tuned to any one organisation; Senior Developers implemented the warehouse and renderer under the Senior Platform Practice Lead's standards with peer review; and our testers worked through the failure paths, including expired traces, partially covered windows and runs orphaned by a restart. IVR Sankey is part of the QVCCS App Suite, included with every Managed Professional Services tier.

How it compares

Journey flows in Architect and QVCCS IVR Sankey

Native facts are as documented for journey flows in the Genesys Cloud Resource Center.

AspectNative Genesys Cloud CXQVCCS IVR Sankey
ScopeA single Architect flow; cannot visualise journeys across multiple flows.One flow's calls, followed across the flows, bots and transfers each conversation passed through to the queue outcome.
Time rangeUp to seven days, a fixed 168-hour period, recalculated overnight.Any harvested window, up to 31 days per run; the warehouse accumulates for longer baselines.
CountsDirectional, not intended to be exact; busy flows may be limited to the most frequent paths.Every call in the window from conversation detail records; low-volume edges pruned only for readability, with connectivity preserved.
NodesFlow milestones and flow outcomes, with terminal nodes for how journeys ended.Flows, bots, transfers and queue outcome, plus menus, data actions, prompts and outcome attainment.
FilteringBy exit reason, for example Abandoned.Split or filter by any participant-data attribute; splits stack.
Explaining hang-upsFilter to abandoned paths and see which nodes they passed.Disconnect breakdown: in-IVR versus in-queue, last prompt heard and last lookup result.
OutputsInteractive view inside Architect.Shareable deep links, diagram PDF, KPI summary PDF and ranked Insights.

Journey flows remain the quickest first look inside Architect, and Journey Management covers cross-channel journeys.

The takeaways

  • Every call in the window on one map, with reach on nodes and source-relative splits on edges.
  • The complete participant-data map of every call becomes a lens: split, filter and compare cohorts.
  • Findings rank the attribute values that move escalation, with one click to the cohort on the map.
  • Harvest once, reuse forever: traces are preserved beyond Genesys's 10-day execution data retention.
  • Read-only by construction, with diagram and summary PDFs ready for the review meeting.

IVR Sankey 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.

Read the user guide Managed Professional Services

Last reviewed

Questions about what you have read?

Clients, partners and people introduced to us can reach the specialists behind our applications and articles directly.

Who to contact