WhatsApp · Arquitectura

Arquitectura — WhatsApp send system

Resumen interno del sistema. Para detalle completo ver el spec 2026-05-18-whatsapp-baileys-design.md.

Componentes

  • Yii2 backend — orquestador. Facade Yii::$app->whatsapp. Maneja modelos, panel UI, webhook público y callbacks internos.
  • whatsapp-service/ (Node 18+) — mantiene los sockets Baileys (1 por empresa, lazy), consume Bull queue, postea callbacks HMAC.

Comunicación

  • Yii2 → Node: Bull queue whatsapp-sends (Redis) para envíos. HTTP REST /sessions/:id/* para management.
  • Node → Yii2: POST a /internal/whatsapp/callback con header X-Excucha-Signature: hmac_sha256(body, INTERNAL_SECRET).

Tablas

  • whatsapp_sessions (1:1 con empresas) — credenciales + status + webhook_secret
  • whatsapp_envios — outbound, idempotencia con UNIQUE(empresa_id, envio_id_externo)
  • whatsapp_inbound_log — mensajes entrantes (para auto-reply y futuro conversacional)
  • whatsapp_templates — jerarquía empresa default + override por encuesta

Throttling

  • 1 mensaje/segundo por sesión + jitter 200-800ms
  • Daily cap configurable por empresa (default 250)
  • Gate de entitlement whatsapp_responses_monthly antes de encolar

Reconexión

  • Backoff exponencial (1s, 5s, 30s, 2min, 10min)
  • loggedOut → status=logged_out, email al admin, banner UI
  • Idle eviction tras 30 min sin actividad → unload memoria (datos en MySQL)