Evento de WhatsApp

Mismo endpoint, cabeceras y política de reintentos que Messenger, con page.channel: whatsapp y los campos propios del canal en page y en message.

Adjuntos. Una imagen, audio, vídeo, documento o sticker se guarda en Resender y el evento sale cuando el archivo ya está disponible: llega una sola vez, con details.status: available y en attachment.url un link firmado que se abre sin cabeceras durante 24 h (details.urlExpiresAt). Ver downloadWhatsappMedia.

  • Si el archivo no se pudo bajar de WhatsApp, o no estuvo listo en 2 minutos, el evento sale igual con details.status: failed y url: null. El texto y el resto del mensaje llegan completos.
  • unavailable (WhatsApp no ofreció el archivo) y deleted también llegan con url: null.
  • Ubicación, contactos, reacción, respuesta interactiva, pedido y evento de sistema no tienen archivo: url: null y sin details.status.
  • El pie de foto es message.text.

Orden. Los mensajes de una misma conversación llegan en el orden en que se escribieron. Uno no sale mientras el anterior esté esperando su archivo o reintentándose. Un mensaje que Meta nos entrega tarde, con hora anterior a uno ya enviado, sale apenas llega: ordená por message.createdAt si necesitás el orden exacto.

Ecos. En Coexistence, lo que el negocio escribe desde la app de WhatsApp Business llega con direction: outbound y origin: business_app. Filtralos para que tu bot no se responda a sí mismo. El historial importado al conectar no se reenvía.

Header Parameters

resender-event-id?string

Id determinista del evento. El mismo evento reingerido trae el mismo id; usalo para deduplicar.

Match^evt_[0-9a-f]{32}$
resender-timestamp?string

Epoch en segundos del momento de la firma.

Match^[0-9]+$
resender-signature?string

v1= + HMAC-SHA256 hex. Ver WebhookSignature.

Match^v1=[0-9a-f]{64}$

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/whatsappEvents