Bridge de tracking GTM
Quand les events checkout et side-cart n’atteignent pas Dialog automatiquement (tout ce qui n’est pas Shopify ou Prestashop), vous les câblez via le bridge window.DialogTracking. C’est le chemin le plus courant parce que quasiment tout le monde a déjà GTM qui tagge ses events panier et checkout.
Sens du flux de données : Dialog ne pousse aucun event vers votre dataLayer. Ce bridge fonctionne dans l’autre sens : il fait remonter vers Dialog les events add_to_cart et purchase qui existent déjà dans votre dataLayer (via GTM).
Ce que fait le bridge
Section intitulée « Ce que fait le bridge »Quand le widget Dialog est chargé sur une page, il expose :
window.DialogTracking.track(eventName, payload)Vous appelez ça depuis des tags GTM pour forwarder un event add_to_cart ou purchase à Dialog. Tout autre nom d’event est ignoré : seuls ces deux events sont acceptés.
Prérequis
Section intitulée « Prérequis »- Le script du widget Dialog doit être chargé sur la page où vous appelez
window.DialogTracking.track(...). Surtout, assurez-vous que le script du widget fire sur votre page de confirmation de commande : c’est la raison #1 pour laquellewindow.DialogTrackingest undefined au moment où votre tag purchase fire. - Vous avez les accès édition sur votre container GTM.
- Les events que vous voulez forwarder existent déjà dans GTM (typiquement via des pushes dataLayer depuis votre site ou un setup GA4 / Ecommerce).
Events supportés
Section intitulée « Events supportés »Seulement ces deux-là :
add_to_cartpurchase
Spec du payload
Section intitulée « Spec du payload »Champs communs
Section intitulée « Champs communs »| Champ | Type | Description |
|---|---|---|
value |
number | Valeur totale (sous-total panier pour add_to_cart, total commande pour purchase). |
currency |
string | Code ISO devise, ex. "EUR", "USD". |
items |
array (optionnel) | Items concernés : voir whitelist ci-dessous. |
purchase ajoute
Section intitulée « purchase ajoute »| Champ | Type | Description |
|---|---|---|
transaction_id |
string | Identifiant unique de transaction ou commande. |
Champs d’item autorisés
Section intitulée « Champs d’item autorisés »Whitelist (les autres champs sont droppés) :
item_iditem_namepricequantityitem_branditem_categoryitem_variantindexcoupondiscount
Implémentation GTM
Section intitulée « Implémentation GTM »Tag 1 : forwarder purchase
Section intitulée « Tag 1 : forwarder purchase »Dans GTM, créez un tag HTML personnalisé nommé Dialog: forward purchase.
Trigger : votre trigger purchase existant (typiquement sur la page de confirmation).
<script> if (window.DialogTracking && typeof window.DialogTracking.track === 'function') { window.DialogTracking.track('purchase', { transaction_id: 'TRANSACTION_ID', value: VALUE, currency: 'CURRENCY', items: ITEMS }); }</script>Remplacez TRANSACTION_ID, VALUE, CURRENCY, ITEMS par vos variables GTM. items est optionnel.
Tag 2 : forwarder add_to_cart
Section intitulée « Tag 2 : forwarder add_to_cart »<script> if (window.DialogTracking && typeof window.DialogTracking.track === 'function') { window.DialogTracking.track('add_to_cart', { value: VALUE, currency: 'CURRENCY', items: ITEMS }); }</script>La garde if (window.DialogTracking) est obligatoire : voir la race condition ci-dessous.
Éviter le double comptage de l’ajout au panier depuis l’assistant
Section intitulée « Éviter le double comptage de l’ajout au panier depuis l’assistant »Si vous forwardez add_to_cart avec ce bridge et que le widget Dialog est installé via GTM, un ajout au panier déclenché depuis l’assistant est compté deux fois dans user_added_to_cart : une fois par Dialog lui-même (il sait que l’assistant a ajouté l’article) et une fois par votre event GA forwardé. L’event spécifique user_added_to_cart_from_assistant n’est pas affecté.
Pour ne garder qu’un seul user_added_to_cart par ajout au panier depuis l’assistant, indiquez au widget que vous forwardez déjà add_to_cart GA en ajoutant bridgesGaAddToCart=true au script d’installation :
<script src="https://cdn.askdialog.com/assets/dialog-instant.js?productId={{Dialog Product ID}}&apiKey=YOUR_API_KEY&target=YOUR_CSS_SELECTOR&position=afterend&bridgesGaAddToCart=true"></script>Dialog cesse alors d’émettre son propre user_added_to_cart pour les actions de l’assistant, laissant votre event GA forwardé comme source unique.
Race condition : le piège classique
Section intitulée « Race condition : le piège classique »window.DialogTracking est défini par le script du widget Dialog après qu’il ait chargé et initialisé. Si votre tag GTM fire avant que le script du widget ait tourné, window.DialogTracking est undefined et l’appel ne fait rien : l’event est silencieusement perdu.
Les deux patterns safe :
- Gardez toujours
if (window.DialogTracking). Au pire, un event manque ; au mieux, votre tag ne throw jamais. - Séquencez vos triggers. Sur une page de confirmation, firez votre tag purchase après que le script du widget ait chargé : par ex. trigger sur
DOMContentLoadedou un event custom que vous pushez dans le dataLayer quand le widget se dit prêt.
Concrètement : si votre tag purchase fire sur Page View - DOM Ready et que le widget charge en async, vous allez perdre des purchases. Basculez sur Window Loaded ou wrappez l’appel dans un petit retry :
<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); // jusqu'à 4 secondes de polling</script>C’est le pattern qu’on recommande sur les pages de confirmation où on ne peut pas se permettre de perdre l’event purchase.
Ce qu’il faut avoir sur la page
Section intitulée « Ce qu’il faut avoir sur la page »Pour que le bridge existe, le script du widget Dialog doit tourner sur la page où vous appelez window.DialogTracking.track(...). Le tag exact dépend de votre install :
- Install GTM → le même
<script src="https://cdn.askdialog.com/assets/dialog-instant.js?..."></script>que vous avez setup dans Installer via Google Tag Manager. Assurez-vous que son trigger fire aussi sur votre page de confirmation, pas seulement sur les pages produit. - Install SDK / React / Vue → le SDK est bundlé avec votre frontend, donc le bridge est exposé partout où votre code storefront tourne. Vérifiez juste que votre page de confirmation est rendue par le même frontend (typique SPA) : une page de confirmation server-rendered hors de votre SPA n’aura pas le SDK chargé.
Checklist QA
Section intitulée « Checklist QA »- Ouvrez votre site avec le widget Dialog chargé.
- Dans la console du navigateur, tapez
window.DialogTracking. Doit être défini. - Déclenchez un add-to-cart. Confirmez dans le dashboard Dialog que l’event side-cart fire.
- Déclenchez un purchase. Confirmez que l’event checkout fire.
Troubleshooting
Section intitulée « Troubleshooting »| Symptôme | Cause probable | Fix |
|---|---|---|
window.DialogTracking est undefined |
Script du widget pas chargé sur cette page, ou pas fini d’initialiser | Vérifiez que le tag script du widget est présent et fire sur cette page ; utilisez le pattern retry ci-dessus |
| Le tag purchase fire sur la page de confirmation mais Dialog ne reçoit rien | Race condition : le tag fire avant que le script du widget ait fini de charger | Basculez le trigger sur Window Loaded, ou wrappez l’appel dans la boucle retry ci-dessus |
value ou currency incorrects |
Variables GTM résolvent trop tard | Bougez le tag sur un trigger plus tardif ou lisez depuis un push dataLayer stable |
Synchroniser la variante PDP sélectionnée
Section intitulée « Synchroniser la variante PDP sélectionnée »Sur les pages produit où l’utilisateur peut changer de variante sans rechargement (swatches couleur/taille, sélecteurs AJAX), Dialog ne sait pas quelle variante est actuellement sélectionnée à moins que vous le lui disiez. Le widget expose une méthode publique pour ça :
window.dialog?.setVariant('variant-id');Appelez-la depuis le tag GTM qui écoute votre event dataLayer de changement de variante, ou depuis n’importe quel listener storefront que vous avez déjà sur le sélecteur de variante. Le guard ?. couvre le cas où le widget n’a pas encore chargé : même race condition que le bridge.
Quand l’utilisateur choisit une variante depuis l’assistant, Dialog émet un event dialog:variant-changed sur window. Écoutez-le si vous voulez refléter cette sélection dans votre UI storefront ou votre couche analytics :
window.addEventListener('dialog:variant-changed', (event) => { console.log('Variante Dialog sélectionnée :', event.detail.variantId);});Câbler les deux directions garde les recommandations, les suggestions et l’attribution side-cart calées sur la variante que l’utilisateur regarde vraiment.
- Vue d’ensemble du tracking : automatique vs manuel par chemin d’install.
- Tracking SDK custom : l’alternative quand vous préférez appeler les méthodes SDK directement depuis votre code frontend.
