Reino Aromas · CRM omnicanal
CRM construido sobre Laravel 13 y Vue 3 que centraliza las conversaciones de los tres canales de Meta en una sola bandeja. La capa de tiempo real usa Laravel Reverb con broadcasting: los mensajes entrantes aparecen sin recargar y el tablero Kanban de tickets refleja en vivo los movimientos de cualquier agente. Incluye gestión del ciclo de vida de las cuentas de Meta, reintentos para mensajería fallida y backups automatizados de la base con verificación de integridad.
El estado "En vivo" mentía
El indicador miraba si Reverb estaba configurado en el build, no si el socket estaba realmente vivo. Con Reverb caído seguía diciendo "al día" y ocultaba el botón de actualizar, dejando al agente sin saber que no estaba recibiendo nada. Solución: escuchar el socket real y resincronizar al reconectar.
Configuración en dos lugares
Las credenciales de Meta vivían en .env, pero operación necesitaba cambiarlas sin tocar el servidor. Solución: modelo MetaAccount en base de datos con precedencia sobre .env, y un servicio que unifica ambas fuentes tras una sola interfaz.
El bot que pisa la conversación
Responder sola a cada DM entrante suena a mejor servicio y es lo contrario: el cliente escribe "hola" y recibe el menú; escribe "quiero el de Valencia" y recibe el menú otra vez. Solución: por defecto la automatización responde solo al primer mensaje de la conversación y se aparta en cuanto hay diálogo. Casi todo el servicio son las reglas para callarse, no el envío.
Kanban colaborativo en vivo
Tablero de tickets con drag & drop que persiste el movimiento y lo difunde por WebSocket, de modo que dos agentes viendo el mismo tablero ven el mismo estado sin recargar.
Entrega con reintentos y respaldo
Mecanismo de reintentos para mensajes fallidos, expuesto por endpoints de API y por comando de consola. En paralelo, backups automatizados de MySQL con rotación, verificación de integridad y procedimiento de restauración documentado.
Automatizaciones de Instagram desde el CRM
Respuesta automática a DMs, DM más respuesta pública a quien comenta un post, Ice Breakers, Persistent Menu y menús de Quick Replies, todo editable desde la configuración del CRM y cubierto por tests de feature. La respuesta a comentarios es idempotente: el comment_id se reserva en un índice único antes de decidir nada, porque Meta reintenta el webhook y dos entregas del mismo comentario llegan en paralelo. El aviso público sale primero, para que quede dicho que la cuenta responde aunque el DM se frene por los límites de Meta.