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>
This commit is contained in:
@@ -1,38 +1,78 @@
|
|||||||
# Configuracion de WhatsApp — Evolution API
|
# Configuración de WhatsApp — Baileys Bridge
|
||||||
|
|
||||||
## Requisitos
|
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).
|
||||||
- Docker instalado en el servidor
|
|
||||||
- Puerto 8080 disponible
|
|
||||||
|
|
||||||
## Instalacion
|
## Arquitectura
|
||||||
1. `cd /home/Autopartes/docker`
|
|
||||||
2. `docker-compose -f docker-compose.evolution.yml up -d`
|
|
||||||
3. Esperar ~30 segundos a que inicie
|
|
||||||
|
|
||||||
## Crear base de datos para Evolution
|
```
|
||||||
```bash
|
Refaccionaria → WhatsApp Web
|
||||||
PGPASSWORD=nexus_autoparts_2026 psql -U nexus -h localhost -c "CREATE DATABASE evolution_api OWNER nexus;"
|
↓
|
||||||
|
/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
|
- **Bridge puerto:** 21465 (local)
|
||||||
1. Ir a /pos/whatsapp en el POS
|
- **Flask webhook:** `http://localhost:5001/pos/api/whatsapp/webhook`
|
||||||
2. Click "Conectar WhatsApp"
|
- **Auth state:** `/opt/whatsapp-bridge/auth/` (creds + pre-keys; sobrevive reinicios)
|
||||||
3. Escanear el QR con tu telefono (WhatsApp > Dispositivos vinculados > Vincular)
|
|
||||||
4. Listo — los mensajes empiezan a llegar
|
|
||||||
|
|
||||||
## Notas
|
## Instalación (servidor nuevo)
|
||||||
- Cada refaccionaria puede conectar su propio numero
|
|
||||||
- La sesion se mantiene mientras el Docker este corriendo
|
1. Copiar `server.js` y `package.json` a `/opt/whatsapp-bridge/`
|
||||||
- Si el telefono pierde internet por >14 dias, hay que re-escanear
|
2. `cd /opt/whatsapp-bridge && npm install`
|
||||||
- El nombre de la instancia se deriva del nombre de base de datos del tenant
|
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
|
```bash
|
||||||
EVOLUTION_API_URL=http://localhost:8080 # URL de Evolution API
|
# Estado del bridge
|
||||||
EVOLUTION_API_KEY=nexus-evolution-key-2026 # API key configurada en docker-compose
|
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
|
## 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
|
| Síntoma | Verificar |
|
||||||
- Logs: `docker logs evolution-api`
|
|---|---|
|
||||||
|
| 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.
|
||||||
|
|||||||
Reference in New Issue
Block a user