Saltar al contenido principal
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 HTTP POST 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 evento id como el identificador de entrega y usa type para enrutar el payload.

Respuesta

Devuelve un estado 2xx tras aceptar el evento.
Para la configuración de endpoints, validación de firmas y comportamiento de reintentos, consulta Configurar webhooks.
En el caso de WhatsApp, tras solicitar a la API el envío de mensajes con éxito, los mensajes tienen un estado de accepted. Las actualizaciones de estado del mensaje activarán el Webhook whatsapp.message.updated. Por lo general, el estado del mensaje:
  • Cambia a failed si no podemos entregar este mensaje.
  • Cambia a sent si es posible entregar este mensaje, y más adelante puede cambiar a failed, delivered o read.
  • Cambia a delivered o read si este mensaje se entregó en el dispositivo del destinatario.
Sin embargo, la situación real es compleja. En primer lugar, no garantizamos el orden de las notificaciones de webhook, especialmente cuando los eventos ocurren casi simultáneamente. En segundo lugar, los eventos 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 mensaje sent:
  • El mensaje status es sent, 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 pricingCategory y totalPrice que podríamos cobrarte.
  • Contiene wamid, que es el ID de mensaje original en la plataforma de WhatsApp, que comienza con wamid..

Solicitud

Respuesta

Confirma la entrega tras aceptar el evento de forma duradera.

Explicación

  • totalPrice es solo un precio estimado antes de que se entregue el primer mensaje, y se convierte en el precio final cuando status es delivered o read. 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 sent cambia pronto a delivered o read, 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 sent y nunca cambiará a delivered.
    • 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 failed más adelante con el código de error 131026, 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 mensaje delivered:
  • El mensaje status es delivered, 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 sido delivered. En algunos escenarios, como cuando un usuario está en la pantalla de chat y llega un mensaje, el mensaje se marca como delivered y read casi de forma simultánea. En este o en escenarios similares, la notificación delivered no 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 delivered para 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 mensaje read:
  • El status del mensaje es read, 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 read del mensaje.

Mensaje fallido

En este caso, tu endpoint de webhook recibió un evento de mensaje failed:
  • El status del mensaje es failed.
  • Contiene errroCode, errorMessage y whatsappApiError.

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 whatsappApiError si 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

Usa email.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 con emailId 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

Usa sms.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 con sms.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

Usa voice.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 con voice.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 a messenger.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 es from 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

Usa pageId 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.