Appearance
Módulo 22 · La IA de voz
Read in English: Module 22 · Voice AI.
Objetivo: crear un agente de IA de voz con su aviso obligatorio y su voz, probarlo sin llamar a nadie, ponerlo en vivo, seguir sus conversaciones, tomar el control de una llamada y frenar toda la marcación de IA cuando haga falta. Tiempo: ~9 minutos · Necesitas: una cuenta con el complemento de Voice AI encendido por la plataforma (ver la primera sección), una campaña de tipo «Agente de voz con IA» (el asistente de campañas del Módulo 3) y, para escuchar o tomar el control, un asiento con check-in (Módulo 8).
Este módulo trata de la IA que llama a tus consumidores. Está en el menú lateral, en Voz IA, y son tres pantallas: el resumen (/voice-ai), la lista de Agentes de IA (/voice-ai/agents) y el constructor de cada agente (/voice-ai/agents/:id).
1. Quién la enciende y en qué planes
La consola no tiene ningún interruptor para encender el complemento de Voice AI, y no es una función que falte: el complemento lo enciende la plataforma por cuenta, detrás de su token de administración. Si lo quieres, escríbele a tu contacto en Dialer Digital. Cómo se factura (por minuto conectado, con su mínimo mensual y su escalón de volumen) está en el Módulo 7, §6.
- Planes: el complemento no se ofrece en Starter. Growth, Scale y Enterprise sí son elegibles (Módulo 7, §5).
- Banderas: las tres pantallas de este módulo no dependen de ninguna bandera del catálogo de la plataforma; todo lo que este módulo describe funciona con sólo el complemento encendido.
2. Crea un agente
- En el menú lateral elige Voz IA. En el resumen, el enlace Gestionar agentes de IA → te lleva a la lista Agentes de IA. La pantalla te recuerda: «Configura la divulgación, los límites de negociación y las reglas de traspaso por agente. Pruébalo en el sandbox antes de ponerlo en vivo.»
- Elige + Nuevo agente. Se abren dos campos: Nombre del agente y la Divulgación inicial obligatoria (mini-Miranda), con el recordatorio de que se vuelve inmutable cuando el agente pasa a vivo.
- Elige Crear. El agente nace en Borrador y la consola te abre su constructor. Cancelar descarta el formulario.
La lista muestra, por agente, Nombre, Estado, Voz, Política y la acción Editar →; Actualizar vuelve a leerla. Sin agentes dice «Aún no hay agentes de IA — crea el primero.» Dos agentes de la cuenta no pueden llevar el mismo nombre: el servidor rechaza el duplicado.
El aviso obligatorio
Toda llamada de IA debe abrir diciendo que la voz es automatizada. Por eso el texto no es libre:
- Debe identificar la voz como automatizada. El servidor lo comprueba al guardar, en español y en inglés: el texto tiene que contener al menos una de estas marcas: «virtual assistant», «automated», «automatic», «artificial», «robot», «a.i.», «asistente virtual», «automatizado», «automatizada», «inteligencia artificial», o las palabras «AI» o «IA» con un espacio a cada lado (o al principio o al final del texto): pegadas a un signo, como «una IA.» o «una IA,», no cuentan. Un texto que nunca dice que es una máquina se rechaza y el agente no se crea.
- Se congela al primer «En vivo». Desde la primera vez que el agente pasa a vivo, el texto no se puede cambiar.
- En la consola se escribe al crear. El constructor lo muestra siempre en una caja bloqueada, con el candado y la etiqueta Obligatoria — bloqueada. Si te equivocas de texto antes de ponerlo en vivo, crea otro agente con el texto correcto.
Y la regla que no se negocia: sin al menos un agente en vivo con un aviso válido, el marcador no origina ninguna llamada de IA (la puerta de cumplimiento lo bloquea como política del tenant y lo deja en la evidencia). Un aviso mal escrito no es un detalle de estilo: es una campaña parada.
3. Dale voz y política en el constructor
El constructor tiene una ruta de navegación (IA de voz › Agentes › nombre del agente) y, arriba, el estado del agente con su selector: Borrador, En vivo o Pausado (Retirado aparece como etiqueta, pero no se elige aquí). Todo lo que cambies se guarda con la barra de abajo: dice Cambios sin guardar. o Todos los cambios guardados., y el botón es Guardar cambios («Guardando…» mientras trabaja).
Voz. Voz del agente es un selector con el catálogo de voces gobernado por la plataforma, filtrado por el Idioma del agente (Inglés (EE. UU.), Español (EE. UU.) o Español (MX)). Una voz que el agente ya tenía y que salió del catálogo se muestra como «… — fuera del catálogo» y sigue siendo editable, pero para elegir otra tiene que ser del catálogo. Ritmo de habla es un deslizador cuya etiqueta cambia entre Slow, Natural y Fast (esas tres etiquetas salen en inglés en ambas lenguas).
Escucha la voz antes que un consumidor. ▷ Vista previa reproduce una frase de muestra fija con la voz guardada (si cambiaste la voz, la consola dice «Guarda el cambio de voz para escucharla.»). La frase no se puede escribir: es una por idioma. Mientras se prepara dice «Preparando la muestra…» y puedes cortarla con ■ Detener. Si pides demasiadas muestras, dice «Se pidieron demasiadas muestras. Inténtalo de nuevo en N s.»; un agente sin voz del catálogo no tiene muestra: «Elige una y guarda.»
Política de conversación. Junto al título aparece la versión de la política (policy_version): cada cambio de voz, aviso, política, reglas de traspaso o estado la sube en uno y guarda una copia que no se edita, y las transcripciones citan la versión que estaba vigente. Un cambio de nombre no la sube. Los Límites de negociación son:
- Liquidación máxima: un porcentaje del saldo.
- Pago mínimo: en dólares.
- Duración máxima del plan: en meses.
- Cobrar pagos: un selector con No o Sí — solo con tarjeta guardada. El ajuste del tenant
ai_take_payments_enabled(apagado por defecto) gobierna la segunda opción: mientras está apagado, core rechazatake_payments: card_on_filecon un422, así que el selector ofrece solo No, y la consola muestra «Cobrar con tarjeta guardada no está disponible. Deja Cobrar pagos en No.» si aun así se rechaza un guardado. Un agente que ya guarda Sí lo conserva en el selector y se puede guardar con él, pero mientras el ajuste esté apagado la plataforma sirve a ese agente al runtime de voz como No. La consola no puede leer el ajuste, así que ofrece Sí solo a un agente que ya lo tiene. Pese a su nombre, nada en la plataforma cobra una tarjeta: con Sí, cuando el consumidor acepta pagar un monto la IA registra un compromiso de pago (una promesa de pago, «PTP») y dice «he registrado su compromiso de pago de $X», nunca que procesó un pago. La conversación termina como PTP, no como pago cobrado (ADR.md#19 de voice-ai). Los topes de pago mínimo y de traspaso siguen igual. - Prohibido: las conductas que el agente no debe tener. Escribe en «Añade una conducta prohibida…» y elige Añadir; Quitar la borra.
Reglas de traspaso. Cada regla dice cuándo el agente pasa la llamada a una persona (palabras clave, sentimiento negativo, un pago por encima de un monto, o que el consumidor pida una persona) y la acción que ejecuta, con su severidad («hard rule» o «soft rule», en inglés en la pantalla). Las que llevan el candado están «Bloqueada por cumplimiento — no se puede editar ni quitar»; las demás se quitan con Quitar. Sin reglas dice «Sin reglas de traspaso configuradas.»
4. Pruébalo antes de ponerlo en vivo
A la derecha del constructor está la Conversación de prueba, marcada Sandbox — sin llamadas en vivo. Arranca con la divulgación del agente como primera línea; tú escribes lo que diría el deudor («Escribe una línea del deudor para arrancar el sandbox.»), en el campo «Escribe una respuesta de prueba…», y lo envías con el botón ➤ («Enviar mensaje de prueba»). El agente responde en la burbuja de la izquierda y el hilo sigue en la misma sesión de prueba.
El sandbox es de mentira de verdad: no hay llamada, no se crea ninguna conversación en el historial ni se marca a nadie. Si el motor de la IA no está disponible, la prueba falla con un aviso en rojo en vez de inventar una respuesta. Úsalo para probar tus límites de negociación y para comprobar que una frase como «quiero hablar con una persona» dispara el traspaso.
La prueba tiene topes, porque cada turno gasta la IA de la plataforma. En la práctica solo los alcanzas si algo entra en bucle:
- Una línea de prueba mide como máximo 4.000 bytes (unas 4.000 letras sin acento; las letras con acento y los emoji ocupan más de un byte). Una más larga se rechaza con un
400y el mensaje «message is too long (max 4000 bytes)». - Como máximo 30 turnos de prueba por minuto en toda tu cuenta, y 12 por minuto dentro de una misma sesión de prueba. Por encima de cualquiera, la respuesta es un
429conRetry-After: los segundos que faltan para que empiece el siguiente minuto. Espera ese tiempo y vuelve a enviar. - El hilo recuerda un historial acotado. Una sesión de prueba conserva unos 24.000 bytes de conversación; los turnos más antiguos se descartan primero, así que una prueba muy larga olvida cómo empezó. Las instrucciones del propio agente nunca se descartan. Las sesiones de prueba inactivas se olvidan a los 15 minutos: abre un hilo nuevo en vez de reanimar uno viejo.
- Una cuenta de demostración no puede ejecutar la prueba: responde
403«synthetic_tenant». - Si la plataforma no tiene presupuesto de IA que gastar, la prueba no corre: la respuesta es
503 sandbox_budget_unavailabley no se envía nada al modelo. Es distinto del aviso en rojo de «el motor de la IA no está disponible» (503 sandbox_unavailable).
Una prueba rechazada no es una llamada y no crea ninguna conversación, igual que una prueba que funciona. Si llamas a la prueba desde código, los mismos errores están en la guía de la API REST.
Cuando estés conforme, cambia el estado a En vivo y elige Guardar cambios. Ese guardado congela el aviso. Pausado deja de contar al agente como agente en vivo, sin borrar nada; Retirado (sólo por la API) lo deja fuera de uso y conserva su historial, porque las transcripciones lo citan.
Antes de pasar a En vivo, rellena las guardas. Un agente en vivo debe llevar límites explícitos; si no, el motor de voz usa valores por defecto permisivos. Al guardar con En vivo, la plataforma comprueba que la política tenga Liquidación máxima, Pago mínimo, Duración máxima del plan y al menos una conducta en Prohibido; si en Cobrar pagos elegiste Sí — solo con tarjeta guardada, además pide una regla de traspaso para un pago por encima de un monto. Qué ocurre si falta algo depende de un ajuste de la plataforma que tú no controlas (ai_agent_live_requires_guards, que toma off, observe o enforce):
observe(el valor por defecto): el guardado pasa y el agente queda en vivo, pero la respuesta trae un avisopolicy_incompletecon las claves que faltan (max_settlement_pct,min_payment_cents,max_plan_months,prohibited,payment_over). Rellénalas y guarda otra vez.enforce: el guardado se rechaza con422 policy_incomplete, nombrando las claves que faltan, y el agente no pasa a vivo. Un agente que ya está en vivo y no tiene guardas no se corta, pero sigue recibiendo el aviso, y una edición que abriría un hueco nuevo se rechaza.off: no se comprueba nada y no hay aviso.
La consola muestra las dos respuestas al guardar: con observe, «Guardado, pero el agente está activo sin límites explícitos en: …. Opera con valores permisivos hasta que los definas.»; con enforce, «El agente no puede pasar a activo sin límites explícitos. Faltan: …. Defínelos y guarda de nuevo.» Quien integra encuentra las mismas respuestas en la guía de la API REST.
5. Sigue las conversaciones en vivo
El resumen de Voz IA se actualiza solo. Arriba van cinco indicadores: Atendidas por IA hoy, Tasa de contención, Tiempo medio de atención IA, Traspasos a humano y Minutos de IA hoy (con «facturados hoy»). Abajo, Hoy vía IA: PTPs conseguidas, Pagos cobrados (la IA no genera pagos: lo que acuerda pagar cuenta como PTP, ver §3), Mensajes en buzón y Violaciones de cumplimiento. Son del día UTC en curso.
Dos precisiones para leerlos bien:
- La Tasa de contención se calcula «sobre las cerradas con una persona»: las fallidas, las disputas y los traspasos no cuentan como contenidas, y los buzones quedan fuera. Si aún no hay ninguna cerrada dice «aún no hay conversaciones cerradas con una persona»; las que siguen en curso se avisan aparte y no entran en la tasa.
- Si las métricas no cargan, la consola dice «Métricas no disponibles —» con el motivo: es un fallo de lectura, no un cero.
La franja FCC 24-17 resume la elegibilidad: «La IA de voz sólo marca listas con consentimiento para voz artificial/pregrabada.» Lista las campañas Elegibles y las No elegibles. Si no responde, dice «elegibilidad no disponible» y recuerda que el gate de consentimiento sigue aplicándose en el servidor en cada marcación.
La tabla Conversaciones de IA en vivo (con su contador «N activas») muestra, por llamada, Cuenta, Estado, Fase (etiquetas en inglés: Disclosure, Verification, Negotiation, Payment setup, Wrap-up), Duración, Sentimiento y Acciones. Sin llamadas dice «Sin conversaciones de IA en vivo ahora mismo — las llamadas activas aparecen aquí en tiempo real.»
6. Escucha y toma el control
Cada fila tiene dos acciones, con sus reglas:
- Escuchar reutiliza la mecánica de supervisión del Módulo 8: timbra en tu propio asiento. Si el agente marca la conversación con traspaso sugerido (el modelo cree que debería entrar una persona), la fila ofrece sólo Tomar el control, en negrita.
- Tomar el control pasa al consumidor de la IA a tu extensión y corta la pierna de la IA. No aparece durante la divulgación: no se puede traspasar una llamada a mitad del aviso obligatorio. Cada toma de control deja una fila de auditoría antes de mover la llamada.
Necesitas estar en un asiento con check-in: la consola dice «Escuchar / Tomar el control timbra en TU asiento — haz check-in primero (Mi Espacio → elige tu asiento) y luego vuelve.» Tu extensión debe tener rol de supervisor o administrador; si el servidor lo rechaza, la consola muestra «Tomar el control falló — …» con el motivo.
7. Pausa y reanuda toda la marcación de IA
En el resumen, Pausar toda la marcación IA es el freno de mano de la cuenta. Antes de actuar te pregunta «¿Pausar toda la marcación IA?»: «Esto detiene el marcador IA en toda la cuenta. Las llamadas en curso terminan; no arranca ninguna llamada IA nueva hasta que reanudes.» Confirma con Pausar toda la marcación IA (o Cancelar).
Mientras está pausada, el resumen dice Marcación IA pausada, quién la pausó y a qué hora, y «Las llamadas IA nuevas quedan retenidas. Las que ya están en curso terminan con normalidad.» Se levanta con Reanudar marcación IA (o Reanudar). Pausar y reanudar son idempotentes: repetirlos no hace daño. Las llamadas de IA que el marcador intente mientras tanto se bloquean como política del tenant y quedan en la evidencia.
Pausar y reanudar exige un administrador. Un inicio de sesión member recibe 403 role_forbidden en cualquiera de los dos botones; el resumen que muestra el estado sigue siendo legible.
Distingue los tres frenos: Pausado en un agente saca a ese agente; Pausar toda la marcación IA frena a todos los de la cuenta; y el complemento (§1) lo maneja la plataforma.
8. Si el consumidor pide una persona
Todo agente lleva una regla de traspaso que no se puede quitar ni editar: cuando el consumidor pide hablar con una persona, la llamada se transfiere a un asiento, con severidad hard. Si falta, el servidor la inyecta al crear el agente.
El traspaso deja su evidencia antes de mover nada y vuelve a pasar por la puerta de cumplimiento, porque el consumidor queda en audio en vivo con una parte nueva. Lo que decide si hay a quién pasar es tu piso: si hay un asiento libre, la llamada se transfiere a él; si no lo hay, el consumidor oye una disculpa y la llamada termina (salvo que el motor de la IA decida seguir hablando con él). Mantén asientos disponibles mientras tengas agentes de IA en vivo (Módulo 5).
9. Datos personales en las conversaciones
Dos protecciones evitan que los números de tarjeta, de seguro social y de cuenta bancaria queden en las conversaciones de la IA. Ninguna tiene ajuste en la consola.
- Lo que el consumidor dice en voz alta se enmascara en el acto. Si durante una llamada el consumidor dicta un número de tarjeta, de seguro social, de cuenta bancaria (o de ruta) o un PIN o código de seguridad, la plataforma lo enmascara antes de que llegue al historial del modelo de IA y antes de que la conversación lo registre. La IA no lo repite ni lo vuelve a pedir: responde con una frase fija, «Por su seguridad, no dicte números de tarjeta, cuenta o seguro social en esta llamada.» (en inglés en los agentes en inglés), y ofrece comunicarlo con una persona cuando el traspaso está disponible. Si en el mismo turno pide una persona o que no lo llamen más, eso se atiende primero, como siempre. Un teléfono o una cantidad de dinero dichos en voz alta no son datos personales de este tipo y pasan intactos.
- Lo que lees después sale redactado. Cuando lees una conversación por la API, el texto de cada línea de la transcripción lleva esos mismos datos enmascarados (una tarjeta muestra sólo sus últimos cuatro dígitos). El original sólo lo pide una llave
dd_o un loginaccount_admin, y cada petición deja rastro de auditoría. Los detalles están en la guía de desarrollador.
Conoce los límites: la detección es un conjunto fijo de reglas, no un criterio. Cubre tarjetas, seguro social, cuentas bancarias y PIN o códigos de seguridad, y nada más. Los dígitos que el reconocedor de voz escribe con palabras pueden quedar sin detectar, y una racha larga de dígitos que casualmente parezca una tarjeta puede enmascararse aunque no lo fuera. Como el dato dicho en voz alta se enmascara antes de guardar la conversación, su original no se puede recuperar después, ni siquiera pidiendo el texto original.
10. Lo que la IA nunca dirá
Más allá de la política que tú escribes, la plataforma mantiene un suelo de conducta que ningún ajuste de la cuenta puede bajar. Es una lista de la plataforma: no la puedes editar ni quitar, y se suma a tu lista de Prohibido en vez de reemplazarla (voice-ai src/voiceai/platform_guard.py, ADR.md #20).
- Nunca dice que es una persona. En inglés y en español, a la IA se le impide decir que es una persona, un humano, un agente en vivo o «de carne y hueso», y negar que es un robot, una IA o una grabación («no soy un robot»). Una negación que es la respuesta honesta, en español, como «no soy una persona», pasa.
- Nunca amenaza con arresto o cárcel. Frases como «será arrestado», «irá a la cárcel» o «orden de arresto en su contra» (y sus equivalentes en inglés) se detienen.
- Qué oye el consumidor en su lugar. La frase vetada no se pronuncia: una afirmación de ser humano se cambia por «Soy un asistente automatizado.» («I am an automated assistant.» en inglés), y una amenaza de arresto por «Quiero ayudarle a resolver esto de la mejor manera posible.» Cada sustitución cuenta como una violación de conducta prohibida, con el origen marcado como la plataforma (
prohibited_violation,source: platform). - «¿Eres un robot? ¿Hablo con una persona?» La IA no le pasa esta pregunta al modelo: contesta una línea fija, «Soy un asistente automatizado, una inteligencia artificial, no una persona.» («I am an automated assistant, an AI, not a person.» en inglés) y la conversación registra
machine_question_answered. Las preguntas sobre la deuda, como «Is this a real debt?», no se confunden con ella y llegan al modelo. - El sandbox de prueba aplica el mismo suelo.
- Interruptor. El suelo está encendido por defecto. La plataforma puede apagarlo con el ajuste
VOICEAI_PLATFORM_GUARD(0), como vuelta atrás si fallara; en la consola no hay interruptor.
Conoce los límites, que la propia plataforma deja escritos: sólo cubre inglés y español; una afirmación con palabras que no están en la lista («sí, de carne y hueso» sin «soy») no se atrapa; y una frase que el segmentador de voz parte en dos oraciones se detiene sólo desde su segunda mitad, porque la primera ya se pronunció.