Eventos en tiempo real

Integrar WhatsApp con Webhook

El webhook es el mecanismo más simple de integración servidor a servidor: en lugar de que tu sistema esté preguntando todo el tiempo si llegó algo nuevo, recibe una solicitud HTTP POST en el momento exacto en que ocurre un evento. Expones una URL pública (un endpoint en tu backend) y el proveedor entrega el payload del evento ahí. Es el patrón que usan prácticamente todas las plataformas modernas para notificar mensajes recibidos, cambios de estado de entrega, actualizaciones de pago y similares, sin polling y con latencia muy baja.

Por qué conectar

Conectar ZapZap API a tu propio webhook resuelve los dos lados de WhatsApp de forma limpia: la recepción llega empujada a tu servidor y el envío sale por REST. Imagina un e-commerce que quiere responder al instante cuando el cliente escribe "dónde está mi pedido" por WhatsApp. Sin webhook, tu sistema tendría que consultar la API en bucle y perderías latencia y procesamiento por nada. Con webhook, ZapZap API dispara un POST a tu endpoint en el instante en que llega el mensaje, tu backend consulta el pedido en la base de datos y responde llamando al endpoint de envío de ZapZap API, todo en segundos. Como el número corre en una instancia administrada con calentamiento en comunidad y una capa antibloqueo, reduces el riesgo de caída y mantienes el control total del flujo en tu código. Cada número activo cuesta R$15 por mes, prepago, y empiezas con un crédito de bienvenida al crear la cuenta, sujeto a la campaña vigente. Prueba la integración antes de escalar.

Paso a paso

  1. 1

    Crea el endpoint que recibirá los eventos

    En tu backend, expón una ruta pública que acepte POST, por ejemplo POST https://tusistema.com/webhooks/zapzap. Debe leer el cuerpo JSON de la solicitud y responder rápido con un status 2xx (200 o 204). Responder fuera del rango 2xx hace que el evento se trate como fallo y se reenvíe. Si todavía no tienes una URL pública en desarrollo, levanta un túnel con ngrok (ngrok http 3000) y usa la URL https generada.

  2. 2

    Deja el endpoint accesible e idempotente

    Asegúrate de que la URL responda por HTTPS y que ninguna autenticación bloquee el POST del proveedor (o permite la IP/ruta del webhook). Trata el payload como potencialmente duplicado: guarda el ID del evento o del mensaje e ignora las reentregas ya procesadas. Así, si el mismo evento llega dos veces por un reintento, no respondes al cliente por duplicado.

  3. 3

    Registra la URL del webhook en tu instancia de ZapZap API

    En el panel de ZapZap API, abre la instancia de WhatsApp y entra en la sección de Webhook. Pega la URL de tu endpoint y selecciona los eventos que quieres recibir, como mensaje recibido y estado de entrega. Guarda. Desde ahí, cada evento de esa instancia se entregará en tu endpoint. Los nombres exactos de los eventos y el formato del payload están en la documentación en https://api.zapzapapi.com/llms.txt.

  4. 4

    Procesa el evento y dispara la respuesta por REST

    Cuando llegue el POST, extrae del cuerpo el número del remitente y el texto del mensaje. Ejecuta tu lógica (consultar un pedido, activar una IA, guardar en el CRM) y responde llamando al endpoint de envío de ZapZap API con los headers x-api-key y x-api-secret. Devuelve siempre 2xx en el webhook, aunque el procesamiento pesado continúe en segundo plano, para no trabar la cola de entrega.

  5. 5

    Prueba de punta a punta en producción

    Envía un mensaje real al número de la instancia y confirma en los logs de tu servidor que el POST llegó con el payload esperado. Luego valida que la respuesta automática salió por WhatsApp. Monitorea los logs de entrega del webhook en el panel: las entregas non-2xx quedan registradas para diagnóstico, así que ahí investigas si tu endpoint rechazó algún evento.

Ejemplo

// Tu endpoint recibe el evento (Express)
app.post('/webhooks/zapzap', (req, res) => {
  res.sendStatus(200); // responde 2xx primero
  const { numero, texto } = req.body; // campos ILUSTRATIVOS, ver doc
  // tu logica aqui, luego responde por WhatsApp:
});

// Enviar respuesta por REST (campos exactos en la doc)
fetch('https://api.zapzapapi.com/api/v1/{instanceId}/send/text', {
  method: 'POST',
  headers: {
    'x-api-key': 'TU_API_KEY',
    'x-api-secret': 'TU_API_SECRET',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ numero: '5511999999999', texto: '¡Recibido!' })
});
// Estructura exacta de rutas y campos: https://api.zapzapapi.com/llms.txt

Ilustrativo. Los campos y endpoints exactos están en la documentación.

Preguntas frecuentes

¿Necesito un servidor propio para usar un webhook?

Sí, el webhook exige una URL pública que acepte POST. Puede ser un backend tuyo (Node, PHP, Python), una función serverless o un flujo en herramientas como n8n y Make. En desarrollo, puedes usar un túnel como ngrok para exponer localhost.

¿Cuál es la diferencia entre recibir por webhook y enviar por REST?

Son los dos sentidos de la conversación. El webhook es ZapZap API empujando eventos hacia tu sistema (mensaje recibido, estado de entrega). El REST es tu sistema llamando a ZapZap API para enviar mensajes. Usas los dos juntos para armar respuestas automáticas.

¿Qué pasa si mi endpoint está caído cuando llega un evento?

Si tu endpoint no responde con status 2xx, la entrega se registra como fallo. Por eso conviene responder 2xx rápido y procesar el resto en segundo plano, además de tratar el payload como posiblemente duplicado para manejar reentregas sin procesar el mismo evento dos veces.

¿Cuánto cuesta y cómo funciona la autenticación?

Cada número activo cuesta R$15 por mes, prepago, y empiezas con un crédito de bienvenida al crear la cuenta, sujeto a la campaña vigente. La recepción por webhook se configura en el panel de la instancia. Las llamadas REST de envío usan los headers x-api-key y x-api-secret, generados en tu cuenta.

¿Dónde encuentro los nombres exactos de los eventos y campos del payload?

En la documentación en https://api.zapzapapi.com/llms.txt. Los ejemplos de esta guía son ilustrativos para mostrar el flujo; los nombres reales de eventos, rutas y campos están en la documentación, que es la fuente oficial.

Empieza ahora

Crea tu cuenta, conecta un número en minutos y prueba la API con calentamiento y anti-bloqueo. R$15 por número activo/mes, prepago, sin permanencia.