Esta página simula una web de cliente. Abre la consola para ver el flujo. El panel de abajo muestra en vivo lo que el widget recolecta.
POST /api/wa-embed/config (body: projectId, credentialId, wabaId, domain, whatsappPhone, prefilledMessage). Ese endpoint hornea el bundle y lo sube a S3.scriptUrl de S3. Ese es el que va en el <script> de abajo.POST /api/wa-embed/config con los mismos datos para re-publicar: re-sube el bundle al mismo key de S3 (la URL no cambia).prefilledMessage del widget.Para regenerar el bundle local tras cambiar el src: npm run build:dev && node scripts/bake-local.mjs
· ref: XXXXXXXX). Match 100% preciso.· ref: XXXXXXXX antes de enviar, dejando el resto del texto igual. Debe enlazar igual por coincidencia exacta del mensaje.
Con interceptWhatsAppLinks: true, el bundle detecta los links/botones a
WhatsApp que ya tenga la página y, al hacer click, abre el panel del widget
(precargando el ?text= del link) en vez de ir directo a WhatsApp. Así esos
clicks también quedan trackeados con sesión + refCode.
wa.me:
Escríbenos por WhatsApp
api.whatsapp.com/send:
Contacto WhatsApp
web.whatsapp.com/send:
WhatsApp Web
whatsapp://send:
Abrir app de WhatsApp
onclick inline:
data-href:
Span data-href
?text= (abre el panel sin precargar):
WhatsApp sin mensaje
chat.whatsapp.com (excluida a propósito):
Unirse al grupo
addEventListener (invisible desde fuera, no se puede interceptar):
El botón rojo abre directo el deeplink simulado (vía window.open mockeado): es la
prueba de que los handlers JS no se interceptan. Los demás casos ✅ deben abrir el panel verde.
Sigue estos pasos en orden para ver todos los parámetros nuevos (9 UTMs GA4 + click IDs + IDs de campaña + cookies Google/Meta + cookies ddm_ first/last click).
Paso 1 escribe las cookies de terceros (como lo haría Google/Meta tag). Paso 2 recarga la página con la query completa: al cargar, el widget ejecuta persistAttribution() y escribe las cookies ddm_*. Luego envía un mensaje desde el widget (botón verde) para ver el context exacto que viaja al backend.
context enviado al backend (al pulsar "Enviar")—
Nota: el bundle se cachea. Tras re-publicar, fuerza recarga dura (Ctrl/Cmd+Shift+R) o agrega ?v=2 al final del src.