Skip to main content
Para consultar el catálogo exhaustivo derivado del esquema, consulta todos los ejemplos.

Qué es

Gestiona los tipos de mensajes entrantes de WhatsApp con ejemplos de cargas útiles comentadas.

Antes de comenzar

  • Crea un endpoint HTTPS público en tu aplicación.
  • Configura un endpoint de webhook de YCloud para los tipos de eventos que necesites.
  • Almacena el secreto de firma del endpoint de forma segura.
  • 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 enviadas a tu URL de webhook. Trata el evento id como el identificador de entrega y utiliza type para enrutar la carga útil.

Respuesta

Devuelve un estado 2xx tras aceptar el evento.
Para la configuración del endpoint, la validación de firmas y el comportamiento de reintentos, consulta Configurar webhooks.

Mensaje entrante no admitido

En este caso, tu endpoint de webhook recibió un mensaje entrante no admitido:
  • type está establecido en unsupported.
  • errors explica por qué el mensaje no es compatible o no está disponible.
  • unsupported.type identifica la categoría del mensaje, como poll_creation, poll_update, edit o pin.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • El error 131051 con Message type unknown significa que WhatsApp Cloud API no admite el tipo de mensaje.
  • El error 131060 con This message is currently unavailable. significa que WhatsApp no pudo proporcionar el contenido del mensaje.
  • unsupported.type identifica la categoría general. No contiene el contenido original del mensaje.
  • Consulta Mensajes no admitidos en Inbox para ver una lista legible de tipos de mensajes. Consulta la referencia de webhooks de mensajes no admitidos de Meta para conocer el contrato actual de carga útil.

Mensaje de texto entrante

En este caso, tu endpoint de webhook recibió un mensaje de texto entrante:
  • Contiene el texto sin formato que envió el usuario.
  • Contiene la información del mensaje mencionado en context.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • Los mensajes entrantes son aquellos que envían los clientes a tus números de teléfono de empresa.
  • El objeto context (opcional) contiene la información del mensaje mencionado, que se utiliza normalmente para responder a un mensaje anterior enviado por el usuario o por tu empresa.
    • context.from es el ID de WhatsApp (número de teléfono sin el prefijo ’+’) del usuario que envió el mensaje mencionado.
    • context.id es el ID original del mensaje mencionado en la plataforma de WhatsApp, que comienza con wamid..

Mensaje de texto entrante activado por un anuncio con clic a WhatsApp

En este caso, tu endpoint de webhook recibió un mensaje de texto entrante activado por un anuncio con clic a WhatsApp:
  • Contiene texto sin formato.
  • Contiene información sobre el anuncio.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

Mensaje de imagen entrante

En este caso, tu endpoint de webhook recibió un mensaje de imagen entrante:
  • Contiene una URL de imagen.
  • Contiene un pie de foto para describir esta imagen.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • La image.link se puede acceder directamente durante unos minutos para comodidad del usuario, pero siempre debes incluir un encabezado X-API-Key para descargar este archivo en un plazo de 30 días.

Mensaje de video entrante

En este caso, tu endpoint de webhook recibió un mensaje de video entrante:
  • Contiene una URL de video.
  • Contiene un pie de video para describir este video.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • La video.link se puede acceder directamente durante unos minutos para comodidad del usuario, pero siempre debes incluir un encabezado X-API-Key para descargar este archivo en un plazo de 30 días.

Mensaje de audio entrante

En este caso, tu endpoint de webhook recibió un mensaje de audio entrante:
  • Contiene una URL de audio.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • La audio.link se puede acceder directamente durante unos minutos para comodidad del usuario, pero siempre debes incluir un encabezado X-API-Key para descargar este archivo en un plazo de 30 días.

Mensaje de documento entrante

En este caso, tu endpoint de webhook recibió un mensaje de documento entrante:
  • Contiene una URL de documento.
  • Contiene un pie para describir este documento.

Solicitud

Respuesta

Confirma la recepción tras aceptar el evento de forma duradera.

Explicación

  • La document.link se puede acceder directamente durante unos minutos para comodidad del usuario, pero siempre debes incluir un encabezado X-API-Key para descargar este archivo en un plazo de 30 días.

Mensaje de sticker entrante

En este caso, tu endpoint de webhook recibió un mensaje de sticker entrante:
  • Contiene una URL de sticker.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

  • Se puede acceder directamente al sticker.link en unos minutos para comodidad del consumidor, pero siempre debes incluir un encabezado X-API-Key para descargar este archivo dentro de los 30 días.

Mensaje de ubicación entrante

En este caso, tu endpoint de webhook recibió un mensaje de ubicación entrante:
  • Contiene la latitud y longitud del lugar.
  • Contiene el nombre, la dirección y la URL del lugar.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

Enruta el evento mediante type, deduplícalo por id y traslada el trabajo lento o propenso a errores a un procesador asíncrono.

Mensaje de contactos entrante

En este caso, tu endpoint de webhook recibió un mensaje de contactos entrante:
  • Contiene un contacto con direcciones, fecha de cumpleaños, correos electrónicos, nombre, teléfonos y otros campos de contacto.
  • Contiene origin: contact_request cuando el usuario compartió el contacto en respuesta a un mensaje de solicitud de información de contacto.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

Enruta el evento mediante type, deduplícalo por id y traslada el trabajo lento o propenso a errores a un procesador asíncrono.

Mensaje de reacción entrante

En este caso, tu endpoint de webhook recibió un mensaje de reacción entrante:
  • Contiene el ID del mensaje al que reacciona el usuario.
  • Contiene el emoji.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

  • El emoji está presente cuando el usuario reacciona a un mensaje con un emoji. Si no es así, indica que el usuario eliminó el emoji de un mensaje.

Mensaje de botón de plantilla entrante

En este caso, tu endpoint de webhook recibió un mensaje de botón de plantilla entrante:
  • Contiene el botón text de la plantilla que utilizaste al enviar una plantilla de mensaje.
  • Contiene el botón payload que proporcionaste al enviar una plantilla de mensaje.
  • Contiene el wamid (context.wamid) de la plantilla de mensaje que enviaste.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

Enruta el evento mediante type, deduplícalo por id y traslada el trabajo lento o propenso a errores a un procesador asíncrono.

Mensaje interactivo de respuesta de lista entrante

En este caso, tu endpoint de webhook recibió un mensaje interactivo de respuesta de lista entrante:
  • El campo interactive contiene la respuesta de la lista en la que el usuario hizo clic en un mensaje interactivo que enviaste anteriormente.
  • El campo context contiene información sobre el mensaje interactivo que enviaste previamente al usuario.
Haz clic en el botón para seleccionar un elemento. El destinatario responde a tu mensaje seleccionando uno de los elementos de tu mensaje interactivo enviado previamente.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

  • El context contiene información sobre el mensaje interactivo que enviaste anteriormente.
    • context.from es el WhatsApp ID (número de teléfono sin el prefijo ’+’) de quien envió el mensaje interactivo.
    • context.id es el ID del mensaje original en la plataforma de WhatsApp, que comienza con wamid..

Mensaje interactivo de respuesta de botón entrante

En este caso, tu endpoint de webhook recibió un mensaje interactivo de respuesta de botón entrante:
  • El campo interactive contiene la respuesta del botón en el que el usuario hizo clic en un mensaje interactivo que enviaste anteriormente.
  • El campo context contiene información sobre el mensaje interactivo que enviaste previamente al usuario.
example-inboundmessage-buttonreply.png

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

  • El context contiene información sobre el mensaje interactivo que enviaste anteriormente.
    • context.from es el WhatsApp ID (número de teléfono sin el prefijo ’+’) de quien envió el mensaje interactivo.
    • context.id es el ID del mensaje original en la plataforma de WhatsApp, que comienza con wamid..

Mensaje interactivo de respuesta de Flow entrante

Al completarse el flow, se enviará un mensaje de respuesta al chat de WhatsApp. Lo recibirás de la misma manera que recibes todos los demás mensajes del usuario: a través del webhook de mensajes. El campo response_json contendrá datos específicos del flow.

Solicitud

Respuesta

Confirma la entrega después de aceptar el evento de forma duradera.

Explicación

  • interactive.type siempre es nfm_reply. interactive.name siempre es flow. interactive.body siempre es Sent.
  • interactive.response_json corresponde a datos específicos del flow. La estructura se define en el JSON del flow (consulta Complete action) o, si el flow utiliza un endpoint, está controlada por el endpoint (consulta Final Response Payload en Data Exchange Request). Analiza la cadena JSON interactive.response_json a un objeto JSON, donde el tipo de datos de sus valores puede variar. Por lo general, los valores son texto sin formato, excepto:
    • Cuando se origina a partir de un componente CheckboxGroup, el valor es una lista de cadenas.
    • Cuando se origina a partir de un componente OptIn, el valor es un booleano, es decir, true o false. Actualmente, si está presente, el valor debe ser true, ya que no se incluirá dicha clave en response_json si el usuario no eligió aceptar (opt-in).
    • Cuando se origina a partir de un componente DatePicker, el valor es una cadena que representa una marca de tiempo Unix en milisegundos, como "1725936737548"(es decir, 2024-09-10T02:52:17.548Z). A partir de la versión 5.0 de Flow JSON, las fechas se establecerán en formato “yyyy-MM-dd”, lo que hace que los valores sean independientes de las zonas horarias.
  • Para enviar un mensaje con un Flow, consulta Mensaje de plantilla Flow y Mensaje interactivo de Flow.

Mensaje de sistema entrante

En este caso, tu endpoint de webhook recibió un mensaje de sistema entrante:
  • type está establecido en system, y system.type está establecido en user_changed_number.
  • Un usuario cambia su número de teléfono en WhatsApp, y wa_id es el nuevo WhatsApp ID (número de teléfono sin el prefijo +).
  • user_id es el nuevo BSUID. parent_user_id solo se incluye cuando los BSUID principales están habilitados.

Solicitud

Respuesta

Confirma la entrega tras aceptar el evento de forma duradera.

Explicación

Enruta el evento mediante type, deduplícalo mediante id y traslada el trabajo lento o propenso a fallos a un procesador asíncrono.

Mensaje de pedido entrante

En este caso, tu endpoint de webhook recibió un mensaje de pedido entrante cuando un cliente añade uno o más productos a su carrito y envía un pedido:
  • Contiene información sobre el producto solicitado.

Solicitud

Respuesta

Confirma la entrega tras aceptar el evento de forma duradera.

Explicación

Enruta el evento mediante type, deduplícalo mediante id y traslada el trabajo lento o propenso a fallos a un procesador asíncrono.

Mensaje de consulta de producto entrante

En este caso, tu endpoint de webhook recibió un mensaje de texto entrante cuando un cliente consulta sobre un producto:
  • Contiene información sobre el producto.

Solicitud

Respuesta

Confirma la entrega tras aceptar el evento de forma duradera.

Explicación

  • Se recibe un mensaje de consulta de producto cuando un usuario solicita más información sobre un producto específico. Estos pueden recibirse en dos escenarios:
    • Cuando un cliente responde a Mensajes de un solo producto o de múltiples productos.
    • Cuando un cliente accede al catálogo de una empresa mediante otro punto de entrada, navega a la página de detalles del producto y hace clic en Enviar mensaje a la empresa sobre este producto.

Mensaje de bienvenida de solicitud entrante

Puedes recibir una notificación por webhook cada vez que un usuario de WhatsApp abra un chat contigo por primera vez. Esto puede ser útil si deseas responder a estos usuarios con un mensaje de bienvenida especial con tu propio diseño. Si habilitas esta función y un usuario abre un chat, normalmente cuando pulsa un enlace universal (enlaces wa.me o api.whatsapp.com ), el cliente de WhatsApp verifica si existe un hilo de mensajes previo entre el usuario y el número de teléfono de tu empresa. Si no lo hay, el cliente activa un webhook request_welcome. A continuación, puedes responder al usuario con tu propio mensaje de bienvenida. example-inboundmessage-welcomemessage

Solicitud

Respuesta

Confirma la entrega tras aceptar el evento de forma duradera.

Explicación

  • Para habilitar esta función en un número de teléfono, ve a Meta Administrador de WhatsApp > Números de teléfono > Configuración > Automatizaciones.
  • Para probar el mensaje request_welcome, si ya tienes un hilo de chat en curso con el número de teléfono de la empresa, primero debes eliminar el chat.
  • Esta función solo activa un mensaje entrante request_welcome y no responde ningún mensaje automáticamente. Depende de ti enviar o no un mensaje de bienvenida.