Ir al contenido

Bridge de tracking GTM

Cuando los eventos de checkout y side-cart no llegan a Dialog automáticamente (todo lo que no es Shopify ni Prestashop), los conectas vía el bridge window.DialogTracking. Es la vía más común porque casi todo el mundo ya tiene GTM tagueando sus eventos de carrito y checkout.

Cuando el widget Dialog está cargado en una página, expone:

window.DialogTracking.track(eventName, payload)

Llamas a esto desde tags GTM para reenviar un evento add_to_cart o purchase a Dialog. Cualquier otro nombre se ignora — solo se aceptan estos dos.

  • El script del widget Dialog debe estar cargado en la página donde llames window.DialogTracking.track(...). Sobre todo, asegúrate de que el script del widget se dispara en tu página de confirmación de pedido — esa es la razón #1 por la que window.DialogTracking es undefined cuando tu tag purchase se dispara.
  • Tienes acceso de edición a tu contenedor GTM.
  • Los eventos que quieres reenviar ya existen en GTM (típicamente vía pushes a dataLayer desde tu sitio o un setup GA4 / Ecommerce).

Solo estos dos:

  • add_to_cart
  • purchase
CampoTipoDescripción
valuenumberValor total (subtotal del carrito para add_to_cart, total del pedido para purchase).
currencystringCódigo ISO de moneda, ej. "EUR", "USD".
itemsarray (opcional)Items afectados — ver whitelist abajo.
CampoTipoDescripción
transaction_idstringID único de transacción o pedido.

Whitelist (otros campos se descartan):

  • item_id
  • item_name
  • price
  • quantity
  • item_brand
  • item_category
  • item_variant
  • index
  • coupon
  • discount

En GTM, crea un tag HTML personalizado llamado Dialog: forward purchase.

Trigger: tu trigger purchase existente (típicamente en la página de confirmación).

<script>
if (window.DialogTracking && typeof window.DialogTracking.track === 'function') {
window.DialogTracking.track('purchase', {
transaction_id: 'TRANSACTION_ID',
value: VALUE,
currency: 'CURRENCY',
items: ITEMS
});
}
</script>

Reemplaza TRANSACTION_ID, VALUE, CURRENCY, ITEMS con tus variables GTM. items es opcional.

<script>
if (window.DialogTracking && typeof window.DialogTracking.track === 'function') {
window.DialogTracking.track('add_to_cart', {
value: VALUE,
currency: 'CURRENCY',
items: ITEMS
});
}
</script>

El guard if (window.DialogTracking) es obligatorio — ver la race condition abajo.

window.DialogTracking se establece por el script del widget Dialog después de que se haya cargado e inicializado. Si tu tag GTM se dispara antes de que el script del widget haya corrido, window.DialogTracking es undefined y la llamada no hace nada — el evento se pierde silenciosamente.

Los dos patterns seguros:

  1. Mantén siempre el guard if (window.DialogTracking). En el peor caso, un evento se pierde; en el mejor, tu tag nunca throw.
  2. Secuencia tus triggers. En una página de confirmación, dispara tu tag purchase después de que el script del widget haya cargado — ej. trigger en DOMContentLoaded o un evento custom que pushes al dataLayer cuando el widget dice estar listo.

Concretamente: si tu tag purchase se dispara en Page View - DOM Ready y el widget carga en async, vas a perder purchases. Cambia a Window Loaded o envuelve la llamada en un retry pequeño:

<script>
(function tryTrack(attempts) {
if (window.DialogTracking && typeof window.DialogTracking.track === 'function') {
window.DialogTracking.track('purchase', {
transaction_id: 'TRANSACTION_ID',
value: VALUE,
currency: 'CURRENCY',
items: ITEMS
});
return;
}
if (attempts <= 0) return;
setTimeout(function () { tryTrack(attempts - 1); }, 200);
})(20); // hasta 4 segundos de polling
</script>

Este es el pattern que recomendamos en páginas de confirmación donde no te puedes permitir perder el evento purchase.

Para que el bridge exista, el script del widget Dialog debe correr en la página donde llamas a window.DialogTracking.track(...). El tag exacto depende de tu instalación:

  • Instalación GTM → el mismo <script src="https://cdn.askdialog.com/assets/dialog-instant.js?..."></script> que configuraste en Instalar vía Google Tag Manager. Asegúrate de que su trigger se dispare también en tu página de confirmación, no solo en las páginas de producto.
  • Instalación SDK / React / Vue → el SDK está bundleado con tu frontend, así que el bridge está expuesto donde sea que corra tu código storefront. Solo verifica que tu página de confirmación está renderizada por el mismo frontend (típico SPA) — una página de confirmación server-rendered fuera de tu SPA no tendrá el SDK cargado.
  1. Abre tu sitio con el widget Dialog cargado.
  2. En la consola del navegador, tipea window.DialogTracking. Debe estar definido.
  3. Dispara un add-to-cart. Confirma en el dashboard Dialog que el evento side-cart se dispara.
  4. Dispara un purchase. Confirma que el evento checkout se dispara.
SíntomaCausa probableFix
window.DialogTracking es undefinedScript del widget no cargado en esa página, o no ha terminado de inicializarVerifica que el tag del script del widget está presente y se dispara en esta página; usa el pattern de retry de arriba
El tag purchase se dispara en la página de confirmación pero Dialog no reporta nadaRace condition — el tag se dispara antes de que el script del widget termine de cargarMueve el trigger a Window Loaded, o envuelve la llamada en el bucle de retry de arriba
value o currency incorrectosLas variables GTM resuelven demasiado tardeMueve el tag a un trigger posterior o lee desde un push de dataLayer estable