Intégration Commanders Act
Injectez le widget Ekoo via un tag personnalisé dans TagCommander
Commanders Act (anciennement TagCommander) est une plateforme européenne de gestion de tags. Comme Google Tag Manager, elle permet d'ajouter le widget Ekoo sur vos pages produit sans modifier le code source du site. Vous créez un tag Free input (custom) qui insère le conteneur et charge le script Ekoo.
data-ekooReqdata-ekoo-product-idReqdata-ekoo-localeautodata-ekoo-variantdata-ekoo-review-iddata-ekoo-on-eventdata-ekoo-directionnormaldata-ekoo-scale1data-ekoo-animationpulsedata-ekoo-animation-durationcontinuousdata-ekoo-always-openfalsedata-ekoo-show-imagetruedata-ekoo-not-fully-clickablefalsedata-ekoo-autoplayfalsedata-ekoo-show-transcriptfalsedata-ekoo-show-speed-buttonfalsedata-ekoo-closed-state-main-textdata-ekoo-closed-state-secondary-textdata-ekoo-modeautodata-shadow-modeopenwindow.EKOO_FORCE_SPA = truewindow.ekooShadowMode = "open"1. Créer un tag personnalisé
- Ouvrez votre container TagCommander.
- Allez à l'étape EDIT et cliquez sur Add a tag.
- Choisissez le type Free input (custom) dans la bibliothèque de tags.
- Dans la section JAVASCRIPT CODE, collez le code ci-dessous (remplace le contenu par défaut).
- Décochez Use Tag Cleaner si vous voulez préserver le code tel quel.
1<script>2(function() {3 // 1. Create the widget container4 var container = document.createElement('div');5 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');6 container.setAttribute('data-ekoo-product-id', 'MY_PRODUCT_ID');7 container.setAttribute('data-ekoo-locale', 'fr');89 // 2. Insert the container at the desired location10 // Adjust the CSS selector to match your site11 var target = document.querySelector('.product-detail');12 if (target) {13 target.appendChild(container);14 } else {15 document.body.appendChild(container);16 }1718 // 3. Load the Ekoo script (only once per page)19 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {20 var script = document.createElement('script');21 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';22 script.defer = true;23 document.head.appendChild(script);24 } else if (window.ekooLoad) {25 window.ekooLoad();26 }27})();28</script>2. Cibler le bon élément sur la page
Utilisez document.querySelector() pour positionner le widget à l'endroit voulu. Sélecteurs courants :
.product-detail— bloc principal de la fiche produit#add-to-cart— juste avant/après le bouton d'ajout au panier[data-product-id]— élément portant l'ID produit
Astuce
Inspectez votre page produit dans le navigateur, identifiez le sélecteur CSS idéal, puis testez-le dans la console avec document.querySelector('...').
3. Product ID dynamique via tc_vars
Commanders Act expose vos données métier via l'objet global window.tc_vars (le dataLayer Commanders Act). Sur une page produit, vous y trouverez typiquement tc_vars.product_id ou tc_vars.product_array.
1<script>2(function() {3 // Read the product ID from the Commanders Act dataLayer (tc_vars)4 // Common conventions: tc_vars.product_id or tc_vars.product_array[0].id5 var tcVars = window.tc_vars || {};6 var productId =7 tcVars.product_id ||8 (Array.isArray(tcVars.product_array) && tcVars.product_array[0]9 ? tcVars.product_array[0].id10 : null);1112 if (!productId) return; // Not a product page → do nothing1314 var container = document.createElement('div');15 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');16 container.setAttribute('data-ekoo-product-id', productId);17 container.setAttribute('data-ekoo-locale', tcVars.env_language || 'fr');1819 var target = document.querySelector('.product-detail');20 if (target) target.appendChild(container);2122 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {23 var script = document.createElement('script');24 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';25 script.defer = true;26 document.head.appendChild(script);27 } else if (window.ekooLoad) {28 window.ekooLoad();29 }30})();31</script>Préparez tc_vars avant le container
L'objet tc_vars doit être renseigné avant le chargement du fichier container. Sinon, le tag se déclenche avec un product_id vide et le widget ne se montera pas.
4. Configurer le déclencheur
Le tag doit se déclencher uniquement sur les pages produit, après que le DOM soit prêt. Trois stratégies courantes dans Commanders Act :
- Page View + condition — déclencheur
page_viewfiltré partc_vars.page_type === 'product'. - URL contains — filtre sur l'URL de la page (ex.
/product/). - Événement custom — déclenchez via
cact('trigger', 'product_view', {...})(particulièrement utile pour les SPA, voir section 5).
5. Sites SPA — déclenchement par événement
Sur une SPA (React, Vue, Angular…), la navigation ne recharge pas la page : un déclencheur Page View ne se déclenche qu'une seule fois. Utilisez plutôt l'API événementielle de Commanders Act :
1<script>2// Listen to a custom Commanders Act event fired by your site3// (e.g. cact('trigger', 'product_view', { product_id: '...' }))4window.cact = window.cact || function () {5 (window.cact.q = window.cact.q || []).push(arguments);6};78cact('on', 'product_view', function (data) {9 if (!data || !data.product_id) return;1011 var container = document.createElement('div');12 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');13 container.setAttribute('data-ekoo-product-id', data.product_id);14 container.setAttribute('data-ekoo-locale', data.locale || 'fr');1516 var target = document.querySelector('.product-detail') || document.body;17 target.appendChild(container);1819 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {20 var script = document.createElement('script');21 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';22 script.defer = true;23 document.head.appendChild(script);24 } else if (window.ekooReload) {25 window.ekooReload();26 }27});28</script>Côté application, votre code SPA doit émettre l'événement à chaque navigation produit :
1// À chaque navigation vers une page produit2cact('trigger', 'product_view', {3 product_id: 'my-product-123',4 locale: 'fr',5});6. Élément cible non encore présent
Le tag s'exécute avant le rendu
Si votre site rend le bloc produit côté client (lazy-loading, hydratation différée), l'élément cible peut ne pas exister au moment où le tag s'exécute. Dans ce cas, utilisez un MutationObserver pour attendre son apparition.
1<script>2(function() {3 function injectEkoo(target) {4 var container = document.createElement('div');5 container.setAttribute('data-ekoo', 'YOUR_WEBSITE_ID');6 container.setAttribute('data-ekoo-product-id',7 (window.tc_vars && window.tc_vars.product_id) || 'MY_PRODUCT_ID');8 container.setAttribute('data-ekoo-locale', 'fr');9 target.appendChild(container);1011 if (!document.querySelector('script[src*="widget-4.0.0-standalone"]')) {12 var script = document.createElement('script');13 script.src = 'https://app.ekoo.co/widgets/widget-4.0.0-standalone.js';14 script.defer = true;15 document.head.appendChild(script);16 } else if (window.ekooLoad) {17 window.ekooLoad();18 }19 }2021 var target = document.querySelector('.product-detail');22 if (target) {23 injectEkoo(target);24 return;25 }2627 var observer = new MutationObserver(function(mutations, obs) {28 var el = document.querySelector('.product-detail');29 if (el) {30 obs.disconnect();31 injectEkoo(el);32 }33 });34 observer.observe(document.body, { childList: true, subtree: true });35})();36</script>7. Prévisualiser et publier
- Activez le mode Debug de Commanders Act (paramètre URL
?tc_debug=1ou via l'extension navigateur). - Naviguez vers une page produit ayant un audio publié.
- Vérifiez dans la console Commanders Act que le tag se déclenche, et que le widget Ekoo s'affiche.
- Si tout est bon, déployez le container en production.
Consentement (TrustCommander)
Le widget Ekoo n'utilise aucun cookie et ne collecte aucune donnée personnelle côté client. Il n'a donc pas besoin de consentement RGPD pour fonctionner. Vous pouvez le déclencher dès la page chargée, sans attendre l'acceptation de la CMP.
Si votre policy interne l'exige
Si vous préférez tout de même conditionner le chargement à un consentement (ex. catégorie « Expérience utilisateur » ou « Personnalisation »), utilisez l'événement consent.update de Commanders Act :
1cact('on', 'consent.update', function (consent) {2 // Adaptez 'experience' à la catégorie de consentement de votre CMP3 if (consent && consent.experience === true) {4 // Charge le tag Ekoo (insertion conteneur + script)5 cact('trigger', 'product_view', {6 product_id: window.tc_vars && window.tc_vars.product_id,7 });8 }9});Performance — charger le script plus tôt
Pour réduire le temps avant l'affichage du widget, vous pouvez créer un second tag (déclencheur All Pages) qui injecte simplement le script Ekoo dans le <head>. Voir la page Chargement du script pour le pattern complet.
Pièges courants
- tc_vars vide — le tag se déclenche avant que le dataLayer ne soit renseigné. Forcez l'ordre via le déclencheur
page_view(qui attendtc_vars) plutôt queDOM Ready. - Tag déclenché sur toutes les pages — pensez au filtre
tc_vars.page_type === 'product'ou un filtre URL pour éviter de charger le widget partout. - Script chargé en double — la garde
querySelector('script[src*="widget-4.0.0-standalone"]')évite d'ajouter le script plusieurs fois. - SPA sans événement custom — un tag
page_viewclassique ne se redéclenche pas. Utilisezcact('trigger', 'product_view', …)depuis votre code SPA à chaque navigation. - Politique CSP — si votre site utilise une CSP stricte, ajoutez
app.ekoo.coà la directivescript-src. - Tag Cleaner activé — peut altérer les IIFE et la logique conditionnelle. Décochez l'option si le code semble réécrit différemment.
Note
Besoin d'aide ? Consultez la FAQ ou contactez le support Ekoo.