El webhook de WhatsApp no llega: las 7 causas y cómo probarlo en 30 segundos
El webhook de la API de WhatsApp no está llegando a tu servidor. Antes de tocar el código, una prueba con webhook.site te dice de qué lado está el problema. Las 7 causas más comunes, en el orden en que conviene revisarlas.
Antes de abrir el código, averigua de qué lado está el problema. Toma 30 segundos y te ahorra la tarde entera, porque "el webhook no llega" tiene dos causas completamente distintas, y depurar la equivocada no lleva a ninguna parte.
La prueba de 30 segundos
- Abre webhook.site. Genera una URL única al instante, sin registro.
- Copia esa URL.
- Configúrala como webhook de tu instancia, desde el panel o por la API.
- Envía cualquier mensaje al número conectado.
- Mira la pantalla de webhook.site.
Si el evento apareció ahí: la plataforma está enviando bien. El problema es tu servidor — salta a las causas 4 a 7.
Si no apareció: el evento no está saliendo. El problema es la configuración de la instancia — causas 1 a 3.
webhook.site además muestra el cuerpo exacto que llega, con las cabeceras. Es la forma más rápida de confirmar el formato antes de escribir cualquier parser, y puedes copiar ese JSON real para usarlo en tus pruebas.
Causa 1 — La URL no es HTTPS válido
La más común y la más molesta de descubrir, porque falla en silencio.
http://sin TLS: rechazado.- HTTPS con certificado autofirmado: rechazado.
- HTTPS con certificado vencido: rechazado.
- Certificado válido solo para el dominio sin
www, y la URL registrada conwww: rechazado.
No hay error de tu lado. Simplemente no llega nada.
Cómo comprobarlo sin salir de la terminal:
curl -sS -o /dev/null -w "%{http_code}\n" https://tu-dominio.com/webhook/wame
Si aquí da error de certificado, allá también lo dará.
Causa 2 — La instancia está desconectada
Una instancia caída no emite eventos. Parece obvio, pero es la segunda causa más frecuente, sobre todo en la API no oficial, donde la sesión puede caerse sola.
curl "https://us.api-wa.me/TU_KEY/instance"
Si el estado no es conectado, el webhook es la consecuencia, no la causa. Reconecta primero.
Causa 3 — Filtro de eventos o formato equivocado
WAME permite filtrar qué eventos envía la instancia y en qué formato. Dos trampas:
Formato. Si tu instancia está en formato meta y tu código espera el formato antiguo (o al revés), el evento llega y el parser no encuentra nada. El formato meta es el sobre estándar de la Cloud API y es el recomendado: es lo que hace que un mismo handler sirva para WhatsApp, Instagram y Messenger.
Filtro. Si solo hay algunos eventos habilitados, "mensaje recibido" puede simplemente no estar en la lista.
Revisa ambas cosas en el panel de la instancia antes de sospechar del código.
Causa 4 — Estás leyendo el campo equivocado
¿Llegó a webhook.site pero tu código no ve nada? Probablemente sea esto.
En el sobre de Meta, mensaje y estado de entrega viven en campos distintos:
{
"entry": [{
"changes": [{
"value": {
"messages": [ /* mensaje recibido */ ],
"statuses": [ /* entregado, leído, fallido */ ]
}
}]
}]
}
El evento de estado no tiene messages. El código que hace value.messages[0] directamente se rompe — o, peor, no se rompe y simplemente lo ignora todo:
// mal: un estado de entrega tumba esto o pasa desapercibido
const msg = body.entry[0].changes[0].value.messages[0];
// bien
const value = body?.entry?.[0]?.changes?.[0]?.value;
const msg = value?.messages?.[0];
if (!msg) return res.sendStatus(200); // era un estado, no un mensaje
La misma guarda vale para msg.type: el audio, la imagen y el documento no tienen text.body.
Causa 5 — Tu servidor no responde 200 rápido
Si el webhook llega duplicado, es esto. La plataforma espera confirmación; sin ella, reenvía.
El error clásico es procesar antes de responder:
// mal: el cliente recibe la respuesta 2 o 3 veces
app.post('/webhook/wame', async (req, res) => {
await llamarIA(req.body); // 3 segundos
await guardarEnBase(req.body); // uno más
res.sendStatus(200); // demasiado tarde
});
// bien
app.post('/webhook/wame', (req, res) => {
res.sendStatus(200); // primero esto
procesar(req.body).catch(console.error);
});
Si tu procesamiento es pesado, mételo en una cola y responde 200 en cuanto lo encoles.
Causa 6 — El cuerpo no se está parseando
En Express, sin express.json() el req.body llega undefined y parece que el webhook no llegó:
app.use(express.json()); // antes de las rutas
Si validas la firma, también necesitas el cuerpo crudo, y express.json() por sí solo no guarda el original:
app.use(express.json({
verify: (req, _res, buf) => { req.rawBody = buf; },
}));
Causa 7 — Firewall, proxy o WAF bloqueando
Si webhook.site recibe y tu servidor no, y ya descartaste las causas anteriores, algo en el medio está bloqueando: una regla de firewall, Cloudflare en modo agresivo, un WAF rechazando POST de origen desconocido, o un proxy que exige autenticación.
Pruébalo enviando un POST desde fuera, simulando a la plataforma:
curl -X POST https://tu-dominio.com/webhook/wame \
-H "Content-Type: application/json" \
-d '{"object":"wame","provider":"whatsapp","entry":[{"changes":[{"value":{"messages":[{"from":"525512345678","type":"text","text":{"body":"prueba"}}]}}]}]}' \
-i
Si eso no llega a tu handler, el problema está en la infraestructura y no en la aplicación.
El orden que ahorra tiempo
- Probar con webhook.site — decide de qué lado está.
- Si no llegó ahí: HTTPS, instancia conectada, filtro y formato.
- Si sí llegó: campo correcto, 200 rápido, parser del cuerpo, firewall.
Casi todos los casos caen en una de esas siete. Seguir el orden evita el escenario más común de todos: pasar dos horas revisando el parser cuando la instancia estaba desconectada.
Después de que vuelva a funcionar
Un webhook que llega no es lo mismo que un webhook confiable. Antes de ponerle carga encima, revisa la firma, la reentrega y el mensaje procesado dos veces — son los problemas que solo aparecen con volumen.
¿Listo para automatizar tu WhatsApp?
Crea tu cuenta gratis y empieza a enviar mensajes por la API en minutos.
Empezar gratisPreguntas frecuentes
¿Cómo probar si el webhook de WhatsApp se está enviando?+
Abre webhook.site, copia la URL única que genera, configúrala como webhook de tu instancia y envía un mensaje al número. Si el evento aparece en la pantalla de webhook.site, la plataforma está enviando correctamente y el problema está en tu servidor. Si no aparece, el problema es la configuración de la instancia.
¿Por qué mi webhook recibe estados de entrega pero no mensajes?+
Casi siempre es un filtro de eventos o un campo equivocado. Los mensajes llegan en entry[0].changes[0].value.messages[0]; los estados de entrega llegan en value.statuses, y es habitual que el código trate ambos como si fueran lo mismo.
El webhook llega duplicado. ¿Por qué?+
Porque tu endpoint tardó en responder 200. Toda plataforma de webhooks reenvía cuando no recibe confirmación rápida. La corrección es responder 200 de inmediato y procesar después, de forma asíncrona, nunca dejar el procesamiento pesado antes de la respuesta.
¿El webhook funciona en localhost?+
No directamente: la plataforma necesita alcanzar tu URL por internet. En desarrollo usa ngrok, cloudflared o similar para exponer el puerto local con una URL pública HTTPS, y configura esa URL como webhook.
¿Necesito HTTPS en el webhook?+
Sí, con certificado válido. Una URL http:// o un HTTPS con certificado autofirmado o vencido se rechaza en silencio: el envío falla y no aparece ningún error de tu lado, lo que hace que esta sea una de las causas que más tiempo cuesta descubrir.
Sigue leyendo
API de Instagram y Messenger en la misma API de WhatsApp: una instancia, un estándar
Tres canales oficiales de Meta casi siempre significan tres integraciones. Con una sola instancia, el mismo envío y el mismo sobre de webhook, solo cambia un campo: provider. Cómo funciona y qué te ahorra.
API no oficial de WhatsApp: qué es, si es segura y cómo usarla (2026)
Entiende qué es una API no oficial de WhatsApp, cómo funciona la conexión por código QR, si es segura y legal, cuál es el riesgo real de bloqueo y cuándo conviene usarla en lugar de la API oficial.
API oficial vs no oficial de WhatsApp: ¿cuál elegir? (comparativa 2026)
Comparativa completa entre la API oficial de WhatsApp (Cloud API de Meta) y la API no oficial: costo, aprobación, límites de envío, plantillas, soporte y riesgo de bloqueo. Descubre cuál tiene sentido para tu caso.