Build a contact-center QA program
This guide walks a supervisor through the whole Quality Management loop: you author a scorecard with weighted sections and a compliance gate, calibrate reviewers against each other before any score counts, grade calls and work the acknowledge/appeal lifecycle, then put agent effort on a leaderboard. Everything runs from the Quality section of the dashboard and the/api/v1/quality API.
Working knowledge of the Quality Management API helps — this guide is the narrative; that page is the endpoint reference.
Who sees what
The Quality surfaces are role-scoped on both the dashboard and the API:- Owner / admin — full program: author forms, score, calibrate, set workloads, read the org rollup and the full leaderboard.
- Supervisor — the same reviewer surface, scoped to the queues they supervise on the leaderboard (requesting a queue they do not supervise returns
403). - Agent — their own view only: the evaluations made about them (with acknowledge/appeal) and their own gamification card under Quality → Leaderboard.
1. Program shape
A working QA program has four moving parts, and each maps to one surface:- The rubric — an evaluation form: weighted sections, weighted criteria, and a
sample_rate_pctthat feeds the continuous auto-sampler (every 15 minutes; covers AI voice agents’ production calls as well as human agents’). Authored under Quality → Evaluations → Scorecards. - The reviewer queue — system-created pending rows (auto-sampled calls, AI auto-scored calls below your flag threshold) plus manual assignments land in Quality → Evaluations. Reviewers claim, correct, and resolve from there.
- Reviewer agreement — blind calibration sessions under Quality → Evaluations → Calibration measure how far reviewers (and the AI auto-scorer) drift from each other before scores reach agents.
- The agent-facing layer — the agent sees their own evaluations, acknowledges or appeals them, and watches their points and badges on Quality → Leaderboard, windowed by day, week, or month.
2. Author a form
Create the rubric under Quality → Evaluations → Scorecards, or over the API:- Weights are relative. Numbers normalize within each section and across the form —
weight: 2is simply twiceweight: 1, whether you think in percentages or points. auto_failis the compliance gate. Mark a sectionauto_fail: trueand any zero on one of its criteria forces the whole evaluation to0. Use it for identity verification, required disclosures, and similar non-negotiables — not for soft skills.sample_rate_pctdecides coverage.10means the continuous auto-sampler (every 15 minutes) queues a weighted share of each agent’s calls against this form as pending rows. Leave it0to keep the form manual-only.max_scoreper criterion defaults to100; reviewers submit a raw0..max_scorevalue per criterion and the server derives the0..100total. A client can never set the total directly.
3. Run calibration before scores go live
Calibrate before you grade for real: with a brand-new form, reviewers will each read the rubric differently, and a calibration session surfaces that disagreement while nothing is at stake. Open Quality → Evaluations → Calibration and start a session on one call against the form you just authored, inviting the reviewers who will score against it. Each invited reviewer scores the call blind — nobody can see another reviewer’s score (or the AI’s) until they submit their own, and a reviewer who has not submitted cannot open the report at all. Over the API:POST /calibrations/{id}/close) and put the form into live rotation.
Two properties make calibration safe to run liberally:
- Each reviewer submits once — a second attempt returns
409, so a session is a single blind snapshot per reviewer. - Calibration rows are practice data. They never feed the agent’s evaluation record, the ack/appeal flow, or the leaderboard.
4. Score and work the lifecycle
Live scoring happens under Quality → Evaluations. Rows arrive three ways: the auto-sampler (un-scored stubs fromsample_rate_pct), AI auto-scored rows (auto_scored: true, flagged below your tenant’s flag threshold), and manual assignments. A reviewer grades a call against the form by submitting the per-criterion scores map:
pending → acknowledgedorpending → appealed → resolved. Only the evaluated agent can acknowledge or appeal; an appeal requires anappeal_note; only a reviewer can resolve. Resolving closes the appeal — it does not regrade the score.- Auto-sampled rows are claimed, not edited. An un-scored sampler row is filled in with
POST /evaluations/{id}/claim-score; only apending, still-unclaimed auto-sampled row is eligible. - AI auto-scored rows are overridden, not rescored from scratch. A reviewer corrects one with
POST /evaluations/{id}/override; the corrected total is re-derived, the row is stamped with the reviewer, andflagged_for_reviewclears. - Listing is keyset-paginated — read
next_cursorand pass it back ascursor. Agents listing evaluations only ever see their own rows.
5. The AI call-quality coach: auto-score → coaching plan
Once scoring is live, the QA loop should not stop at the score. The auto-coaching loop closes the last step automatically: when a score crosses a configured threshold, the platform writes acoaching_plans row for the handling agent without waiting for a supervisor to notice — so a chronically poor pattern turns into an actionable coaching assignment the moment it shows up, not after a quarterly review.
Three trigger sources close the loop:
- A QA score below your coaching threshold. Every human-authored evaluation finalization (create, claim-score, or an AI-score override) is checked against the coaching threshold. A score strictly below the threshold (default
70/100, equal to the Five9/NICE QM passing bar) auto-assigns a coaching plan for the evaluated agent on the same write. Self-evaluations never trigger — a reviewer scoring their own call cannot spin up their own coaching plan. - A detractor CSAT response. A very low survey answer (default bottom-band only,
1/5, stricter than the QA-review trigger) fires a coaching plan against the assigned handling agent, separate from the QA-review queue the same trigger already feeds. - A sustained intraday adherence breach. The intraday WFM scheduler watches adherence ratios and assigns a coaching plan when adherence stays strictly below the default
0.7ratio — reserved for chronic, material slips rather than one-off schedule drift.
[auto-coaching:qa_score] / [auto-coaching:csat] / [auto-coaching:adherence]) plus the system:auto-coaching sentinel owner, so you can tell a machine-assigned plan apart from a supervisor-authored one in the normal Coaching Plans surface. Idempotency is source-specific: at most one OPEN auto-assigned plan exists per agent per trigger source, so a chronically low-scoring agent accumulates a single visible plan per signal rather than a fresh plan every time they trip the threshold.
Tuning and visibility:
- Thresholds are operator-tuned via the
COACHING_QA_SCORE_TRIGGER_THRESHOLD,COACHING_CSAT_TRIGGER_THRESHOLD, andCOACHING_ADHERENCE_TRIGGER_THRESHOLDenvironment variables — there is deliberately no per-tenant UI authoring surface. Reading the effective configuration with preview:GET /api/v1/quality/coaching-rules(reviewer scope — owner / admin / supervisor) reflects the live values. - Compliance flags flow into the same loop. An AI auto-scored evaluation marked
flagged_for_reviewbelow yourqa_autoscore.flag_thresholdappears in the QA Evaluations needs-human-review queue, and a supervisor’s corrective override is itself a human finalization — so it also passes throughisLowQaScoreForCoachingand can assign a coaching plan without any extra wiring on your side. - Coaching cards appear beside the scorecard. The per-agent view at Quality → Agents → your-agent carries the QA score, compliance-flag count, CSAT, and WFM adherence strip for the window, plus the recent-evaluated-interactions list — the tie-in that makes “the AI scored this below the flag threshold, auto-coaching assigned” a one-glance answer when a coaching plan lands.
6. Workload and quotas
Once scoring is running, reviews need an owner or they sit unclaimed. Workload management — assigning a specific call to a specific evaluator, capping how many open reviews each evaluator holds, and tracking due dates — is covered in its own guide: QA workload management. Use it to turn the shared queue into named responsibility per evaluator.7. Gamification leaderboard
Quality → Leaderboard ranks agents on points and badges computed on demand from the QA, call, and CSAT data the platform already captures — no extra setup, no separate ingestion. Window the board with Today / This week / This month, or narrow it to a single voice queue for a team competition. Over the API:403 for anything else. An agent reading Quality → Leaderboard sees their own card (GET /quality/gamification/me) — points, badges, and rank — computed against the same default board, so an agent’s rank always matches what their supervisor sees.
Before adopting a new rewards scheme, pass point_rules or badge_definitions in the leaderboard body to preview a tuned ruleset against live data, and compare it against the defaults from GET /quality/gamification/config.
End-to-end sequence
Putting it together, a minimal program in API calls:POST /evaluation-forms— author the rubric with weights, oneauto_failsection, and a startingsample_rate_pct.POST /calibrations→ each reviewerPOST /calibrations/{id}/scores→GET /calibrations/{id}/report→POST /calibrations/{id}/close— calibrate until variance is small.- Reviewers grade live work:
POST /evaluationsfor manual reviews;POST /evaluations/{id}/claim-scorefor sampler rows;POST /evaluations/{id}/overridefor flagged AI rows. - The agent reacts:
POST /evaluations/{id}/acknowledge, orPOST /evaluations/{id}/appeal→ reviewerPOST /evaluations/{id}/resolve. - When a score crosses a coaching threshold, the platform auto-assigns a coaching plan — read the effective thresholds with
GET /quality/coaching-rulesand close the resulting plan under Voice → Coaching like any supervisor-authored one. POST /gamification/leaderboard— read the week’s board; the agent checks their own card withGET /gamification/me.
See also
- Quality Management API — full endpoint reference for every call above
- QA workload management — assignments, quotas, and due dates
- Train agents with AI roleplay in Practice Studio — the before-call side: agents rehearse against an AI customer
- Error codes —
409state conflicts and422 VALIDATION_ERRORshapes