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: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."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 sobreentry/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)
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 arregloerrors 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 contiene los siguientes parámetros:
Notificaciones de mensajes entrantes
Recibe una notificación cuando su empresa recibe un mensaje. La sección del objetomessages 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 traeid, 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 objetocontext. 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 campoevent (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