# Módulo WhatsApp (WA CRM) — CRM360 FRASA Integración entre el CRM y [wacrm](https://wacrm.tech) (WhatsApp CRM self-hosted en `/root/wacrm`, datos en Supabase self-hosted `/root/supabase`). ## Cómo funciona - **Vínculo de usuarios**: cada `Usuario` del CRM tiene `wacrmUserId` (id de `auth.users` en 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 = rol `agent`, managers/admins = rol `admin`. - **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`, estatus `open`) y las turna entre los vendedores del pool (rol `vendedor`, activos, vinculados y miembros agente de la cuenta). El índice del turno vive en `ConfiguracionSistema` (`wacrm_rr_idx`), así que sobrevive reinicios. - **Bandeja del vendedor**: `GET /api/wacrm/mi-bandeja` devuelve las conversaciones asignadas al usuario logueado (contacto, último mensaje, no leídos). La app `apps/wa-crm` (`/wa-crm/`) las muestra con liga a `/wa/inbox` para 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_URL` en `/root/frasa-ecosystem/.env` apunta al Postgres de Supabase por `127.0.0.1:5433` (puerto publicado solo en localhost del contenedor `supabase-db`; el 5432 es Supavisor y exige tenant). - El servicio `api-gateway/src/services/wacrm.service.ts` usa `pg` (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: ```bash cd api-gateway && npx vitest run src/services/wacrm.service.test.ts ```