Redacción de PII
Qué detecta, cómo se tapa y por qué el texto de primer nivel sigue en claro.
Se pide dentro de understanding:
{ "pii_redaction": { "entities": ["person", "phone", "nif"], "policy": "entity_name" } }Produce dos cosas. En understanding.pii_redaction, lo detectado:
{ "entities": [ { "type": "person", "text": "Marta Ejemplo" }, { "type": "phone", "text": "600 000 000" } ] }Y en la clave pii de primer nivel, el texto ya tapado:
{
"policy": "entity_name",
"text_redacted": "…me llamo [NOMBRE] y mi teléfono es [TELEFONO]…",
"entities": [ "…" ],
"utterances_redacted": [ { "speaker": "0", "speakerRole": "customer", "text": "…[NOMBRE]…" } ]
}pii vale null si no se pidió el módulo o si no se detectó ninguna entidad.
La trampa que hay que leer entera
text y utterances de primer nivel NUNCA se redactan. Siguen en claro aunque
actives la redacción.
Es deliberado: quien no pide redacción quiere su transcripción entera. Pero significa que
si la pides y sigues leyendo text, estás procesando datos personales en claro
creyendo que no.
{
"text": "Me llamo Marta Ejemplo y mi DNI es 00000000T", // ⚠ en claro, siempre
"pii": {
"text_redacted": "Me llamo [NOMBRE] y mi DNI es [DNI]", // ✅ esto es lo que hay que usar
"utterances_redacted": [ "…" ]
}
}Qué hacer: en cuanto pii !== null, usa pii.text_redacted y
pii.utterances_redacted y no vuelvas a mirar text ni utterances.
const texto = t.pii ? t.pii.text_redacted : t.text;
const turnos = t.pii ? t.pii.utterances_redacted : t.utterances;Tipos y marcadores
Tipos canónicos (type): person, phone, email, iban, card, nif, address,
date_of_birth, license_plate, medical.
El modelo puede contestar «DNI» o «Teléfono» en el idioma de la llamada; se normalizan aquí, y lo que no encaja en la lista se descarta.
Marcadores según policy:
policy | Resultado para «Marta Ejemplo» |
|---|---|
entity_name (defecto) | [NOMBRE] |
hash | [NOMBRE_a3f9c2] — mismo valor, mismo código en toda la llamada |
mask | •••••••••••• |
hash es el que sirve cuando necesitas saber que dos menciones son la misma persona sin
saber quién es: útil para contar clientes distintos en un lote sin guardar nombres.
Marcadores por tipo: [NOMBRE], [TELEFONO], [EMAIL], [CUENTA], [TARJETA],
[DNI], [DIRECCION], [FECHA_NACIMIENTO], [MATRICULA], [DATO_MEDICO].
redact_audio no silencia el audio
No pongas redact_audio: true. Factura y no existe ninguna etapa que silencie el
audio: el fichero vuelve idéntico. Déjalo en false, que es el valor por defecto — o
mejor, no lo mandes.
El silenciado de PII dentro del audio está en camino, pero mientras no funcione no se anuncia ni se debería contratar.