From b70cb3042bd461dfb254db44d35f32fbfd599bbf Mon Sep 17 00:00:00 2001 From: consultoria-as Date: Tue, 21 Apr 2026 06:23:10 +0000 Subject: [PATCH] docs(whatsapp): actualizar setup a Baileys bridge con systemd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- docs/WHATSAPP-SETUP.md | 94 ++++++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 27 deletions(-) diff --git a/docs/WHATSAPP-SETUP.md b/docs/WHATSAPP-SETUP.md index 56ac4c8..64a1258 100644 --- a/docs/WHATSAPP-SETUP.md +++ b/docs/WHATSAPP-SETUP.md @@ -1,38 +1,78 @@ -# Configuracion de WhatsApp — Evolution API +# Configuración de WhatsApp — Baileys Bridge -## Requisitos -- Docker instalado en el servidor -- Puerto 8080 disponible +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). -## Instalacion -1. `cd /home/Autopartes/docker` -2. `docker-compose -f docker-compose.evolution.yml up -d` -3. Esperar ~30 segundos a que inicie +## Arquitectura -## Crear base de datos para Evolution -```bash -PGPASSWORD=nexus_autoparts_2026 psql -U nexus -h localhost -c "CREATE DATABASE evolution_api OWNER nexus;" +``` +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 ``` -## Conectar WhatsApp -1. Ir a /pos/whatsapp en el POS -2. Click "Conectar WhatsApp" -3. Escanear el QR con tu telefono (WhatsApp > Dispositivos vinculados > Vincular) -4. Listo — los mensajes empiezan a llegar +- **Bridge puerto:** 21465 (local) +- **Flask webhook:** `http://localhost:5001/pos/api/whatsapp/webhook` +- **Auth state:** `/opt/whatsapp-bridge/auth/` (creds + pre-keys; sobrevive reinicios) -## Notas -- Cada refaccionaria puede conectar su propio numero -- La sesion se mantiene mientras el Docker este corriendo -- Si el telefono pierde internet por >14 dias, hay que re-escanear -- El nombre de la instancia se deriva del nombre de base de datos del tenant +## 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 -## Variables de entorno (opcionales) ```bash -EVOLUTION_API_URL=http://localhost:8080 # URL de Evolution API -EVOLUTION_API_KEY=nexus-evolution-key-2026 # API key configurada en docker-compose +# 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 -- Si el QR no aparece, verificar que el contenedor este corriendo: `docker ps` -- Si el webhook no recibe mensajes, verificar que WEBHOOK_GLOBAL_URL apunte al servidor Flask -- Logs: `docker logs evolution-api` + +| 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.