Skip to main content
El webhook y el WebSocket comparten el mismo envoltorio y el mismo catálogo de eventos. La única diferencia es el canal de entrega, data es idéntico. Esta página documenta los 6 tipos: message.exchange, message.status, call.update, group.flow, instance.state y label.update.

Envoltorio

El filtrado se hace por el nombre del event en el campo events de la configuración. Vacío = todos los tipos.

Filtrado y enrutamiento

Cuando byEvents=true (solo webhook), el nombre del evento se agrega a la URL:
  • Configuración: url: "https://app/wh", byEvents: true
  • Entrega: POST https://app/wh/message.exchange
Útil para enrutamiento basado en endpoints sin inspeccionar el payload.

message.exchange

Mensajes enviados y recibidos (texto, media, sticker, documento, audio, encuesta, contacto, ubicación, etc.), ediciones y revocaciones.

Payload

Campos condicionales

Solo se completan los campos relevantes para el tipo de mensaje. Las ediciones tienen edit poblado; las revocaciones llegan con type: "message_revoke" en data.message.type.
chat.isCommunity aparece solo cuando es true, indicando que el chat es el canal de anuncios (parent / announcement channel) de una comunidad de WhatsApp. Los subgrupos vinculados a una comunidad mantienen type: "group" y no incluyen el campo isCommunity. En grupos regulares y DMs el campo también se omite.
media.base64 solo aparece cuando mediaBase64=true en la configuración (webhook o WebSocket). De lo contrario, usa media.url (whatsapp.net, expira) o media.s3Url (si S3 está configurado en la instancia).

adOrigin — atribución de origen (Click-to-WhatsApp)

Presente solo en el primer mensaje recibido de una conversación iniciada por un anuncio de Meta o por un punto de entrada (enlace wa.me, búsqueda, QR). Permite enrutar el lead por campaña sin consultar la base de datos. Dos escenarios:
  • Anuncio nativo (Click-to-WhatsApp / Call Ads)entryPointSource es ctwa_ad e incluye el bloque completo: sourceId (ID del anuncio — agrupa leads por campaña), ctwaClid (clave de atribución de Meta, úsala en la Conversions API), sourceApp, sourceUrl, title, body, mediaType, greetingMessageBody, además de conversionSource, entryPointExternalSource, ctwaPayload (token base64 para la Conversions API), originalImageUrl y clickToWhatsappCall.
  • Punto de entrada sin anuncio — enlace wa.me (click_to_chat_link), búsqueda de WhatsApp (global_search_new_chat), código QR, etc. Viene solo entryPointSource (y, cuando está disponible, entryPointApp / entryPointDelaySeconds), sin sourceId / ctwaClid — Meta no adjunta datos de anuncio a estos.
Los mensajes orgánicos — y cualquier mensaje que no sea el primero de la conversación — no incluyen adOrigin. El texto predefinido de un anuncio no es prueba de origen: la atribución confiable viene de sourceId / ctwaClid.

Ejemplo (imagen recibida)


message.status

Acuses de entrega: delivered, read, played, etc.

Payload

Enum status

  • messageSender en grupos: JID del autor original del mensaje (relevante cuando alguien lee un mensaje de otro participante).
  • chat.isCommunity sigue la misma regla que message.exchange: presente y true solo cuando el chat es el canal de anuncios de una comunidad.

call.update

Eventos de llamadas: offer, accepted, rejected, terminated, latency.

Payload

Enum type

Para auto-rechazar llamadas, configura autoRejectCalls=true en el bloque de configuración de la instancia, aún recibirás los eventos offer + rejected en el webhook.

group.flow

Cambios de grupo: miembros, metadatos, configuraciones.

Payload, cambio de participante

Subtipos de metadatos


instance.state

Cambios en el estado de la propia instancia (conexión, QR, ban, emparejamiento).

Payload

Enum state

Para que tu cliente sepa cuándo refrescar el QR en la UI, escucha instance.state con state=qr_ready y renderiza data.codes[0].

label.update

Ediciones/asociaciones de etiquetas (etiquetas de WhatsApp Business).

Payload

Combinaciones type × action


Eventos no emitidos (internos)

Capturados por el handler de whatsmeow pero no propagados vía webhook/WS:
  • *events.Picture, cambio de foto de perfil (solo registrado en log).
  • *events.FBMessage, Facebook Business (solo registrado en log).
  • *events.HistorySync, sincronización de historial (procesado y almacenado en BD).
Si necesitas consumir alguno de estos cambios, haz polling de los endpoints REST correspondientes (perfil, historial).

Referencias

Configurar webhook

Filtra eventos vía events[] en la configuración.

Configurar WebSocket

Misma sintaxis de filtro que el webhook.

Conectar vía WebSocket

Recibe eventos en tiempo real.

Resumen de eventos

Comparación webhook vs WebSocket.