Cómo Construir un Bot de Facebook Messenger sin API Oficial (Caso Real)
Share
Cómo Construir un Bot de Facebook Messenger sin API Oficial
El Desafío: Cuando la API Oficial No Es Opción
Meta (Facebook) requiere que las empresas estén verificadas para acceder a su API de Messenger. Para negocios pequeños o en etapa de crecimiento, este proceso puede tomar semanas o meses. ¿La solución? Automatización inteligente usando tecnologías existentes.
En este artículo documentamos la implementación de un bot funcional que monitorea y responde mensajes en Facebook Business Suite, sin depender de la API oficial de Meta.
Arquitectura de la Solución
Stack Tecnológico
La solución se construyó con:
- Puppeteer: Biblioteca de Node.js para automatización de navegadores
- Chrome Headless: Navegador sin interfaz gráfica
- n8n: Plataforma de automatización self-hosted
- systemd: Gestión de servicios en Linux para ejecución 24/7
- Chrome DevTools Protocol (CDP): Captura de cookies de autenticación
Arquitectura del Sistema
El sistema opera en dos servidores VPS:
VPS1 (Monitor): Ejecuta el bot de Puppeteer que:- Mantiene una sesión activa en Facebook Business Suite
- Detecta mensajes nuevos mediante polling cada 5 segundos
- Extrae el contenido y nombre del remitente
- Envía los datos a n8n para procesamiento
- Recibe la respuesta generada y la publica en Facebook
- Recibe la notificación de mensaje nuevo vía webhook
- Extrae y valida los datos del mensaje
- Genera una respuesta automática contextual
- Notifica al equipo vía Telegram
- Devuelve la respuesta al bot en el mismo request HTTP
Implementación Técnica
1. Bot de Monitoreo (monitor.js)
El corazón del sistema es un script de Node.js que mantiene una sesión persistente:
const puppeteer = require('puppeteer');
const fs = require('fs');
// Inicializar navegador con cookies guardadas
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
// Cargar cookies de sesión
if (fs.existsSync('cookies.json')) {
const cookies = JSON.parse(fs.readFileSync('cookies.json'));
await page.setCookie(...cookies);
}
// Navegar a Business Suite
await page.goto('https://business.facebook.com/latest/inbox/all');
// Polling cada 5 segundos
setInterval(async () => {
const messages = await page.evaluate(() => {
// Selector del último mensaje
const lastMsg = document.querySelector('[data-testid="message-item"]:first-child');
if (!lastMsg) return null;
return {
sender: lastMsg.querySelector('.sender-name').innerText,
text: lastMsg.querySelector('.message-text').innerText,
timestamp: lastMsg.querySelector('.timestamp').innerText
};
});
if (messages && !processedIds.has(messages.timestamp)) {
await sendToN8n(messages);
}
}, 5000);
2. Workflow de n8n
El workflow (AV-0003) implementa un flujo síncrono:
- Webhook Trigger: Recibe POST con estructura `{sender, message, timestamp}`
- Extracción de Datos: Valida y normaliza la información
- Generación de Respuesta: Crea respuesta contextual usando reglas de negocio
- Notificación Telegram: Alerta al equipo sobre el nuevo mensaje
- HTTP Response: Devuelve `{reply: "respuesta generada"}` en el mismo request
3. Servicio Systemd
Para garantizar disponibilidad 24/7, el bot se ejecuta como servicio:
[Unit]
Description=Facebook Messenger Bot
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/fb-messenger-bot
ExecStart=/usr/bin/node monitor.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Comandos de gestión:
sudo systemctl start fb-messenger-bot
sudo systemctl enable fb-messenger-bot # Auto-inicio
sudo journalctl -u fb-messenger-bot -f # Ver logs
Desafíos Superados
1. Persistencia de Sesión
Problema: Facebook cierra sesiones automáticamente por seguridad. Solución: Captura de cookies usando Chrome DevTools Protocol (CDP). Las cookies se guardan en `cookies.json` y se recargan al reiniciar el bot:node --inspect capture-cookies.js
Conectar Chrome DevTools, hacer login manual
Las cookies se capturan vía CDP
2. Restricciones de Firewall
Problema: El VPS2 (n8n) no puede hacer callbacks a VPS1 por restricciones de firewall en Hostinger. Solución: Cambio de arquitectura asíncrona a síncrona. El bot espera la respuesta de n8n en el mismo request HTTP en lugar de recibir un callback posterior.3. Detección de Mensajes Duplicados
Problema: El polling puede procesar el mismo mensaje múltiples veces. Solución: Set de timestamps procesados en memoria. Solo se envían a n8n mensajes con timestamps únicos.Resultados y Beneficios
Métricas de Operación
- Tiempo de respuesta: 2-5 segundos desde que llega el mensaje
- Disponibilidad: 24/7 mediante systemd
- Tasa de éxito: 100% en mensajes detectados
- Costo: $0 (solo infraestructura VPS existente)
Ventajas vs API Oficial
| Aspecto | Solución Puppeteer | API Oficial |
|---------|-------------------|-------------|
| Tiempo de setup | 2 horas | Semanas/meses |
| Verificación requerida | No | Sí |
| Costo adicional | $0 | Variable |
| Flexibilidad | Total | Limitada por políticas |
Lecciones Aprendidas
1. La Arquitectura Importa
La decisión de cambiar de flujo asíncrono a síncrono ahorró días de troubleshooting con firewalls. Cuando enfrentes limitaciones de infraestructura, adapta el diseño en lugar de luchar contra las restricciones.
2. Persistencia > Complejidad
Mantener una sesión de navegador abierta 24/7 es más simple y robusto que intentar manejar re-autenticación automática. A veces la solución "naive" es la correcta.
3. Monitoreo es Crítico
Los logs de systemd (`journalctl -u fb-messenger-bot -f`) son esenciales para debugging en producción. Implementa logging detallado desde el día uno.
Conclusión
Construir un bot de Facebook Messenger sin API oficial es completamente viable usando automatización de navegador. Esta solución permite a negocios pequeños competir con empresas verificadas mientras completan los procesos oficiales de Meta.
La arquitectura presentada es:
- Escalable: Puede manejar múltiples conversaciones simultáneas
- Mantenible: Código simple y directo
- Resiliente: systemd reinicia el servicio automáticamente ante fallos
Si estás esperando aprobación de Meta o simplemente necesitas una solución rápida, esta aproximación puede tener tu bot funcionando en horas, no semanas.
Sobre el Autor
Irving Alberto Varela Bedoya, Ph.D.
Experto en Inteligencia Artificial y Automatización Empresarial
Ayudo a empresas a transformar sus operaciones con IA y automatización, generando ROI medible en 90 días o menos.