Callsistdocs
Guías

Hablantes y roles

Cuándo fiarse de speakerRole, y por qué el número de confianza solo no basta.

Es lo que hace útil esto para un BPO, y también donde es más fácil construir una métrica falsa con toda confianza.

  • speaker es un identificador acústico ("0", "1", …), estable dentro de una misma llamada y sin significado entre llamadas. El hablante "0" de dos llamadas distintas no es la misma persona.
  • speakerRole es "agent", "customer" o null. Se atribuye o no se atribuye: no se adivina.
  • speaker_role_confidence dice cuánto fiarse. Medido en llamadas reales de BPO: 0,9 en castellano. Un 0 significa que no se etiquetó ningún rol, y speakerRole será null en todas las intervenciones.

El número solo no basta

En una llamada real en catalán salió speaker_role_confidence: 0.7 —por encima de cualquier umbral razonable— y los roles estaban mal: el saludo del agente venía marcado como customer.

Lo que sí lo dijo fue el aviso attribution_heuristic_disagrees, que viajaba en warnings. Está exactamente para eso.

Regla práctica, en este orden:

  1. Si warnings contiene attribution_heuristic_disagrees, diarization_single_speaker o diarization_unavailabletrata la llamada como sin roles.
  2. Si no, y speaker_role_confidence >= 0.6 → los roles son utilizables.
  3. En cualquier otro caso, no construyas encima métricas por agente.
const w = t.warnings ?? [];
const rolesFiables =
  !w.some(x => ['attribution_heuristic_disagrees',
                'diarization_single_speaker',
                'diarization_unavailable'].includes(x)) &&
  (t.speaker_role_confidence ?? 0) >= 0.6;

Qué hacer con las llamadas que no pasan el filtro

Apartarlas para revisión manual, no puntuarlas. Una plantilla de calidad aplicada sobre roles invertidos produce una nota confiada y falsa, que es peor que no tener nota: nadie la va a cuestionar porque viene con un número al lado.

En un panel de calidad eso se traduce en tres cubos —puntuadas, apartadas y fallidas— y no en dos.

Estéreo

Si tu grabación trae agente y cliente en canales separados, hoy no se aprovecha: el audio se mezcla a mono y la separación se hace por diarización acústica. Se avisa con stereo_source_available en warnings.

Para grabaciones de contact center esto no suele importar —son mono y la diarización funciona—, pero si tienes estéreo de verdad estás perdiendo una señal que sería perfecta.

speakerRole está en camelCase

En un JSON donde todo lo demás es snake_case, dentro de utterances[] y de pii.utterances_redacted[] el campo se llama speakerRole, no speaker_role.

On this page