Skip to main content

Webhook

Los Webhooks son retornos de llamada HTTP definidos por el usuario que se activan mediante eventos específicos. Siempre que ocurra un evento de activación, el cliente de la API de WhatsApp Business verá el evento, recopilará los datos e inmediatamente enviará una notificación (solicitud HTTP) a la URL de WhatsApp especificada en la configuración de la aplicación, actualizando el estado de los mensajes enviados o indicando cuándo recibe un mensaje.
Es importante que su Webhook devuelva una respuesta HTTPS 200 OK a las notificaciones. De lo contrario, el cliente de la API de WhatsApp Business considerará esa notificación como un fallo y volverá a intentarlo tras un retraso.

Configuración del Webhook

Para recibir notificaciones, el cliente debe registrar la URL de su Webhook en el número. Definir/actualizar la URL del Webhook:
El campo webhook es opcional (puede ser null para eliminarlo) y tiene un máximo de 255 caracteres. Si la URL del Webhook no está definida, las notificaciones no se entregarán.
Si la URL de tu Webhook está detrás de un firewall o lista de permitidos, permite las IPs de origen de Positus. Consulta IPs para liberación de Webhook.
Además del Webhook principal, es posible configurar un webhook secundario (secondary_webhook). Cuando está definido, recibe las mismas notificaciones que el Webhook principal.
Probar el Webhook (handshake): para validar que la URL responde correctamente, dispare un mensaje de prueba. Positus enviará una notificación de prueba ("Beep Beep!") a la URL configurada:
Es importante que su Webhook devuelva una respuesta HTTP 200 OK a las notificaciones. De lo contrario, la notificación se considerará un fallo y habrá intentos de reenvío.

Definir la configuración de notificaciones

Los números de Positus utilizan la WhatsApp Cloud API. El cliente recibe, en la URL de Webhook registrada, un subconjunto normalizado del payload de Meta (sin el sobre entry/changes). Los objetos entregados son los objetos crudos de la Cloud API.
Siempre que sea posible, los nombres se mantendrán constantes en las funciones. (Por ejemplo, todas las marcas de fecha y hora se denominan timestamp.
Nuevos identificadores de usuario (BSUID). Con la llegada de los usernames de WhatsApp, los payloads de webhook incorporan campos adicionales de identificación — user_id (BSUID), parent_user_id (parent BSUID) y profile.username. Cuando el usuario adopta un username, los campos de teléfono (wa_id, from, recipient_id) pueden omitirse del payload. Maneje este escenario usando el user_id como identificador principal. Para entender estos identificadores, consulte la página BSUID e identificadores de usuario.

Formato del Webhook de notificaciones

Una notificación de mensaje entrante tiene el nivel superior { "contacts": [...], "messages": [...] }. Una notificación de estado tiene el nivel superior { "statuses": [...], "contacts": [...] } (contacts solo está presente cuando el estado no es failed). Ejemplo (mensaje de texto entrante)
Los campos profile.username, user_id y parent_user_id solo aparecen en los escenarios descritos en la página BSUID. El wa_id (y el from del mensaje) pueden omitirse cuando el usuario adoptó un username. Los campos siguientes se agregan al objeto contacts[] (no reemplazan a los existentes):
El campo messages[].from (teléfono del remitente) sigue el mismo comportamiento que wa_id: puede no venir cuando el usuario adoptó un username. Use el user_id presente en el objeto contacts[] correspondiente para identificar al remitente de forma duradera.

Actualizaciones de estado de los mensajes

Además de los mensajes entrantes, el cliente recibe notificaciones de estado de los mensajes que envió. Estas notificaciones tienen el nivel superior { "statuses": [...], "contacts": [...] }. Ejemplo (estado delivered)
Los campos de identificación por BSUID en el objeto de estado: El arreglo contacts que acompaña al estado (cuando está presente) trae los mismos campos BSUID descritos en mensajes entrantes: user_id, parent_user_id y profile.username. El campo status puede tomar los siguientes valores: Cuando el status es failed, el objeto de estado incluye un arreglo errors con el detalle del fallo y contacts no se envía. Ejemplo (estado failed)

Errores de notificaciones

Cuando haya errores fuera de banda que ocurran durante la operación normal de la aplicación, el arreglo errors proporcionará una descripción del error. Este tipo de error puede deberse a errores temporales de conectividad de red, credenciales no válidas, controladores de gestión con estado no disponible, etc. Si recibe un error, consulte Mensajes de error y estado para obtener más información. Ejemplo
El objeto errors
El objeto errors contiene los siguientes parámetros:

Notificaciones de mensajes entrantes

Recibe una notificación cuando su empresa recibe un mensaje. La sección del objeto messages presenta toda la información que se puede recibir sobre un mensaje entrante.

Ejemplo: Mensaje de texto recibido

Ejemplo: Mensaje de ubicación estática recibido

Ejemplo: Mensaje con contactos recibido

Mensaje de sistema: el usuario cambió de identificador (user_changed_user_id)

Cuando el identificador de un usuario cambia (por ejemplo, al cambiar de número), WhatsApp envía un mensaje de sistema de tipo system con system.type igual a user_changed_user_id. Llega dentro del arreglo messages, en el mismo formato que los demás mensajes entrantes. Úselo para actualizar el vínculo del contacto con el nuevo user_id.

Notificaciones de mensajes de medios entrantes

Cuando se recibe un mensaje con medios, la notificación enviada a su Webhook contiene un objeto de medios con los campos que identifican el archivo. En la Cloud API, el objeto de medios solo trae id, mime_type y sha256 (más un caption opcional para imagen, documento y video). No hay campos file ni link. Para descargar el medio, use el id en el endpoint de descarga: GET https://api.positus.global/v2/whatsapp/numbers/{chave}/media/{id}.

Ejemplo: Mensaje con imagen recibido

Ejemplo: Mensaje con documento recibido

Ejemplo: Mensaje con audio recibido

En la Cloud API, los mensajes de audio (incluidos los mensajes de voz) se entregan con el tipo audio, no voice.

Ejemplo: Mensaje con video recibido

Ejemplo: Mensaje con sticker recibido

Respuestas entrantes a mensajes enviados

Los usuarios pueden responder a un mensaje específico en WhatsApp. Para que la empresa entienda el contexto de la respuesta a un mensaje, incluimos el objeto context. Este objeto context proporciona el id del mensaje al que el cliente respondió y el ID de WhatsApp del remitente del mensaje original.

Ejemplo: El cliente respondió a su mensaje

Webhooks de eventos del workspace (BSUID)

Además de las notificaciones de mensajes y estado (entregadas en el formato crudo de la Cloud API), Positus envía dos eventos de workspace relacionados con el BSUID. Estos eventos usan un sobre diferente: un objeto de nivel superior con el campo event (nombre del evento), el objeto workspace (identificación del workspace) y un objeto con los datos del evento — nombrado contact o number, según el caso.

Actualización de BSUID (user_id_update)

Se dispara cuando el BSUID (o parent BSUID) de un usuario se actualiza. Trae los valores anterior y actual de cada identificador. Los datos vienen en el objeto contact.

Actualización de username de la línea (business_username_update)

Se dispara cuando cambia el estado del username de su línea oficial (el @nombre público del número comercial). Los datos vienen en el objeto number.

Documentación oficial de WhatsApp Cloud API

Positus utiliza la WhatsApp Cloud API y entrega los objetos en el mismo formato que el estándar oficial de Meta. La documentación completa y actualizada se puede encontrar en el enlace a continuación:https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components