Varela Insights
📚 Archivo. Este contenido se publicó originalmente en el blog de Varela Insights y se conserva en su dirección original. El contenido nuevo vive en varelainsights.com/blog.

Cómo Construir un Bot de Facebook Messenger sin API Oficial (Caso Real)

Publicado el 12 ene 2026 · Irving Varela
Cómo Construir un Bot de Facebook Messenger sin API Oficial (Caso Real)

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:

Arquitectura del Sistema

El sistema opera en dos servidores VPS:

VPS1 (Monitor): Ejecuta el bot de Puppeteer que: VPS2 (Procesamiento): Ejecuta el workflow de n8n que:

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:

  1. Webhook Trigger: Recibe POST con estructura `{sender, message, timestamp}`
  2. Extracción de Datos: Valida y normaliza la información
  3. Generación de Respuesta: Crea respuesta contextual usando reglas de negocio
  4. Notificación Telegram: Alerta al equipo sobre el nuevo mensaje
  5. 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

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:

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.

🌐 varelainsights.com 📧 cognitive@varelainsights.com

Audita la visibilidad de tu negocio en IA →