CONFIGURACIÓN WHATSAPP

Sidecar WhatsApp — Manual de configuración v1.0

VOLVER

Requisitos Previos

Software

  • Node.js 18+
  • npm o yarn
  • Fararoni Core ejecutándose (puerto 7071)

Hardware

  • Teléfono con WhatsApp instalado
  • Conexión a internet estable

Instalación

# 1. Navegar al directorio del sidecar
cd fararoni-sidecar-wa

# 2. Instalar dependencias
npm install

# 3. Copiar configuración de ejemplo
cp .env.example .env

# 4. Editar configuración
nano .env

Configuración (.env)

# URL del Gateway REST de Fararoni
GATEWAY_URL=http://localhost:7071/gateway/v1/inbound

# Puerto del servidor HTTP para recibir respuestas
SIDECAR_PORT=3000

# Nivel de log (debug, info, warn, error)
LOG_LEVEL=info

# Modo de operación
# private_only = Solo responde en chats privados
# groups_only = Solo responde en grupos
# all = Responde en todos (CUIDADO)
CHAT_MODE=private_only

Primera Ejecución (Vincular WhatsApp)

node sidecar.js

Aparecerá un código QR en la terminal. Pasos para vincular:

  1. Abrir WhatsApp en tu teléfono
  2. Ir a Configuración → Dispositivos vinculados
  3. Tocar Vincular un dispositivo
  4. Escanear el código QR de la terminal

Una vez vinculado:

[SIDECAR] ✅ WhatsApp conectado como: +52 1 229 XXX XXXX
[SIDECAR] 🚀 Servidor HTTP escuchando en puerto 3000
[SIDECAR] 📡 Listo para recibir y enviar mensajes

Arquitectura de Flujo

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Usuario       │     │   Sidecar WA    │     │  Fararoni Core  │
│   WhatsApp      │     │   (Node.js)     │     │   (Java)        │
└────────┬────────┘     └────────┬────────┘     └────────┬────────┘
         │                       │                       │
         │  Mensaje entrante     │                       │
         │──────────────────────>│                       │
         │                       │  POST /gateway/v1/inbound
         │                       │──────────────────────>│
         │                       │                       │ Procesa con LLM
         │                       │  POST /send           │
         │                       │<──────────────────────│
         │  Mensaje de respuesta │                       │
         │<──────────────────────│                       │

Endpoints del Sidecar

MétodoPathDescripción
POST/sendEnviar mensaje (usado por Fararoni)
GET/healthHealth check
GET/statusEstado de conexión WhatsApp

Configuración en Fararoni Core

Archivo: ~/.fararoni/config/modules.yml

gateway:
  rest:
    enabled: true
    port: 7071

channels:
  whatsapp:
    enabled: true
    egress_url: "http://localhost:3000/send"
    allowed_numbers: []  # Vacío = todos permitidos
    blocked_numbers: []

Comandos Útiles

# Iniciar Fararoni Core
cd fararoni-core/target
java --enable-preview -jar fararoni-core-1.0.0.jar --server

# Iniciar Sidecar WhatsApp (otra terminal)
cd fararoni-sidecar-wa
node sidecar.js

# Ver logs en tiempo real
tail -f ~/.fararoni/logs/fararoni.log

# Reiniciar sesión WhatsApp (borrar credenciales)
rm -rf fararoni-sidecar-wa/baileys_auth_info/
node sidecar.js  # Escaneará QR de nuevo

Troubleshooting

No aparece código QR

rm -rf node_modules
npm install

Desconexión frecuente

  • Verificar conexión a internet
  • No usar WhatsApp Web en el navegador al mismo tiempo
  • Revisar si el teléfono tiene batería suficiente

Mensajes no llegan a Fararoni

# Verificar que Fararoni esté corriendo
curl http://localhost:7071/gateway/v1/health

Seguridad

Credenciales de WhatsApp

  • NUNCA subir baileys_auth_info/ a git
  • Ya está en .gitignore
  • Contiene tokens de sesión sensibles

Números bloqueados

# En modules.yml
channels:
  whatsapp:
    blocked_numbers:
      - "5212291234567"  # Bloquear número específico

Filtro de grupos

RESUELTO: Robot ya NO responde en grupos (FASE 71.4)

// FASE 71.4: Ignorar mensajes de grupos
if (msg.key.remoteJid.endsWith('@g.us')) {
  logger.debug(`[INGRESS] Ignorando mensaje de grupo: ${msg.key.remoteJid}`);
  return;
}
SufijoTipoComportamiento
@s.whatsapp.netChat privado (1:1)✅ Responde
@g.usGrupo❌ Ignora
status@broadcastEstados❌ Ignora

Habilitar grupos específicos (futuro)

const ALLOWED_GROUPS = [
  '5212291234567-1234567890@g.us',
  '5212299876543-0987654321@g.us'
];

if (msg.key.remoteJid.endsWith('@g.us')) {
  if (!ALLOWED_GROUPS.includes(msg.key.remoteJid)) {
    return;
  }
}

Autor: Eber Cruz | Versión: 1.0

Secure Terminal Access

INICIALIZAR_COLABORACION

¿Quieres sumarte al proyecto? Interfaz terminal segura para desarrolladores y perfiles técnicos.

fararoni_secure_shell — bash
SISTEMA: ESPERANDO ENTRADA
System check: OK
> INICIALIZAR_COLABORACION...
root@fararoni:~$input_email
root@fararoni:~$set_sector
root@fararoni:~$set_operator
root@fararoni:~$define_mission
root@fararoni:~$Escribe 'help' para ver comandos disponibles
root@fararoni:~$
CONEXIÓN ENCRIPTADA ESTABLECIDA vía TLS 1.3