events_raw merged with the tenant’s
recording objects — and each source has its own window and its own idea of
what “a call” is. This page defines each number so that a tile and a report
that disagree can be reconciled.
The 24-hour window and what counts as a call
cdr.overviewKpis is an org-scoped procedure. It resolves your org id to a
ClickHouse tenant_id and runs a single aggregate over events_raw:
- The unit is a distinct
call_id, not a row.events_rawholds one row per segment, so a call that produced several segments still counts once. - The window is anchored on
seg_start. A call is in the window if its segments started in the last 24 hours. A long call that started 26 hours ago and is still up does not appear, and a call is not re-counted when it ends. - The window is rolling and evaluated server-side at query time —
now() - INTERVAL 24 HOUR— not aligned to midnight, to your billing cycle, or to your browser’s timezone. Two loads a minute apart cover two slightly different windows.
calls_24h. Its subtitle shows
answered_24h, so the tile carries both the attempt count and the answered
count.
Answered calls and ring time
Answered is defined by exactly one condition:ans_reason = 0. That is the
answer-reason discriminator on the segment row, and only segments carrying
ans_reason = 0 are counted into answered_24h. Every other
ans_reason value — whatever the underlying disposition was — is an
unanswered call for the purposes of this screen. The tiles do not look at a
separate status column, a Q.850 cause, or call duration to make this
decision.
The tile labelled P50 answer time is the median of ring_time_sec, taken
over the same answered set:
ring_time_secis the segment’s measured ring time — the interval the call spent ringing before it was answered — recorded per segment onevents_raw.- The quantile is computed with
quantileExactIf(0.5)(…, ans_reason = 0), so unanswered attempts contribute nothing. Ring-timeout expiries and no-answers do not drag the median upward, which is why this number is usually much lower than a naive “time spent ringing” average over all attempts. - It is an exact median over the window’s answered segments, not an approximate or decayed one.
8.4s); at a minute or more it renders
minutes and whole seconds (1m 12s).
Recording success: objects versus answered calls
The recording tile is the one place where the overview joins two unrelated systems.cdr.overviewKpis fetches the tenant’s recording objects alongside
the ClickHouse aggregate and counts the objects that satisfy both of:
source == 'tenant'— objects that are not attributed to the tenant’s own recording output are excluded from the count.lastModifiedwithin the last 24 hours, measured from the request time.
recordings_24h. The percentage is then:
answered_24h asks the only question worth asking here — of the calls
that actually had audio, how many left a recording behind? — so a drop in
this tile points at recording configuration or storage, not at dialling
outcomes.
Two consequences of the two-system join are worth knowing before you treat
the percentage as exact:
- The numerator and denominator are windowed on different clocks. Objects
are selected by storage
lastModified; calls are selected byseg_start. A recording uploaded just inside the window for a call that started just outside it counts in the numerator only. Over a quiet 24 hours, or right after a backlog of uploads flushes, the ratio can exceed 100 — which is why the result is clamped withmin(100, …). - The object count is not filtered by call id. Any tenant-sourced recording object touched in the window counts, so re-writing or re-uploading objects inflates the numerator.
Agents in roster and active sessions
These two tiles bypass ClickHouse entirely and read the admin routers directly, so they describe now, not the last 24 hours.- Agents in roster is the
totalfromadminAgents.list. The screen requests a single-row page purely to read the count, so the tile reflects every agent in the roster regardless of pagination. - Active sessions counts rows from
adminSessions.listwhosestateis anything other thanoffline. Its subtitle counts the subset whosestateis exactlyready, so “12 active · 9 ready” means three non-offline sessions are in some other state.
ready. When there are none, the panel shows an empty-state
line rather than a zero row.
Refresh behaviour
Each source refreshes on its own cadence, so the tiles are not all as of the same instant:
Because session polling stops in the background, a tab left open on another
window can show a stale session count until it regains focus.
Seat, minute, and storage meters
The This billing cycle panel is labelled “resets monthly” and shows four meters: agents seated, LLM minutes, inbound minutes, and recording storage. Only one of them is live today. The agents seated meter’s used value is the same roster total that feeds the KPI tile. The remaining three meters, and every meter’s limit, are hardcoded illustrative values in the screen — they are not read from your plan, your contract, or a metering service. Do not reconcile an invoice against this panel, and do not read a limit shown here as a quota that will be enforced. Wiring these to real numbers requires per-tenant metering on the BFF, which this screen does not yet consume. When that lands, each meter will have a documented source the same way the call tiles do above; until then, treat the panel as layout. The Plan link in the panel header routes to the modules screen, which is where plan and entitlement state actually lives.When a tile reads a dash
A dash (—) means “no value to show”, and the reason differs per tile:
recording_success_pct is returned as null in exactly one case: when
answered_24h is 0. With no answered calls there is no meaningful
denominator, so the procedure declines to divide rather than reporting 0%.
Two related states are easy to misread:
0calls is not a dash. Once the query resolves, a genuinely quiet 24 hours shows0in the calls tile (in the neutral rather than the ok state), and the P50 and recording tiles fall back to—because there were no answered calls.- A recording-storage failure reads
0%, not—. The object listing is wrapped so that a failure yields an empty list instead of an error. If storage is unreachable while calls were answered, the numerator is 0 and the tile shows0%. A recording tile at 0% with a healthy answered count therefore means either no recordings were written or the object listing failed — check storage before concluding the recorder is broken.
0 rather than a dash while their queries are still loading or if no
org is selected.
Related
- Telemetry — the metric families, CDR schema, and trace fields the TeleQuick gateway emits
- Telephony Metrics — industry definitions for ASR, ACD, PDD and the other rates these tiles approximate
- Authentication — the API key and org scoping that gate these procedures