vicigeeksimple guides
Browse
All guides

Reports & results · AI-assisted quality review

Analyze VICIdial calls with AI safely: build a human-reviewed sales and QA workflow

Turn a small, consented test set into reviewable call notes and QA observations without letting an AI score decide outcomes.

Reader setup

Before you choose

  1. A small set of consented synthetic or formally approved test transcripts with known expected facts
  2. A person who can decide whether reviewers may use the test output for coaching, quality review or neither
  3. A private test workspace that is not the production CRM or agent-performance system
Expected result
You will define a limited analysis rubric, compare AI output with a human review, and keep the result clearly marked as a draft observation.
Before making changes
Do not use automated analysis as the sole basis for hiring, firing, pay, customer eligibility, compliance findings or discipline. Redact and minimize data before any test.

Ask one small, auditable question

Select one synthetic transcript and define one review question, such as whether an appointment time was stated. Compare the model’s answer with the source text and record unsupported claims for human review.

“Analyze the call” is too vague to test. Begin with facts a reviewer can check: Was a callback requested? Which product name was mentioned? Was the required lab greeting present? Separate extraction from judgment: extracting a spoken phrase is different from deciding whether an agent performed well.

Write the allowed output fields before selecting a model: call ID, exact supporting quote with timestamp when available, an uncertainty flag, and `needs_human_review`. If the source cannot support a field, the correct value is unknown—not a guess.

Good starter questions read like a checklist item, not a verdict: did the agent state the required disclosure, was a price quoted, was a callback requested, did the customer ask to be placed on a do-not-call list. Avoid a first question that already assumes a judgment, such as whether the agent was persuasive, because two careful reviewers can disagree about that without either one being wrong.

Trace path · read left to right
01Approved transcript02Constrained analysis prompt03Human QA decision

Make a tiny human-labeled test set

Use 10–20 approved test calls or scripts spanning clear positives, clear negatives, silence, interruptions and ambiguous wording. Two humans should label the expected result independently, then resolve differences. That gives you a baseline before the model ever sees a production-like queue.

Keep the test set separate from campaign reporting. A model that appears useful on a friendly sample may fail on accents, noise, jargon, transfers, multiple speakers or incomplete recordings.

Spread the sample across agents, campaigns, call lengths and days rather than pulling twenty consecutive calls from one queue, or the test set will only confirm that the model handles whatever pattern happened to be common that day. When the two human labels disagree, write down why before resolving it — that disagreement log is often more useful later than the final label.

Guided example: use a constrained review record

This JSON is a local contract for the reviewer. It does not call an AI service; it shows that the output must preserve evidence and uncertainty instead of producing a confident free-text score.

Keep the record's shape identical across every test call, including the ones where nothing relevant was said. An empty `supportingText` with `requestedCallback: 'unknown'` is a complete, honest result; do not let a later prompt revision quietly drop a field the reviewer still expects to see.

Before you use it
Use invented IDs and synthetic transcript text only.
Local QA-review record
const review = {  testCallId: 'lab-001',  requestedCallback: 'unknown', // yes | no | unknown  supportingText: '',  reviewerDecision: 'pending',  modelOutputIsAdvisory: true};
Not executed · worksheet or reference text

This sample is a template or reading aid, not a terminal command. There is no output to show.

Success looks like
For each proposed finding, record the supporting transcript excerpt and whether a human reviewer accepts it.
Stop if
Stop if a downstream report treats `requestedCallback` as verified before a reviewer confirms it.

Guided example: validate the shape, then the meaning

A structured response is easier to reject safely than an unbounded paragraph. Schema validation only proves the response has the right fields; it does not prove the call interpretation is correct. Compare every result with the human labels in your test set.

Version the prompt text itself, not only the model name. A one-line change to the prompt can shift results across the whole test set, and without a saved prompt version you cannot tell whether a new disagreement came from the model, the prompt, or the transcript.

Before you use it
Run this only in the test integration service with fabricated results.
Minimal result gate
function acceptForReview(result) {  const allowed = new Set(['yes', 'no', 'unknown']);  return typeof result?.testCallId === 'string' && result.testCallId.trim().length > 0 &&    allowed.has(result?.requestedCallback) &&    typeof result?.supportingText === 'string' &&    result?.reviewerDecision === 'pending' &&    result?.modelOutputIsAdvisory === true;} // Valid shape enters human review only; no automated VICIdial or CRM update.
Not executed · worksheet or reference text

This sample is a template or reading aid, not a terminal command. There is no output to show.

Success looks like
An otherwise valid record with reviewerDecision pending is accepted for review; missing fields or an invalid decision are rejected. Human review still determines meaning.
Stop if
Stop if anyone proposes using this gate as proof that the model's conclusion is accurate.

Local AI review validator fixture

Duration 0:09
Actual local fixture execution

Local fabricated records and client-side JavaScript only; no AI, CRM, PBX or review queue is tested.

Steps and result2 steps

Actual local browser click executes the article’s validator against fictional records. No AI provider, CRM or PBX is contacted; valid shape does not establish model accuracy.

Observed local JavaScript resultsValid: true; missing reviewer: false; invalid callback choice: false.

Read the chapter notes
  1. Local fictional fixture

    Actual local browser click executes the article’s validator against fictional records. No AI provider, CRM or PBX is contacted; valid shape does not establish model accuracy.

  2. Run and observe three cases

    Valid: true; missing reviewer: false; invalid callback choice: false.

November 7, 2026 · Local browser JavaScript; fictional records. Local fabricated records and client-side JavaScript only; no AI, CRM, PBX or review queue is tested. Use fullscreen to read the actual local inputs and results.

View a still screenshot

Local AI review validator fixture

Open to enlarge
Actual local validator results: true, false and false for three fictional cases
Actual local browser click executes the article’s validator against fictional records.
Capture detailsNo AI provider, CRM or PBX is contacted; valid shape does not establish model accuracy.

Measure disagreements, not just attractive examples

Count false positives, false negatives and ‘unknown’ cases against the human gold labels. Review disagreements by call type and language. A useful workflow reports uncertainty and routes edge cases to people; it does not hide them behind a single average score.

Store the prompt version, model/version identifier offered by the provider, source transcript version, reviewer decision and date. That record makes it possible to reproduce a surprising result or pause a bad release.

In plain language: a false positive is the model claiming something happened that the human labels say did not; a false negative is the model missing something the human labels say did happen. Track both separately, because a workflow that hides its false negatives behind a high overall agreement rate is the one most likely to embarrass you in production.

Keep the production rollout reversible

If the test is acceptable, begin with an advisory queue for a small authorized team. Give reviewers an easy reject/correct action and monitor disagreement rates. Keep original reports and dispositions authoritative; AI notes are a separate attachment until governance explicitly approves another use.

Do not claim a model detects compliance, intent, sentiment, deception or sales quality reliably without a domain-specific evaluation and accountable policy owner. Those are high-impact interpretations, not simple transcript facts.

VICIdial publishes an older Quality Control Manual describing a human review process. Check whether it applies to your installed version; this advisory workflow does not replace your own review process.

Set a retention period for the test transcripts and the review records themselves, not just the customer recordings they came from. A QA experiment that quietly becomes a permanent, ungoverned archive of call content creates its own privacy liability, separate from whatever retention rule already governs the original recording.

  • The rubric is limited and testable.
  • A human recorded the expected facts in each test transcript before comparing the AI output.
  • Every output remains advisory and reversible.

Checks and sources

What was checked

  • Structured output validation prevents malformed integration data but does not validate the truth of an analysis.
  • The cited API documentation describes structured response capabilities; it does not certify any sales, QA, sentiment or compliance conclusion.
  • This guide deliberately provides no performance benchmark because it must be measured on the organization’s approved evaluation set.
  • VICIdial's older Quality Control Manual describes a human review workflow; it does not establish what most installations currently use.

Primary references

Sources

  1. OpenAI Structured Outputs guideOpenAI · accessed September 23, 2026
  2. NIST AI Risk Management FrameworkNIST · accessed September 23, 2026
  3. VICIdial reporting documentation indexVICIdial · accessed September 23, 2026
  4. VICIdial Quality Control ManualVICIdial · accessed September 23, 2026

Follow without guesswork

Get the next article

RSS is live now. Email delivery below is an explicit local preview and sends nothing.Open the RSS feed
Email preview only. The address stays in this browser and is never transmitted.