Appearance
Evaluación de calidad con IA
English version: Automatic (AI) evaluations.
Desde core v0.106.0 (core#1973) la plataforma puede puntuar por sí sola una llamada grabada, de modo que las llamadas que ningún supervisor llega a escuchar reciban una primera pasada. Es una clase de evaluación aparte: evaluator_kind vale automatic (el de una persona, human). Los nombres de campo y los enums salen de openapi/dialer-v1.yaml vendorizado (info.version: 0.106.0); donde la spec calla, la afirmación cita un fichero de core en el tag v0.106.0. La guía completa de calidad, con formularios, disputas y reportes, está en Gestión de calidad (Quality management, en inglés).
Qué evalúa y qué no
- Qué evalúa. Cada criterio de un formulario de puntuación, contra la transcripción redactada de la llamada. El modelo sólo devuelve una respuesta por criterio; nunca una nota. Core calcula
score_bp,passedyauto_failedcon la misma puntuación que para una persona. Elweighty elcriticalde los criterios no se envían al modelo.lib/dialer/qm/auto_qa.ex. - Contra qué formulario. El formulario vivo más antiguo del tenant, en su versión vigente. No hay mapeo campaña-formulario: toda grabación elegible se evalúa contra ese formulario.
lib/dialer/qm/auto_qa.ex. - Qué no hace. El resultado es una sugerencia para el evaluador y una cifra en un reporte; nunca cambia la disposición de una llamada: el job sólo escribe una fila de evaluación. No se escribe si las respuestas del modelo no cubren todos los criterios o no caben en su criterio (no se inventa un «no aplica»;
lib/dialer/qm/auto_qa.ex). Nunca pisa a una persona: si la grabación ya tiene una evaluación de ese formulario, no se hace otra automática. Las grabaciones de llamadas con agente de voz con IA (ai_used) quedan excluidas. - La persona gana siempre. La primera evaluación humana de una grabación cuya evaluación vigente es automática la sustituye, sin que quien llama envíe
supersedes_id. La fila automática se conserva (la tabla sólo añade).lib/dialer/qm/evaluations.ex. - El agente puede disputarla igual que una humana. La disputa nunca se resuelve sola: la resuelve un evaluador elegible, y si la ajusta, su evaluación humana sustituye a la automática. La vista del agente (
QmAgentEvaluation) no llevaevaluator_kind: el agente no sabe de qué clase era.
Quién la recibe
Deben cumplirse todas, o no se evalúa y no se gasta nada:
| Condición | Detalle | Fuente |
|---|---|---|
| Plan | Tier scale o enterprise (el derecho :qa). Cualquier otro tier, también uno desconocido, no lo tiene. | lib/dialer/post_call/entitlement.ex |
| Flag del tenant | qm_enabled encendido (sin él, las escrituras de calidad responden 403 qm_not_enabled). Una migración lo enciende por segmento para scale y enterprise; un override por tenant, que sólo escribe Dialer Digital, gana al segmento en los dos sentidos. | lib/dialer/qm/auto_qa.ex, priv/repo/migrations/20261111030002_seed_qm_enabled_segments.exs |
| Grabación | available, con el audio sin purgar, con agente, sin ai_used, con transcripción guardada y sin evaluación previa de esa grabación y formulario. | lib/dialer/qm/auto_qa.ex |
| Proveedor | Un proveedor de pago configurado para análisis en la celda. El proveedor local no sirve esta tarea y el job termina sin gastar. | lib/dialer/qm/auto_qa.ex |
El job se encola al guardar la transcripción de la grabación (Inteligencia post-llamada describe la elegibilidad de la transcripción).
El freno de gasto (fail-closed)
La evaluación pasa por el mismo freno de gasto que la transcripción y el análisis, con function: "qa". El job pide una reserva antes de llamar al modelo y la liquida después con el consumo real de tokens. Todo lo que no sea una reserva concedida termina el job sin gastar y sin reencolar; un libro que no se puede leer hace fallar el intento sin gastar. La salida del modelo se acota a 2 048 tokens. El tope, los motivos de denegación y las reglas fail-closed están en Inteligencia post-llamada y se aplican sin cambios. Para un cliente de la API el efecto visible de una denegación es que no aparece ninguna evaluación automática.
Cómo se distinguen en los reportes y listados
evaluator_kind es un campo de QmEvaluation (human o automatic; evaluator_user_id es null en automatic). Los dos reportes (GET /v1/qm/reports/agents y /v1/qm/reports/campaigns) agrupan por agente (o campaña), formulario y evaluator_kind: la nota de una persona y la pasada automática son filas distintas y nunca se promedian juntas. Aceptan el filtro opcional evaluator_kind=human|automatic (cualquier otro valor es 400).
En el dashboard (v0.51.0), una evaluación automática se rotula «Automática» en el panel de calidad de la grabación (apps/web/src/routes/recordings/QmEvaluationPanel.tsx), y el reporte de la página de calidad muestra la clase de cada fila y se filtra por ella (apps/web/src/routes/quality/QualityPage.tsx).