Problema
Las consultas sobre la Ley REP llegan por WhatsApp y se repiten: qué productos son prioritarios, quién debe declarar, cómo cumplir. Responderlas una a una consume tiempo del equipo, y los casos que sí necesitan a una persona se pierden entre las demás.
Contexto
Proyecto profesional en GreenSoft, en producción en leyrep.cl. Es el asistente virtual de Ley REP; Orbix fue su nombre anterior. Es backend puro: no tiene interfaz propia, todo lo que ve el usuario ocurre en WhatsApp. Es independiente de Dixta.
Objetivo
Orientar sobre la Ley REP con respuestas apoyadas en documentos, y derivar los casos concretos al equipo comercial con los datos necesarios para continuar la conversación.
Mi rol
- Planifiqué la solución, definí el diseño técnico y construí el backend.
- Implementé el webhook de WhatsApp Cloud API con validación de firma de Meta, y los flujos guiados con botones, listas y opciones numeradas.
- Construí las respuestas con IA para preguntas abiertas: búsqueda sobre los documentos indexados y generación con DeepSeek a través de Vercel AI Gateway.
- Integré el registro de leads en el CRM (Odoo) cuando una conversación se deriva a un ejecutivo.
Arquitectura y decisiones
- Laravel 13 sobre PHP 8 y MySQL; es backend puro, sin frontend. La suite tiene cerca de 1.280 pruebas en Pest y corre contra MySQL.
- El webhook solo valida y encola: firma de Meta, límite por teléfono y extracción del mensaje. La respuesta se arma en un job, porque Meta reintenta si el webhook tarda.
- Cada mensaje pasa por una cascada de decisión: primero los flujos guiados y un árbol de intenciones; el modelo solo responde las preguntas abiertas.
- La búsqueda documental es léxica, sin embeddings ni base vectorial: un índice local en SQLite (FTS5) sobre 116 documentos normativos.
- El modelo es DeepSeek a través de Vercel AI Gateway, por una API compatible con OpenAI. Antes corría en un servidor propio con llama.cpp.
- Los leads se envían a Odoo y un job reintenta los envíos fallidos. Bitrix24 se dio de baja.
Flujo de arquitectura
- 01WhatsApp
- 02Webhook: valida y encola
- 03Flujo guiado o IA + documentos
- 04Derivación + Odoo
Solución
- Menú principal interactivo y submenú de productos prioritarios, con respuestas guiadas para las preguntas frecuentes.
- Respuesta con IA para preguntas abiertas, apoyada en los fragmentos de los documentos normativos que recupera la búsqueda.
- Formularios de captura dentro del chat y derivación a un ejecutivo, con registro del lead en Odoo.
- Eliminación de datos a pedido desde el propio chat: la conversación se anonimiza en vez de borrar las filas.
- Conjuntos de casos de referencia y comandos para evaluar recuperación, ruteo y respuestas antes de cambiar un parámetro o un modelo.
Desafíos y trade-offs
- En un tema normativo, el riesgo no es que el modelo redacte mal sino que responda bien a quien no preguntó; por eso las respuestas se apoyan en documentos y no en lo que el modelo recuerda.
- Evitar mensajes duplicados cuando el modelo responde lento: el webhook encola, un candado por teléfono ordena los turnos y una tabla de mensajes entrantes da la idempotencia.
- Elegir búsqueda léxica en vez de vectorial y ajustar sus parámetros midiendo contra casos de referencia, no a ojo.
- Cambiar de proveedor de modelo sin reescribir el sistema, manteniendo una interfaz compatible con OpenAI.
Aprendizajes
- Medir antes de cambiar: con un conjunto de casos de referencia, una mejora deja de ser una impresión.
- La IA aporta en la interpretación de preguntas abiertas; los flujos que capturan datos o derivan a una persona necesitan pasos explícitos.
- Diseñar una conversación exige el mismo cuidado por jerarquía y recuperación de errores que una interfaz visual.
Resultado
En producción en leyrep.cl: responde consultas sobre la Ley REP por WhatsApp y deriva los casos comerciales al CRM. Se omiten documentos internos, credenciales y detalles operativos.