- Servicio wacrm en api-gateway (pg pool lazy): round-robin de conversaciones sin agente entre vendedores vinculados y miembro-agentes de la cuenta wacrm, cron cada 30 s; bandeja del vendedor; estado/config/reasignar para admin. - Endpoints /api/wacrm/* con guarda de rol admin/manager. - Usuario.wacrmUserId en schema Prisma (vinculo CRM<->wacrm). - App apps/wa-crm (/wa-crm/): bandeja + administracion del round-robin. - Landing: tarjeta WhatsApp; clave 'whatsapp' en MATRIZ de roles. - Plan de nuevas reglas de negocio del cotizador (docs/PLAN-REGLAS-COTIZADOR.md). - WACRM_PG_URL apunta a Postgres de Supabase por 127.0.0.1:5433. - Tests de integracion wacrm (3) y suite completa 764/764 en verde.
2.7 KiB
2.7 KiB
Módulo WhatsApp (WA CRM) — CRM360 FRASA
Integración entre el CRM y wacrm (WhatsApp CRM
self-hosted en /root/wacrm, datos en Supabase self-hosted /root/supabase).
Cómo funciona
- Vínculo de usuarios: cada
Usuariodel CRM tienewacrmUserId(id deauth.usersen Supabase). Los 30 usuarios activos del CRM están dados de alta en wacrm y su perfil pertenece a la cuenta compartida (7b17a9ab-6723-43aa-a9da-28e97f0071ae, del usuario administrador). Vendedores = rolagent, managers/admins = roladmin. - Round-robin: el API Gateway (
frasa-api) revisa cada 30 s las conversaciones de la cuenta compartida que llegan sin asignar (assigned_agent_id IS NULL, estatusopen) y las turna entre los vendedores del pool (rolvendedor, activos, vinculados y miembros agente de la cuenta). El índice del turno vive enConfiguracionSistema(wacrm_rr_idx), así que sobrevive reinicios. - Bandeja del vendedor:
GET /api/wacrm/mi-bandejadevuelve las conversaciones asignadas al usuario logueado (contacto, último mensaje, no leídos). La appapps/wa-crm(/wa-crm/) las muestra con liga a/wa/inboxpara responder desde wacrm. - Administración (rol admin/manager, pestaña en
/wa-crm/):- Estado: sin asignar, total, pool con "es miembro" y cuántas tiene cada uno.
- Activar/desactivar round-robin y cambiar la cuenta (
POST /api/wacrm/config). - "Asignar ahora" dispara el reparto a demanda (
POST /api/wacrm/round-robin). - Reasignar una conversación a cualquier vendedor (
POST /api/wacrm/reasignar).
Conexión técnica
WACRM_PG_URLen/root/frasa-ecosystem/.envapunta al Postgres de Supabase por127.0.0.1:5433(puerto publicado solo en localhost del contenedorsupabase-db; el 5432 es Supavisor y exige tenant).- El servicio
api-gateway/src/services/wacrm.service.tsusapg(Pool lazy; sin URL lanza 503 y el resto del CRM sigue igual). - Al escribir (
UPDATE conversations) se hace como superusuario postgres, bypass RLS — solo el API lo hace, nunca el cliente.
Puesta en marcha del número
El round-robin está activo sobre la cuenta compartida. Falta conectar el
número de WhatsApp (API oficial de Meta) en wacrm: credenciales y pasos en
/root/wacrm/ENV-PENDIENTES.md. Cuando Meta entregue el número, conectarlo
desde wacrm → Settings → WhatsApp con la cuenta del administrador.
Tests
api-gateway/src/services/wacrm.service.test.ts — integración real contra
Supabase (se auto-salta si no hay WACRM_PG_URL); crea usuarios/cuenta/
conversaciones de prueba y los limpia. Correr:
cd api-gateway && npx vitest run src/services/wacrm.service.test.ts