Files
Autoparts-DB/docs/WHATSAPP-SETUP.md
consultoria-as b70cb3042b docs(whatsapp): actualizar setup a Baileys bridge con systemd
La doc previa describía Evolution API, pero el stack real desde abril
es Baileys directo en /opt/whatsapp-bridge/. Se documenta el systemd
unit que ahora supervisa el proceso y se agrega troubleshooting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 06:23:10 +00:00

3.2 KiB

Configuración de WhatsApp — Baileys Bridge

El POS se conecta a WhatsApp mediante un bridge Node.js directo (Baileys) que vive en /opt/whatsapp-bridge/. No usa Evolution API ni Meta Cloud API (ambos fueron reemplazados en abril 2026).

Arquitectura

Refaccionaria → WhatsApp Web
                     ↓
         /opt/whatsapp-bridge/server.js  ← Baileys (Node 20)
                     ↓ webhook HTTP
         Flask POS /pos/api/whatsapp/webhook  (puerto 5001)
                     ↓
              IA + inventario + cotizador
                     ↓ send HTTP
         bridge → WhatsApp Web → cliente
  • Bridge puerto: 21465 (local)
  • Flask webhook: http://localhost:5001/pos/api/whatsapp/webhook
  • Auth state: /opt/whatsapp-bridge/auth/ (creds + pre-keys; sobrevive reinicios)

Instalación (servidor nuevo)

  1. Copiar server.js y package.json a /opt/whatsapp-bridge/
  2. cd /opt/whatsapp-bridge && npm install
  3. Instalar la unidad systemd: cp docs/systemd/whatsapp-bridge.service /etc/systemd/system/ (o usar la ya presente en /etc/systemd/system/whatsapp-bridge.service)
  4. systemctl daemon-reload && systemctl enable --now whatsapp-bridge
  5. Vincular WhatsApp (ver siguiente sección)

Vincular número de WhatsApp

  1. Abrir /pos/whatsapp en el POS
  2. Click en "Conectar WhatsApp"
  3. Escanear el QR con el teléfono (WhatsApp → Dispositivos vinculados → Vincular)
  4. La sesión queda guardada en /opt/whatsapp-bridge/auth/ — no hay que re-escanear mientras el teléfono se conecte a internet cada ~14 días.

Operación

# Estado del bridge
systemctl status whatsapp-bridge

# Reiniciar (p. ej. tras actualizar server.js)
systemctl restart whatsapp-bridge

# Logs en vivo
journalctl -u whatsapp-bridge -f
# o el archivo plano:
tail -f /var/log/whatsapp-bridge.log

Endpoints del bridge (localhost:21465)

Método Path Uso
GET /status Estado de conexión (disconnected, connecting, qr, open)
GET /qr QR en base64 para escanear
POST /connect Forzar inicio de conexión
POST /send {phone, message} → enviar texto
POST /logout Cerrar sesión

Troubleshooting

Síntoma Verificar
POS dice "error" al consultar estado systemctl status whatsapp-bridge — si está "inactive" → systemctl start whatsapp-bridge
Puerto 21465 no escucha ss -tlnp | grep 21465 — si vacío, el proceso Node crasheó; ver journalctl -u whatsapp-bridge -n 100
QR no aparece Probable que ya esté vinculado → /status debe decir open
Mensajes llegan pero no responde Verificar que Flask esté escuchando en 5001 y revisar logs del webhook con prefix [WA-AI]
Tras actualizar server.js no toma cambios systemctl restart whatsapp-bridge
"Invalid mex newsletter notification" en logs Ruido normal de Baileys (warn), ignorar

Notas

  • Cada refaccionaria conecta su propio número; la sesión vive en el servidor local (mini rack).
  • Si el teléfono pierde internet por >14 días, WhatsApp desvincula el dispositivo y hay que re-escanear.
  • server.js usa CommonJS (package.json tiene "type": "commonjs"). No hay variante .mjs — fue removida en abril 2026.