Webhooks — Publicidad de Facebook

message_facebook_advertising — mensajes que llegan desde un anuncio Click to WhatsApp.

message_facebook_advertising se dispara cuando alguien le escribe desde un anuncio de
Facebook o Instagram
(Click to WhatsApp). Sirve para atribuir la conversación a la
campaña que la generó.

Se filtra por línea.

📘

Este evento no reemplaza a receive_message: el mismo mensaje dispara los dos si tiene ambos activos. Este trae la atribución publicitaria; el otro, el mensaje completo.

Campos garantizados

CampoTipoNotas
contact_phonestring | null⚠️ null si el contacto oculta su número de teléfono
bsuidstring | nullVer Identidad del contacto
wa_usernamestring | nullUsername público de WhatsApp
messagestringEl texto que escribió la persona
versionint1

Campos del anuncio

Además, el payload trae los datos del referral tal como los manda Meta. Estos campos
no los define Wasapi, así que su presencia y su nombre dependen de Meta y del tipo de
anuncio:

CampoQué es
source_urlURL del anuncio
source_idId del anuncio
source_typead o post
headlineTitular del anuncio
bodyCuerpo del anuncio
media_typeimage o video
image_url / video_urlMedia del anuncio
thumbnail_urlMiniatura
ctwa_clidIdentificador de clic Click to WhatsApp, para atribución

Trátelos todos como opcionales.

Ejemplo

{
  "event": "message_facebook_advertising",
  "data": {
    "contact_phone": "573001234567",
    "bsuid": null,
    "wa_username": null,
    "message": "Hola, vi el anuncio de la promo",
    "source_url": "https://fb.me/2xK9pQrS",
    "source_id": "120210987654320123",
    "source_type": "ad",
    "headline": "Envío gratis este mes",
    "body": "Envíos a todo el país",
    "media_type": "image",
    "image_url": "https://scontent.xx.fbcdn.net/…",
    "ctwa_clid": "ARBxK9…",
    "version": 1
  }
}

⚠️ contact_phone puede ser null

Si la persona que hizo clic en el anuncio oculta su número de teléfono, este campo llega
en null. No es un error ni un dato faltante: es un contacto que se identifica por bsuid.

$identificador = $data['contact_phone'] ?? $data['bsuid'] ?? null;

if ($identificador === null) {
    // no se pudo resolver el contacto: registre y siga
    return;
}

Si su integración usa este evento para dar de alta un lead con el teléfono como llave, ese
alta va a fallar para estos contactos. Use bsuid como alternativa, o cruce contra
receive_message, que llega con el mismo wa_id.

Ver también


Did this page help you?