Para consultar el catálogo exhaustivo derivado del esquema, consulta todos los ejemplos.
Qué es
Gestiona actualizaciones de mensajes para WhatsApp, Messenger, Email, SMS y mensajes de Voice.Antes de empezar
- Crea un endpoint HTTPS público en tu aplicación.
- Configura un endpoint de Webhook de YCloud para los tipos de eventos que necesites.
- Guarda de forma segura el secreto de firma del endpoint.
- Haz que el procesamiento de eventos sea idempotente.
Cómo funciona
YCloud envía una solicitud HTTPPOST cuando ocurre el evento. Verifica la firma, registra el evento de forma duradera, devuelve una respuesta 2xx y procesa el trabajo lento de forma asíncrona.
Solicitud
Los siguientes escenarios muestran solicitudes entregadas a tu URL de webhook. Trata el eventoid como el identificador de entrega y usa type para enrutar el payload.
Respuesta
Devuelve un estado2xx tras aceptar el evento.
Para la configuración de endpoints, validación de firmas y comportamiento de reintentos, consulta Configurar webhooks.
accepted. Las actualizaciones de estado del mensaje activarán el Webhook whatsapp.message.updated.
Por lo general, el estado del mensaje:
- Cambia a
failedsi no podemos entregar este mensaje. - Cambia a
sentsi es posible entregar este mensaje, y más adelante puede cambiar afailed,deliveredoread. - Cambia a
deliveredoreadsi este mensaje se entregó en el dispositivo del destinatario.
delivered pueden ocurrir después de failed, y viceversa, especialmente cuando el usuario final utiliza varios dispositivos.
Mensaje enviado
En este caso, tu endpoint de webhook recibió un evento de mensajesent:
- El mensaje
statusessent, lo que significa que el mensaje está en tránsito dentro de los sistemas de WhatsApp. - Contiene información sobre la conversación, incluida la hora en que expira la conversación y el tipo de origen.
- Contiene el estimado
pricingCategoryytotalPriceque podríamos cobrarte. - Contiene
wamid, que es el ID de mensaje original en la plataforma de WhatsApp, que comienza conwamid..
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
-
totalPricees solo un precio estimado antes de que se entregue el primer mensaje, y se convierte en el precio final cuandostatusesdeliveredoread. El saldo retenido por los mensajes enviados que no se han entregado no estará disponible hasta que se descarten los mensajes (los mensajes enviados que no se entregan durante 30 días se descartan). -
Generalmente, un mensaje
sentcambia pronto adeliveredoread, excepto cuando:- La cuenta de WhatsApp del destinatario está desconectada; los mensajes de WhatsApp que envíes no se entregarán hasta que el destinatario tenga servicios de internet activos o en funcionamiento.
- Cualquier mensaje enviado a un contacto que te haya bloqueado siempre mostrará el mensaje
senty nunca cambiará adelivered. - El destinatario ha desactivado las confirmaciones de lectura, por lo que no recibirás los recibos de lectura de mensajes
read. - El mensaje cambia a
failedmás adelante con el código de error131026, lo que significa “Message Undeliverable.”, o bien “Receiver is incapable of receiving this message”. Lo más probable es que el destinatario no esté registrado o esté utilizando una versión desactualizada de WhatsApp. - El mensaje no se entregó para crear una experiencia de usuario de alta calidad. Consulta Per-User Marketing Template Message Limits.
Mensaje entregado
En este caso, tu endpoint de webhook recibió un evento de mensajedelivered:
- El mensaje
statusesdelivered, lo que significa que el mensaje se entregó en el dispositivo del destinatario.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
- Este evento indica que el mensaje enviado por tu empresa se entregó en el dispositivo del usuario.
- Para que un estado sea
read, debe haber sidodelivered. En algunos escenarios, como cuando un usuario está en la pantalla de chat y llega un mensaje, el mensaje se marca comodeliveredyreadcasi de forma simultánea. En este o en escenarios similares, la notificacióndeliveredno se enviará de vuelta, ya que se sobreentiende que un mensaje ha sido entregado si ha sido leído. El motivo de este comportamiento responde a una optimización interna. - Es posible que generemos más de 1 evento de webhook
deliveredpara el mismo mensaje, especialmente si el usuario final utiliza varios dispositivos. - pricingModel: “PMP”— indica que se aplica el precio por mensaje. Consulta también whatsapp-message-pricing-updates
- pricingType
- regular : indica que el mensaje es facturable.
- free_customer_service : indica que el mensaje es gratuito porque fue un mensaje de plantilla de utilidad o un mensaje que no era de plantilla enviado dentro de una ventana de servicio de atención al cliente.
- free_entry_point : indica que el mensaje es gratuito porque forma parte de una conversación de punto de entrada gratuito.
Mensaje leído
En este caso, tu endpoint de webhook recibió un evento de mensajeread:
- El
statusdel mensaje esread, lo que significa que el destinatario leyó el mensaje.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
- Si el destinatario ha desactivado las confirmaciones de lectura, no recibirás las confirmaciones
readdel mensaje.
Mensaje fallido
En este caso, tu endpoint de webhook recibió un evento de mensajefailed:
- El
statusdel mensaje esfailed. - Contiene
errroCode,errorMessageywhatsappApiError.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
- Estos eventos están diseñados para notificarte los cambios de estado de los mensajes salientes que enviaste previamente a clientes.
- El motivo del fallo en el envío de mensajes suele ser que los parámetros de la solicitud del mensaje no son válidos, que el número de teléfono del cliente no está registrado, etc. Consulta también WhatsApp Errors para la gestión de errores.
- Se proporciona
whatsappApiErrorsi intentamos enviar este mensaje a la plataforma de WhatsApp de Meta para ayudarte a comprender los detalles del error. Consulta también Cloud API Error Codes. - No te cobramos por los mensajes fallidos.
Actualización de entrega de correo electrónico
Usaemail.delivery.updated cuando el estado de entrega de un correo electrónico cambie a delivered o failed.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
Correlaciona la entrega conemailId y recipientAddress: el estado se aplica a este destinatario. Usa externalId cuando se proporcione para coincidir con tu propio registro. Inspecciona errorCode y errorMessage en una entrega fallida. La propiedad del payload es emailDelivery, no whatsappMessage.
Actualización de entrega de SMS
Usasms.message.updated cuando el estado de entrega de un SMS cambie a delivered o undelivered.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
Identifica el SMS consms.id y lee sms.status. Inspecciona errorCode cuando la entrega falle. SMS utiliza undelivered para un comprobante de entrega negativo; no apliques el modelo de estado read de WhatsApp a este evento.
Actualización de entrega de voz
Usavoice.message.updated cuando el estado de un mensaje de voz cambie a delivered o undelivered.
Solicitud
Respuesta
Confirma la entrega tras aceptar el evento de forma duradera.Explicación
Identifica el mensaje de voz convoice.id y lee voice.status. Inspecciona errorCode cuando se proporcione. Este evento de entrega pertenece a la API de mensajería de voz; es independiente de los eventos del ciclo de vida de WhatsApp Calling.
Instantánea de lectura saliente de Messenger
Suscríbete amessenger.message.updated para instantáneas salientes individuales ordinarias guardadas. Un reintento de entrega conserva Event.id; volver a crear un evento a partir del mismo dato de origen puede generar un nuevo Event.id. Correlaciona las actualizaciones mediante messengerMessage.id.
Estados de envío y entrega
accepted significa que Meta aceptó el envío, no que el mensaje fue sent o delivered. rejected es un rechazo definitivo del envío; unknown es un resultado no confirmado y no debe tratarse como fallo. No reenvíes automáticamente un mensaje tras un tiempo de espera agotado o un resultado unknown. Comprueba su estado guardado usando un ID de mensaje devuelto cuando esté disponible, o contacta con soporte.
Una instantánea conserva los datos actuales guardados, donde read tiene prioridad sobre delivered, sent y el resultado del envío. Las confirmaciones tardías no degradan ese estado. Puedes recibir instantáneas repetidas o perderte estados intermedios. Usa GET /v2/messenger/messages/{id} con from, o consulta por el ID de mensaje confirmado de Meta, para reconciliar tu estado guardado actual.
Las notificaciones de resultados de envío son de mejor esfuerzo. No dependas de recibir un webhook para cada resultado de envío síncrono. Los ID opcionales, errorCode y las horas de confirmación se omiten cuando no están disponibles. Un error de envío almacenado puede permanecer presente después de que datos de confirmación posteriores establezcan un estado más sólido.
Solicitud
Respuesta
Explicación
El ID de la página de Facebook esfrom y el PSID del cliente es to. Este ejemplo expone el estado guardado read sin inventar información faltante de sendTime o deliverTime. id es el ID de mensaje de YCloud, mientras que metaMessageId es la identidad del proveedor.
Reacción a un mensaje de Messenger
Solicitud
Respuesta
Explicación
UsapageId e psid para identificar la conversación, y metaMessageId para identificar el mensaje de destino. Una reacción es una interacción y no cambia el estado de entrega. Es posible que el destino no tenga un registro local del mensaje en YCloud. Conserva el createTime de origen; pueden producirse entregas repetidas. Verifica YCloud-Signature con el cuerpo sin procesar antes de devolver una respuesta correcta.
Reacción a un mensaje de Messenger retirada
Solicitud
Respuesta
Explicación
Elimina la reacción asociada a esta Página, al PSID del cliente y al mensaje de Meta de destino.unreact puede omitir reaction y emoji. No exijas un ID de mensaje local ni deduzcas un cambio en el estado del mensaje. Los reintentos de entrega HTTP mantienen el mismo ID de evento y cuerpo; las devoluciones de llamada repetidas de origen pueden crear un nuevo ID de evento. Verifica YCloud-Signature con el cuerpo sin procesar antes de devolver una respuesta correcta.
