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.
Elige un fondo para abrir el panel del widget y ver cómo se verá. Cambia el fondo en vivo sobre el widget real (Shadow DOM), no re-hornea nada.
—
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.