El webhook y el WebSocket comparten el mismo envoltorio y el mismo catálogo de eventos. La única diferencia es el canal de entrega,Documentation Index
Fetch the complete documentation index at: https://docs.ryzeapi.cloud/llms.txt
Use this file to discover all available pages before exploring further.
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
event en el campo events de la configuración. Vacío = todos los tipos.
Filtrado y enrutamiento
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
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 tienenedit 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.Ejemplo (imagen recibida)
message.status
Acuses de entrega: delivered, read, played, etc.
Payload
Enum status
| Valor | Significado |
|---|---|
delivered | El mensaje llegó al dispositivo del destinatario. |
read | El destinatario lo leyó (con confirmaciones de lectura activas). |
played | Audio/nota de voz reproducida. |
sender | Eco interno (la propia fuente reportando entrega). |
read_self | El propio usuario lo marcó como leído en otro dispositivo. |
played_self | El propio usuario lo reprodujo en otro dispositivo. |
retry | El servidor solicitó re-entrega (transitorio). |
inactive | El destinatario lleva demasiado tiempo offline. |
server_error | Error genérico del servidor de WhatsApp. |
messageSenderen grupos: JID del autor original del mensaje (relevante cuando alguien lee un mensaje de otro participante).chat.isCommunitysigue la misma regla quemessage.exchange: presente ytruesolo cuando el chat es el canal de anuncios de una comunidad.
call.update
Eventos de llamadas: offer, accepted, rejected, terminated, latency.
Payload
Enum type
| Valor | Cuándo se dispara |
|---|---|
offer | Llamada recibida/enviada (timbre inicial). |
accepted | El lado remoto contestó. |
rejected | El lado remoto rechazó. |
terminated | Llamada finalizada, se completa duration en segundos. |
notification | Notificación contextual de llamada (p. ej., llamada perdida en grupo). |
latency | Métrica de latencia durante la llamada (latency en ms, latencyStatus). |
group.flow
Cambios de grupo: miembros, metadatos, configuraciones.
Payload, cambio de participante
Subtipos de metadatos
type | Significado |
|---|---|
name | Nombre del grupo cambiado |
topic | Descripción cambiada |
locked / unlocked | Los miembros pueden/no pueden editar la información |
announce / not_announce | Los miembros pueden/no pueden enviar mensajes |
ephemeral / not_ephemeral | Mensajes efímeros activados/desactivados |
invite | Enlace de invitación generado |
link / unlink | Subgrupo vinculado/desvinculado de la comunidad |
delete | Grupo eliminado |
membership_approval | Modo de aprobación para nuevos miembros cambiado |
suspended / unsuspended | Grupo suspendido/reactivado por WhatsApp |
instance.state
Cambios en el estado de la propia instancia (conexión, QR, ban, emparejamiento).
Payload
Enum state
| Estado | Significado | Campos extra completados |
|---|---|---|
connected | Sesión activa, lista para enviar/recibir. | — |
disconnected | Desconectado (transitorio, usualmente reconecta solo). | — |
logged_out | Sesión invalidada (requiere nuevo connect). | reason |
stream_replaced | Otra sesión tomó el control (conflicto multi-dispositivo). | — |
temp_banned | Ban temporal aplicado por WhatsApp. | expireAt, expireInSeconds, reason |
client_outdated | La versión de WhatsApp Web en uso está desactualizada, contactar soporte. | message |
connect_failure | Falla durante la conexión. | reason, reasonCode |
stream_error | Error de stream de WhatsApp. | errorMsg |
cat_refresh_error | Falla al refrescar credenciales (cat). | errorMsg |
qr_ready | Nuevo QR disponible para emparejamiento. | codes[], onConnect |
pair_success | Emparejamiento completado. | jid, platform |
pair_error | Error durante el emparejamiento. | errorMsg |
qr_scanned_no_multidevice | QR escaneado pero el dispositivo destino no soporta multi-dispositivo. | — |
keepalive_timeout | Conexión inestable, keepalive no respondido. | — |
keepalive_restored | Conexión estabilizada después de keepalive_timeout. | — |
manual_reconnect | Reconexión disparada manualmente vía REST. | — |
label.update
Ediciones/asociaciones de etiquetas (etiquetas de WhatsApp Business).
Payload
Combinaciones type × action
type | action válida | Campos extra |
|---|---|---|
edit | updated, deleted | name, color, labelType, isActive, isImmutable, orderIndex, deleted |
chat | add, remove | chatJid, labeled |
message | add, remove | chatJid, messageId |
Eventos no emitidos (internos)
Capturados por el handler dewhatsmeow 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).
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.