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/callbackcon headerX-Excucha-Signature: hmac_sha256(body, INTERNAL_SECRET).
Tablas
whatsapp_sessions(1:1 con empresas) — credenciales + status + webhook_secretwhatsapp_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_monthlyantes 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)