Qué corres
El core es el repositorio público Hub-Ventures/watahub, también publicado comowatahub en npm (0.2.0). Corre en Cloudflare Workers o en Node.js 20+. La licencia es MIT.
Configuras el secreto de tu app de Meta, un token de verificación del webhook y una clave API de Watahub de 32 caracteres o más. El gateway guarda el token de Meta de cada línea y nunca lo devuelve. Tu agente recibe cada evento normalizado en SUBSCRIBER_WEBHOOK_URL y responde con POST /v1/messages contra tu host del gateway, no contra https://cloud.watahub.dev.
Primera ejecución local
Necesitas Node.js 20 o posterior, pnpm (corepack enable usa la versión fijada en el repositorio) y una app de Meta con el producto WhatsApp.
WATAHUB_API_KEY y SUBSCRIBER_WEBHOOK_SECRET:
.env. El gateway lee process.env y no carga .env por sí solo, así que arráncalo con --env-file de Node:
status ok, service watahub y version 0.2.0.
El recorrido completo —app de Meta, primer envío, primer webhook de entrada y Embedded Signup— está en la guía Getting started del core. Para Cloudflare Workers, Node, Docker o un proxy inverso, usa Deployment.
Conectar una línea
En Self-host terminas una línea conPOST /v1/onboarding/connect (el código de Embedded Signup, el id del WABA, el id del número y el PIN) o con un token de system user en META_SYSTEM_USER_TOKEN. Consulta Getting started.
Los clientes de Cloud usan enlaces de conexión alojados. Esas páginas no aplican aquí.
Webhooks
El core reenvía un POST firmado por cada entrega de Meta a tu única URL de suscriptor. Las cabeceras sonx-watahub-signature (sha256= más el HMAC-SHA256 hexadecimal en minúsculas del cuerpo exacto, con SUBSCRIBER_WEBHOOK_SECRET), x-watahub-delivery-id e Idempotency-Key (el mismo valor que el id de entrega). Deduplica con x-watahub-delivery-id. El catálogo de eventos está en Webhooks and events.
No sigas la página de webhooks de Cloud para esto. Esa página documenta los webhooks de desarrollador en cloud.watahub.dev: X-Webhook-Event, X-Webhook-Signature sin prefijo sha256= y X-Idempotency-Key. Un destino administrativo antiguo de Cloud puede parecerse al suscriptor del core; no es la guía de Self-host.