Desarrollamos un portal de atención al cliente, en Laravel y con la interfaz en varios idiomas, en el que la inteligencia artificial hace dos trabajos: ordenar lo que llega y contestar lo que ya está respondido en la base de conocimiento. Con una regla que manda sobre todo lo demás: si no está claro, no contesta.
Cómo entra cada consulta
- Formulario web. Crea el ticket, y un proceso clasifica los nuevos cada minuto.
- Correo. El portal lee varios buzones por IMAP y convierte cada correo en un ticket. El departamento sale de la dirección a la que se escribió (con alias, basta un solo buzón); si no casa, del que propone la IA, y si tampoco, del departamento por defecto del buzón.
- Sin duplicados. Cada correo se reconoce por su identificador (Message-ID). La primera versión usaba la marca de «leído», y un correo que un agente abría antes que la IA ya no entraba nunca.
- La conversación vive en el ticket. El cliente contesta desde un enlace privado, sin hilos de correo que reconstruir.
Ordenar: departamento y spam
La IA decide solo dos cosas: a qué departamento va cada consulta y si es spam. Recibe la lista de departamentos con la descripción de los casos de cada uno y devuelve la acción, el departamento y su razonamiento. Las instrucciones incluyen defensas contra la manipulación, por si alguien escribe en su consulta algo como «ignora tus instrucciones».
La prioridad la sigue poniendo una persona. El spam que llega por correo se descarta sin crear ticket; el que llega por la web queda marcado. Y si la IA falla, el ticket se crea igual, sin clasificar: ninguna consulta se pierde por culpa de la IA.
Contestar solo lo que está en la base de conocimiento
Sin RAG ni embeddings: la IA recibe todos los artículos publicados de la base de conocimiento como preguntas frecuentes. Mientras la base cabe entera en la consulta, es más simple y más fácil de auditar.
Solo contesta si la respuesta está claramente en esas preguntas frecuentes, y tiene que decir en qué artículo se basa. Si duda, o si el tema son pagos, datos personales o algo sensible, declina y el ticket pasa a una persona. Si contesta, el ticket se da por resuelto y se avisa al cliente.
Si la base de conocimiento pasa de 100.000 caracteres, ni lo intenta. Es la señal de que toca otro enfoque.
Sin aprobación previa, pero todo a la vista
Aquí no hay una persona aprobando cada respuesta antes de enviarla: la decisión es binaria y la toma el modelo. La aprobación previa la reservamos para acciones con consecuencias, y responder una pregunta frecuente con un artículo ya publicado no lo es.
A cambio, cada decisión queda registrada en el ticket con su razonamiento y el artículo en que se basa, a la vista del equipo. Y las instrucciones se han ido haciendo más restrictivas con el uso.
Para los agentes hay además un botón que genera un resumen del ticket, notas internas incluidas, sin relleno y sin inventar nada. No se guarda: se genera cuando hace falta. La IA ayuda también a traducir los artículos de la base de conocimiento.
Una pasarela para todas las llamadas a la IA
Las aplicaciones no llaman al modelo directamente: pasan por una pasarela de IA interna que registra cada llamada con su origen y pone a cada aplicación un límite mensual de gasto. Al alcanzarlo, la pasarela contesta con error sin llamar al modelo, y el portal sigue funcionando sin IA.
El modelo es de la familia Gemini Flash. Cambiarlo, o cambiar de proveedor, se hace en un solo sitio. Como mucho hay tres reintentos, y ninguno si el error es de autenticación o de límite de gasto: reintentar ahí solo gasta.
Lo que aprendimos
Una IA que dice «no lo sé» es más útil que una que siempre contesta. La regla de declinar ante la duda es lo que permite dejarla contestar sola.
- Toda la lógica de IA en un solo sitio, para la web y para el correo.
- Si la IA falla, el servicio sigue: el ticket se crea igual y lo atiende una persona.
- El cliente nunca ve los estados internos del ticket.