Fault codes

The fourteen faults VoiceLens detects, what triggers each one, its severity, the evidence attached, and which ones you can switch off per rubric.

A fault is a specific, evidenced problem on a call. Each fault carries a code, a severity, the time it happened and the transcript turns that prove it. Faults are the main input to the health score: danger faults cost 15 points, warnings 5, info nothing.

Faults describe speech roles, not agent types. The same detectors run whether the agent turn came from an AI voice agent or a person; agentType is metadata for filtering and comparison.

Conversation faults

These describe how the agent handled the conversation.

CodeTriggerSeverity
REPETITIONThe agent asks a question whose fingerprint already appeared in an earlier agent turn.Warning; danger at three or more repeats
SELF_REPEATInside one turn the agent says the same run of six or more words twice: it finishes a sentence and starts it again, as a voice agent does when a false barge-in makes it regenerate a reply. Number read-backs are exempt.Warning; danger at three or more copies
CONTEXT_LOSSAfter at least 30 seconds and substantive customer speech, the agent re-introduces itself or restarts the script as if the call had just begun.Warning; danger if it happens twice
MISSED_CORRECTIONThe customer corrects a detail ("no, it's seven, not eleven") and the agent's next turn does not acknowledge it.Warning
MISSED_PIVOTThe customer raises a second topic or entity (for example two property types) and the agent never re-confirms which one they are working on.Warning
CUSTOMER_PROMPTThe customer has to check whether anyone is there ("hello?", "are you still there?").Warning
SENTIMENT_DROPThe customer's smoothed sentiment crosses into negative territory after being neutral or better.Warning if it never recovers; info if it recovers by the end of the call

Timing faults

Both are measured on the gap between the end of a customer turn and the start of the next agent turn. Thresholds live on the rubric.

CodeTriggerDefault thresholdsSeverity
AGENT_LATENCYThe agent takes longer than the latency threshold to respond, but less than the dead-air threshold. Not raised when the pause was announced.8 sWarning
DEAD_AIRSilence longer than the dead-air threshold, whoever was expected to speak.12 s warning, 25 s dangerWarning; danger above the danger threshold; info when the pause was announced

Announced holds. A silence is not a stall if the other side was told to expect it. When the turn that ends at a gap announces a pause ("one moment", "let me check", "please hold", or on the customer's side "hold on, let me find my card"), AGENT_LATENCY is not raised and DEAD_AIR is reported as an informational announced hold that does not touch the health score. The built-in phrase lists cover every supported language; a rubric can add its agents' own scripted lines under Detection → Extra hold phrases. An announced hold that runs to the rubric's announced hold limit (60 s by default) or longer is scored as ordinary dead air anyway: a warning does not make a minute of silence acceptable.

See Latency for how gaps are measured and summarised.

Compliance faults

Both are governed by the rubric's phrase lists and are always danger-level. They cannot be disabled; remove the phrase from the rubric instead.

CodeTriggerSeverity
COMPLIANCE_MISSA phrase the rubric marks as required (a recording disclosure, a no-guarantee statement, an identity check) was never said. Evaluated at call level.Danger
FORBIDDEN_PHRASEA phrase the rubric marks as forbidden was said. Evidence points at every matching turn.Danger

Required and forbidden phrases can differ per case branch, so a rubric for an insurance line can require different disclosures for a quote than for a claim.

Reliability faults

These describe the recording and the transcript rather than the agent. They are info level and never change the health score, but they tell you how much to trust the rest of the scorecard.

CodeTriggerDefault threshold
ASR_LOW_CONFWords with low transcription confidence. Evidence lists up to five words and the share of the call affected.Word confidence below 0.5
DIARIZATION_UNCERTAINThe transcript was diarized (mono audio) and speaker attribution confidence is low, so "who said what" is uncertain.Speaker confidence below 0.15
LINE_QUALITYThe acoustic pass found noise, mains hum, hiss, clipping or dropouts. One fault per problem, with the time ranges.SNR below 15 dB, hum at or above -10 dB, hiss flatness at or above 0.4, clipping ratio at or above 0.0005

See Transcription quality.

Evidence

Every fault except COMPLIANCE_MISS (which is call-level) carries evidence: one or more transcript turn indices, start and end times in seconds, and the text excerpt that triggered the detector. In the dashboard, clicking a fault scrolls the transcript to that turn; in the API, the faults[].evidence[] array carries the same data, and faults[].turnIndices lists every turn involved.

Verdicts

Reviewers can mark any fault as confirmed or false positive. False positives are excluded from the health score and from danger and warning counts, and each code's false-positive rate is reported on the fault precision dashboard. If a detector misfires often on your call type, that is the signal to adjust the rubric or disable the code.

Disabling detectors

Any code except COMPLIANCE_MISS and FORBIDDEN_PHRASE can be disabled per rubric under the template's Detection settings. Disabled codes are neither reported nor scored. The greeting phrases used by CONTEXT_LOSS and the reset window (30 seconds by default), and the hold phrases and announced-hold limit used by DEAD_AIR and AGENT_LATENCY (60 seconds by default), are configurable in the same place.

Languages

Lexical detectors (MISSED_CORRECTION, CUSTOMER_PROMPT, CONTEXT_LOSS greetings, the hold announcements that exempt DEAD_AIR and AGENT_LATENCY, phrase matching) use per-language word lists for English, German, Spanish, Italian, Arabic and Turkish. Set the call language on the channel, on the individual upload, or leave it on automatic detection. SELF_REPEAT compares words, not phrases, so it works the same in every language.

A call in a language with no word list is transcribed in its own language but graded with the English detectors, and the language badge on the scorecard says so. Everything that is not word-based — talk time, latency, silence, interruptions, line quality — is unaffected. Sentiment scoring is currently available for English calls only.