dim_hotline row, and every read or write goes through an
adminHotlines.* procedure.
The hotline object
A hotline row has four identity fields and eighteen KPI fields.
The KPI fields are all nullable. A null renders as
— in the list and in
the KPI matrix, and means “no threshold configured for this row”.
The list and detail payloads differ. adminHotlines.list returns only the
identity fields plus the six target values (and sla_window_sec), which
is exactly what the table columns show. The Min / Avg / Max values come back
only from adminHotlines.get, which is why the drawer loads the row again
when you click it.
The six KPI rows and their units
SLA is the only row with a second target-side input:
sla_window_sec is the
answer window that sla_target_pct is measured against. The list column
renders the pair together — a hotline with sla_target_pct = 80 and
sla_window_sec = 20 shows as 80/20s. If either half is null the column
shows —, even if the other half is set.
For the industry definitions of these metrics, see
Telephony Metrics.
How Target, Min, Avg and Max become bands
The console states the contract directly on the screen:Target is the goal. Min / Avg / Max define the green-amber-red bands the live wallboard uses for this hotline.Two consequences matter when you edit these fields:
- Target is not a band edge. It is the goal you publish; the tint comes from the Min / Avg / Max values on the same row. You can set a target with no bands, in which case the wallboard has nothing to tint against for that KPI.
- The Hotlines screen does not evaluate the bands. It persists the numbers as entered. There is no cross-field check in the form — it will happily save a Min above a Max, or bands that do not bracket the target. Getting the ordering right for each KPI’s direction (higher-is-better for SLA and Occupancy, lower-is-better for ASA and AHT) is your responsibility.
Why AHT, FTE and Occupancy have no Avg
The KPI matrix renders an Avg cell only where the underlying row has an_avg column. SLA and ASA do (sla_avg_pct, asa_avg_sec); AHT, FTE and
Occupancy do not. Those three rows are stored as a Target plus a Min/Max
pair only, so they support a two-edge band rather than a three-edge one.
The Avg cell for those rows is absent from the form — it is not disabled
input you can enable later, and there is no field to write to.
Defaults for a new hotline
New hotline opens the form pre-filled. These are starting points the form suggests, not platform limits, and every one is editable before you save:
Editing an existing hotline seeds the matrix from the stored row instead, so
a null stays null until you type into the cell.
Field limits and validation
Enforced by the form before it calls the API:code— uppercased as you type, and runs of whitespace are replaced with-. Capped at 40 characters by the input. Required: the form trims the value first, so a whitespace-only code is rejected with “Code is required” rather than being submitted.name— capped at 120 characters by the input. Required, also trimmed before the check (“Name is required”).hotline_type— constrained to the six enum values by the dropdown.active— editable only in edit mode. The create call does not send it.- KPI fields — numeric or null. No ordering or range check is performed client-side.
Admin procedures behind this screen
search matches on code or name and is omitted entirely when the search box
is empty. The console lists 50 hotlines per page and drives the pager from
total. includeInactive is off by default, so deactivated hotlines
disappear from the list until you tick the box.
Every procedure is org-scoped: orgId comes from the active org in the
tenant context, and no call is issued until an org is selected.
Soft delete and reporting joins
Deactivate does not delete the row. It setsactive = false, which is
what the confirmation dialog means by “Soft-deleted (active=false). Calls
already routed keep their reporting joins.” The dim_hotline row stays in
place so that historical calls which reference it still resolve their
dimension on join — reports over past intervals keep showing the hotline’s
code and name.
Practical effects:
- The hotline drops out of the default list. Tick Include inactive to find it again.
- To bring it back, open it and set Active to
Activein the edit form.adminHotlines.updatecarriesactivein its patch, so reactivation is a normal save. - Because the row persists,
codestays taken. Reactivate rather than recreating with the same code.
Tagging hotlines
Each list row has a tag cell backed by the shared tag store under the resource kinddim_hotline. Tags for the whole visible page resolve in a
single call; the cell itself only writes. Clicking a tag cell does not open
the edit drawer.
Related
- Telephony Metrics — definitions and formulas for SLA, ASA, AHT and occupancy
- Telemetry — the metric and CDR streams these KPIs are computed from