# Production Dashboards

> The live and after-the-fact dashboards to watch in production: triage, call detail, CDRs, VDN flow, skill drill, and agent stats.

Every call that touches FirstByte Voice lands in the same reporting
surface. Thus you can answer two very different questions from one place:
*what happens on the floor right now?* and *what happened on that one call
three hours ago?* The dashboards below ship with your workspace. You do not
build or wire anything. They live in the Contact Center console at
`agent.firstbyte.fast`.

> **NOTE:**
> What you see depends on your role. **Agents** get their own stats and call
> history. **Supervisors / team leads** also get the floor wallboards, VDN flow,
> and drill-downs. The tenant-wide **All calls / CDR** views are available only
> to supervisor, admin, and owner roles.

## Which dashboard answers which question

  - **All calls (triage)** — Every call in the tenant, one row each. Filter, sort, export to CSV, and
    click through to a full timeline.
  - **Call detail** — The per-segment timeline for a single call: who handled it (AI vs human),
    ring / talk / hold / queue / ACW, transfers, disposition, and recording.
  - **CDR view** — The billing-grade call detail record: direction, duration, release cause,
    and the per-call voice-quality score.
  - **VDN flow** — A Sankey chart of how inbound calls travel Hotline → Skill → Disposition.
    Ribbon width shows call volume.
  - **Skill drill** — One skill's queue and handling metrics over a window, agent by agent.
  - **Agent self / timeline** — An agent's own day: state timeline, AHT, ACW, RONA, and last calls.

## All calls — the triage list

Open **Supervisor → All calls** (`/ops/calls`) for a tenant-wide, paginated
list with **one row per call**. Start here when someone asks "find the call
where…". Filter by search text, direction (inbound / outbound), handler kind
(**human vs AI**), skill, hotline, disposition, and a date window. The window
defaults to the last 7 days.

  1. **Narrow to the calls you care about**
Stack filters to cut the list down. For example: inbound + skill *Billing*
    + disposition *transferred* over the last 24 hours. The window control
    drives every column. Thus the counts and the rows always agree.
  2. **Export exactly what you filtered**
Press **CSV** to download the rows that are visible now. The export uses
    the same filter and window that you see, no more and no less. Use it to
    give a set of calls to QA or to reconcile against a carrier invoice.
  3. **Drill into a call**
Click any row to open **Call detail** for that call.

> **TIP:**
> The call's stable identifier (`call_sid`) keys the list. Traces, recordings,
> and the CDR use the same key. Thus you can move between surfaces and keep the
> call.

## Call detail — the per-segment timeline

Call detail is the single most useful after-the-fact view. It reconstructs the
whole call as an ordered set of **segments**. Most real calls have more than
one handler in sequence. For example: an AI agent qualifies the caller, then
hands off to a human, then the human transfers to a specialist. Each segment
shows who held the call and what it cost.

For every call you get:

- **Handler per segment.** The segment was AI-handled or human-handled. The
  system splits segments automatically at each handoff.
- **Time breakdown.** Ring, queue wait, talk, hold, and after-call work (ACW)
  for the segment.
- **Events on the call.** Transfers, holds, conferences, re-invites, and the
  final release, in order.
- **Disposition and hangup reason.** The wrap-up code the agent chose and the
  telephony release cause (mapped from Q.850).
- **Recording.** A playback link when a recording exists for the call.

> **NOTE:**
> The AI-vs-human split comes from a per-segment handler marker on the call
> event feed. A segment with no handler shows as *unattributed*. The system does
> not guess. This is useful when a call bypassed routing.

To go deeper than the timeline, down to individual signalling and media
events, jump from Call detail to a full
[call trace](/modalities/voice/observability/call-traces).

## CDR view

The **call detail record** is the billing-grade summary that the system writes
when a call clears. It has the direction, the connect and clear timestamps,
the duration, the release cause, the trunk and dialed number, and the handler.
Each call also has a **voice-quality score (MOS)**. The system computes the
score from measured packet loss and jitter on the media leg. Thus you can find
the calls that connected but sounded bad.

> **TIP:**
> Filter CDRs by low MOS to find quality problems that never caused a complaint.
> Then open the matching
> [MOS / jitter / loss](/modalities/voice/observability/mos-jitter-loss) view to
> see why.

## VDN flow (Sankey)

  1. **Open VDN flow**
Go to **Supervisor → VDN flow** (`/ops/vdn`). The three-column Sankey
    chart shows how inbound calls travel **Hotline → Skill → Disposition**.
    Ribbon width is proportional to call volume.
  2. **Focus on one path**
Click any bar to focus the chart on flows that touch that node. Ribbons
    that do not touch it fade out. Click again (or the **focus** chip) to
    clear the focus. Use this to find a hotline that funnels everything into
    one skill. You can also find a skill that ends with too many *transferred*
    dispositions.
  3. **Change the window and export**
Switch **Window** between **Today / Last 7 days / Last 30 days**. Then
    press **CSV** to export exactly the flows that are visible.

The VDN, skills, and dispositions in this chart come from your routing
configuration. See
[PBX & ACD routing](/modalities/voice/transport-telephony/pbx-acd) to change
the shape of the flow.

## Skill drill

Open a skill from the wallboard or **Supervisor → Skill drill**. You see that one
skill's handling over a window: queue depth over time, the assigned agents and
their state, and per-agent handle counts. Open this view when a wallboard card
goes red and you need to know *which* agents and *which* callers are behind
the number.

## Agent self / agent timeline

Every agent gets their own read-only stats without supervisor access. The
**Ready** surface shows today's **AHT**, **Calls**, **ACW average**, and
**RONA** (missed offers). It also shows a **Last 5 calls** list that clicks
through to Call detail. Supervisors can open the same agent's **timeline**. The
timeline is a chronological state track (Ready / on call / ACW / Aux) for a
shift. Use it to review adherence and coaching moments.

## The floor wallboard

The **wallboard** (`/ops`) is the live floor view. A chrome-free **TV
wallboard** at `/wallboard-tv` is available for floor monitors. The wallboard
has a top strip of aggregates and one card per skill. Each card shows
agent-state counts, queue depth, and a KPI grid: **SL%**, **ASA**, **AHT**,
**Abandon**, **Occupancy**, and **Oldest** wait. Each KPI is tinted green,
amber, or red against the skill's target.

> **WARNING:**
> **Honest status:** the wallboard *structure* is live. The layout, per-skill
> cards, agent-state counts, filters, CSV export, and the AI-handoff drain strip
> all show and refresh. But the **rolled-up KPIs (SL / ASA / AHT / Occupancy /
> Abandon) read zero** in production now, because the backfill of the aggregate
> reporting feed is not complete. Real-time **agent-state and queue-depth**
> counts are accurate today. The historical rate KPIs will fill when the
> call-event backfill completes. Do not build alerts on the KPI numbers yet. Use
> All calls and Call detail for ground truth in the meantime.

## Roadmap surfaces

Some analytics screens are wired into the console but fill only when their
data source flows in your tenant. Until then, they show a readiness message.
They never show fabricated numbers.

- **Schedule adherence** (`/ops/adherence`). A scheduled-vs-actual state
  heatmap per 15-minute bucket. It needs a workforce-management / scheduling
  feed.
- **Agent Assist analytics** (`/ops/assist`). Suggestion accept/dismiss rates
  and AHT with assist vs without assist. It fills when the system collects
  Agent Assist suggestion telemetry for your org.

## Troubleshooting

| Symptom | Likely cause | Fix |
|---|---|---|
| Wallboard KPIs (SL / ASA / AHT) all show **0** | The aggregate reporting feed backfill is not complete (see warning above) | This is expected today. Use **All calls** + **Call detail** for accurate per-call numbers. State and queue-depth counts on the wallboard are still live. |
| The **All calls** list is empty | The date window excludes your calls, or a filter is too tight | Widen the window and clear the filters. The list defaults to the last 7 days. |
| A call is missing its **recording** link | The recording was not captured, or the upload is not complete | Check that recording is enabled for the trunk or agent. The link appears when the upload to storage completes. |
| Call detail shows an **unattributed** segment | The segment had no handler marker (for example, the call bypassed routing) | This is expected for direct or non-routed legs. Check the [call trace](/modalities/voice/observability/call-traces) for the raw path. |
| **VDN flow** is blank for a window | No calls matched, or skills and dispositions are not configured | Check that the window has traffic. Check the routing setup under [PBX & ACD routing](/modalities/voice/transport-telephony/pbx-acd). |
| The CSV export has **fewer rows than the screen** | The export mirrors the active filter, not the full tenant | This is intended. The export contains exactly what you filtered. Clear the filters first for a full pull. |

## Related

  - **[Observability overview](/modalities/voice/observability/overview)** — How the whole observability surface fits together.
  - **[Call traces](/modalities/voice/observability/call-traces)** — Drop from a dashboard row into the full signalling + media + agent trace.
  - **[MOS, jitter & loss](/modalities/voice/observability/mos-jitter-loss)** — Why a call scored low, from the packet-level quality metrics.
  - **[Latency breakdown](/modalities/voice/observability/latency-breakdown)** — Where the time goes on an AI turn, end to end.
