Les options d’intégration présentées dans cet article ont été créées et validées en collaboration avec DMPG, un partenaire spécialisé d’Adobe Analytics et d’Adobe Target.
Notre intégration analytique personnalisée vous permet d’analyser les campagnes Dynamic Yield sur votre plateforme analytique. Cet article explique en détail comment la configurer pour Adobe Analytics.
Le cas d’utilisation le plus courant pour l’intégration avec une plateforme analytique tierce consiste à enregistrer des informations sur les expériences Dynamic Yield auxquelles les visiteurs ont été exposés (y compris les campagnes, les variations et les recommandations de produits).
L’intégration comporte trois éléments mobiles :
- Une campagne Dynamic Yield en direct, avec le commutateur Execute Custom Integrations activé. Cela permet à la campagne d’exposer ses métadonnées (par exemple, les noms de la campagne, de l’expérience et de la variation) lorsqu’elle est présentée à un utilisateur.
- Une fonction d’intégration personnalisée, qui agit comme une couche de traduction entre Dynamic Yield et votre pile analytique, et définit comment les données exposées sont transformées et stockées. Nous utiliserons ces fonctions pour créer un objet de couche de données.
- Un appel à Adobe Analytics. En fonction de votre implémentation, cela peut être fait directement depuis Dynamic Yield ou à partir de votre gestionnaire de balises.
Configurer l’intégration
La configuration de l’intégration se fait en 3 étapes :
- Configurer Adobe Analytics pour qu’il reçoive les données d’intégration, à l’aide d’une variable de type list.
- Configurer un objet de couche de données global à l’aide des fonctions d’intégration analytique personnalisée de Dynamic Yield.
- Remplir la variable de type list Adobe avec le contenu de la couche de données et envoyer un appel à Adobe. Cette opération peut être réalisée par l’intermédiaire de Dynamic Yield ou de votre solution de gestion des balises.
Étape 1 : Configurer une variable de type list dans Adobe Analytics
Les variables de liste d’Adobe Analytics vous permettent d’utiliser une seule chaîne de caractères séparée par un délimiteur pour stocker plusieurs valeurs, qui peuvent ensuite être divisées et analysées indépendamment. Chaque valeur représente une combinaison différente de campagne, d’expérience et de variation.
Pour configurer une variable de type list, accédez à sa page de configuration en suivant cette documentation Adobe et configurez l’une de vos variables comme suit :
- Name : Dynamic Yield
-
Expiration : c’est l’équivalent de l’ Attribution Window (fenêtre d’attribution) de Dynamic Yield. Si Attribution IQ fait partie de votre package Adobe, vous pouvez modifier l’expiration à la demande lors de l’analyse de vos résultats. Si ce n’est pas le cas, vous devrez faire un choix en amont. Dans ce cas, nous vous recommandons de sélectionner la fenêtre d’attribution la plus couramment utilisée dans Dynamic Yield. Si les expériences Dynamic Yield sont configurées avec :
- Attribution de 7 jours : définir l’expiration sur Custom attribution = 7 days (attribution personnalisée = 7 jours)
- Attribution de session : définir l’expiration sur Visit
Notez que les sessions/visites sont définies différemment dans Dynamic Yield et Adobe. En choisissant cette durée d’expiration, vous risquez de constater des écarts plus importants entre les plateformes qu’en utilisant une expiration basée sur la durée. En savoir plus sur la définition des sessions dans Dynamic Yield. - Attribution post-événement ou post-clic : pour reproduire cela dans Adobe Analytics, vous devez créer des segments séquentiels, qui incluent les visites ou les visiteurs qui ont également déclenché l’analogue Adobe Analytics de l’événement conditionnel utilisé pour l’attribution post-événement dans Dynamic Yield.
- Value Delimiter (délimiteur des valeurs) : défini sur | (pipe). Pour le remplacer par un autre délimiteur, il faut modifier le script à l’étape 2 de l’intégration.
- Allocation : définir sur Full (complet) pour imiter la logique d’attribution de Dynamic Yield, de sorte que chaque test individuel reçoive un crédit de conversion complet.
- Max Values (valeurs maximales) : 250
Étape 2 : Configurer un objet de couche de données global
Lorsqu’Adobe Analytics est prêt à recevoir des données de Dynamic Yield, nous créons un objet de couche de données à l’aide de l’intégration Dynamic Yield Custom Analytics.
L’objet de couche de données s’appelle dyGlobalObject et contient trois éléments :
- events : un tableau d’objets contenant différents types d’événements, déclenchés par différents types d’interactions. Ces événements peuvent être utilisés pour déclencher des appels individuels à Adobe Analytics. Dans cette configuration, cependant, nous regrouperons le contenu de plusieurs événements à l’aide de la variable de type list, réduisant ainsi le nombre d’appels à Adobe Analytics à un seul par page, afin de parvenir à un bon compromis entre précision du suivi et économies.
- listVar : une chaîne de caractères unique contenant une liste distincte, concaténée par pipe, des campagnes-variations d’impressions chargées sur la page. À chaque nouvelle impression, les informations pertinentes sont ajoutées à la valeur existante. La variable Adobe de type list peut être remplie directement avec cette valeur.
- uniqueImp : tableau utilisé pour créer le champ listVar.
Le tableau d’events (événements) dyGlobalObject peut être rempli par différents événements, chacun contenant des informations spécifiques que vous pourriez vouloir enregistrer dans Adobe :
- Impression de variation : cet événement exécute la fonction chaque fois qu’une variation de test ou de campagne est proposée à un visiteur sur votre site.
- Impression de recommandation : cet événement exécute la fonction chaque fois qu’un ensemble d’éléments est affiché sur la page. Il contient des informations sur l’algorithme et les éléments recommandés.
Pour transmettre des informations sur les impressions de variations à la couche de données :
Si vous avez déjà installé l’extension Analytics Platform Integration, rendez-vous dans Web Personalization › Extensions et commencez à l’étape 3.
- Cliquez sur Experience OS App Store › Analytics Platform Integration puis sur Install.
- Cliquez sur Configure extension.
- Activez l’extension, puis cliquez sur Edit.
- Sélectionnez Variation Impressions, , remplacez le code par l’exemple suivant, puis enregistrez.
function afterVariationSelected(tagId, tagName, experienceName, experience, variations, isNoAction) { window.dyGlobalObject = window.dyGlobalObject || {}; window.dyGlobalObject.events = window.dyGlobalObject.events || []; window.dyGlobalObject.listVar = window.dyGlobalObject.listVar || []; window.dyGlobalObject.uniqueImp = window.dyGlobalObject.uniqueImp || []; const timestamp = Math.round((new Date()).getTime() / 1000); let expName = decodeURI(experience.name); const experienceId = experience.id; if (isNoAction) { addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variations[0].id, 'Control', timestamp); } else { variations.forEach(function(variation) { addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variation.id, decodeURI(variation.name), timestamp); }); } if (DYO.userAgent.isSafari(navigator.userAgent)) { DY.CS = DY.CS || {}; DY.CS.reportToAdobeReady = DY.CS.reportToAdobeReady || DYO.CoreUtils.waitForVariable('DY.CS.reportToAdobe'); DY.CS.reportToAdobeReady.then(function() { DY.CS.reportToAdobe.report(); }); } function addExperienceToGlobalObject(tagId, tagName, experienceId, expName, isNoAction, variationId, variationName, timestamp) { window.dyGlobalObject.events.push({ 'event': 'impression', 'cmpId': parseInt(tagId), 'cmpName': tagName, 'expId': experienceId, 'expName': expName, 'varId': variationId, 'varName': variationName, 'isCG': isNoAction, 'eventTs': timestamp }); const listItem = [tagName, expName, variationName].join('.'); if (window.dyGlobalObject.uniqueImp.indexOf(listItem) === -1) { window.dyGlobalObject.uniqueImp.push(listItem); } window.dyGlobalObject.listVar = window.dyGlobalObject.uniqueImp.join('|'); } }
- Après quelques minutes, ouvrez la console du navigateur sur votre site web sur lequel au moins une campagne Dynamic Yield est en cours, puis écrivez dyGlobalObject. Vous devriez voir le tableau events se remplir d’un événement de type impression pour chaque campagne en cours, et l’élément listVar se remplir de la liste concaténée avec le symbole pipe [campaign_name].[experience_name].[variation_name], comme dans l’exemple suivant :
{
"events": [{
"cmpId":524122,
"cmpName":"Custom Action: Set Cookie 1",
"event":"impression",
"eventTs":1605468964,
"expId":994350,
"expName":"Experience 1",
"isCG":false,
"varId":"13487153",
"varName":"Variation 1"
}, {
"cmpId":525193,
"cmpName":"Recommendation",
"event":"impression",
"eventTs":1605468964,
"expId":997366,
"expName":"Experience 1",
"isCG":false,
"varId":"13629597",
"varName":"Variation 1"
}],
"listVar": "Custom Action: Set Cookie 1.Experience 1.Variation 1|Recommendation.Experience 1.Variation 1",
"uniqueImp": [
"Custom Action: Set Cookie 1.Experience 1.Variation 1",
"Recommendation.Experience 1.Variation 1"
]
}
Notez cette ligne dans le code de la fonction d’intégration précédente :
const listItem = [tagName, expName, variationName].join('.');
Il est explicite que chaque valeur de la variable de type list doit être construite comme suit : [campaign_name].[experience_name].[variation_name]
Vous pouvez modifier cette définition. Par exemple :
- En choisissant un séparateur différent (par exemple, si certains noms d’entités contiennent des points)
- En choisissant des valeurs d’entité différentes (par exemple, si vous souhaitez utiliser des ID au lieu de noms pour gagner de l’espace dans votre variable de type list (rappelez-vous que chaque valeur de la liste a une longueur maximale de 250 caractères)).
Par exemple, si vous souhaitez enregistrer les identifiants des entités, séparés par des points-virgules, modifiez la fonction comme suit :
const listItem = [tagName, expName, variationName].join(';');
Si vous décidez d’utiliser des identifiants plutôt que des noms d’entités, nous vous recommandons d’utiliser la classification Adobe SAINT pour les faire correspondre à leurs noms d’entités respectifs. Notez qu’à l’heure actuelle, Dynamic Yield ne peut pas fournir un accès pratique et systématique aux métadonnées relatives à ces identifiants d’entité pour une utilisation avec l’importateur de classification Adobe. Cependant, les ID et les métadonnées correspondantes peuvent être trouvées, pour chaque variation, dans le tableau d’événements de l’objet global, et peuvent être classées manuellement dans Adobe. Pour en savoir plus sur la classification, consultez la section Analyse des campagnes de Dynamic Yield dans Adobe Analytics.
Pour envoyer à la couche de données des informations sur les produits recommandés (facultatif) :
Pour les campagnes de recommandation, vous pouvez également faire remonter des informations sur l’algorithme utilisé et les produits recommandés.
- Accédez à l’intégration de la plateforme d’analyse personnalisée et cochez la case Recommendation Impressions (impressions de recommandation).
- Remplacez le code de l’exemple par le code suivant, puis enregistrez.
function afterRcomResponse(strategy, fallback, widgetId, slots) { window.dyGlobalObject = window.dyGlobalObject || {}; window.dyGlobalObject.events = window.dyGlobalObject.events || []; window.dyGlobalObject.events.push({ 'event': 'recommendation_impression', 'strId': strategy.widgetId, 'strType': strategy.strategy, 'slots': strategy.slots, 'isFallback': strategy.fallback, 'eventTs': Math.round((new Date()).getTime() / 1000), }); }
-
Après quelques minutes, ouvrez la console du navigateur sur votre site web sur lequel au moins une campagne de recommandation est en cours, puis écrivez dyGlobalObject. Vous devriez voir que le tableau des events contient un nouveau type d’événement, recommendation_impression:
{ "events": [ { "event": "recommendation_impression", "eventTs": 1605468966, "isFallback": true, "slots": [ { "fallback": true, "item": { "categories": [ "Cats", "Toys" ], "description": "A Scratch-tastic product.", "dy_display_price": "0", "group_id": "119", "image_url": "http://cdn.dynamicyield.com/petshop/images/Group 119.png", "in_stock": true, "keywords": [ ], "name": "Cat Scratch Tower (Midi)", "price": 0, "publish_time": "2020-11-15T16:15:50", "sku": "119", "url": "/product/119" } } ], "strId": 89828, "strType": "TOP_N_RANDOM" } ] }
Remarque : l’étape suivante de ce guide se concentre uniquement sur l’intégration des impressions de variation.
Étape 3 : Envoyer un appel à Adobe Analytics
Après avoir exposé les informations, envoyez un appel à Adobe Analytics de l’une des manières suivantes :
Option | Appels une fois par impression | Appels une fois par page | Appel existant |
---|---|---|---|
Appel via Dynamic Yield | - | Au déchargement de la page ou équivalent via Dynamic Yield Custom Code en tant qu’appel s.tl() supplémentaire | - |
Appel personnalisé, via le gestionnaire de balises | Sur le type d’événement = impression | Via le gestionnaire de balises en tant qu’appel s.tl() supplémentaire | Via le gestionnaire de balises en même temps que l’appel existant |
Option 1 : Envoyer un appel via Dynamic Yield, une fois par page
Utilisez une campagne Dynamic Yield Custom Code pour alimenter la variable de type list à partir de la couche de données, puis déclenchez un appel Adobe Analytics s.tl().
- Rendez-vous dans Web Personalization › New Campaign puis cliquez sur Custom Code.
- Sélectionnez cette option pour déclencher la campagne au chargement de la page. Il s'agit simplement de mettre en place un récepteur d'événements au chargement de la page. La fonction contenue s'exécute avant le déchargement pour les sites statiques, et au moment du spa_start pour les applications à page unique.
-
Important : comme il s’agit d’une campagne auxiliaire et que vous ne souhaitez pas la suivre dans Adobe, désactivez les options Track campaign performance in your analytics platform et Serve On every SPA event puis cliquez sur Next (suivant).
- Cliquez sur l’onglet Variations (en laissant l’onglet Targeting vide, pour cibler tous les utilisateurs)
- Cliquez sur New Variation et sélectionnez le modèle Custom Code.
- Rendez-vous dans Design et collez le code suivant sur l’onglet JS. Notez que dans cet extrait de code, vous renseignez explicitement la variable de type list numéro 3. Remplacez 3 par votre identifiant de variable de type list tel que défini dans Adobe Analytics, puis cliquez sur Save Variation.
const variableName = 'list3'; const INTERVAL = 5000; const dyAdobeTimeCookie = DYO.StorageUtils.get('dy-adobe', ['sessionStorage']); let newPosition = 0; let dyAdobeInterval; // For disabling interval logic, put a zero (0) DY.CS = DY.CS || {}; const adobeSender = () => { const currentTime = new Date().getTime(); const newTime = new Date(currentTime + INTERVAL).getTime(); window.addEventListener('beforeunload', sendDataToAdobeAnalytics); document.addEventListener('mouseout', (evt) => { if (evt.toElement === null && evt.relatedTarget === null) { sendDataToAdobeAnalytics(); } }); document.addEventListener("scroll", scrollSpeed); if (dyAdobeInterval !== 0) { dyAdobeInterval = setInterval(() => { if (dyAdobeTimeCookie === null) { DYO.StorageUtils.set('dy-adobe', newTime, ['sessionStorage']); sendDataToAdobeAnalytics(); } else { if (currentTime > dyAdobeTimeCookie) { sendDataToAdobeAnalytics(); DYO.StorageUtils.set('dy-adobe', newTime, ['sessionStorage']); } } }, INTERVAL); } } function scrollSpeed() { let lastPosition = window.scrollY; setTimeout(() => { newPosition = window.scrollY; }, 100); currentSpeed = newPosition - lastPosition; if (currentSpeed > 220) { sendDataToAdobeAnalytics(); } } function sendDataToAdobeAnalytics() { const data = window.dyGlobalObject && window.dyGlobalObject.listVar; if (!data) { return; } const reportingSettings = { linkTrackVars: variableName }; reportingSettings[variableName] = data; s.useBeacon = true; s.tl(true, "o", "Dynamic Yield", reportingSettings); delete window.dyGlobalObject; } DY.CS.reportToAdobe = (function() { const TIMEOUT = 400; let timeoutId = null; function sendData() { sendDataToAdobeAnalytics(); timeoutId = null; } function report() { if (timeoutId !== null) { clearTimeout(timeoutId); timeoutId = null; } timeoutId = setTimeout(sendData, TIMEOUT); } return { report: report }; })(); adobeSender();
- Sélectionnez n’importe quel objectif comme indicateur principal, en gardant à l’esprit que vous ne mettez pas en place un test réel, mais simplement une campagne auxiliaire pour effectuer l’appel API, donc n’importe quel objectif fera l’affaire.
- Vérifiez que l’allocation est bien définie pour envoyer 100 % du trafic vers votre variation.
- Cliquez sur Save Experience et Save & Publish (sauvegarder et publier) la campagne.
Option 2 : Envoyer un appel via votre solution de gestion des balises
Cette option vous laisse la plus grande flexibilité pour utiliser l’objet de la couche de données de la manière qui convient le mieux à votre implémentation.
Vous pouvez utiliser le contenu de l’élément listVar de dyGlobalObject tel quel, ou construire quelque chose d’analogue en travaillant avec le contenu de chaque objet du tableau events.
Vous pouvez également décider de la fréquence et de la manière dont l’appel doit être effectué : en tant que s.tl() séparé, ou avec la pageview s.t() existante.
Quelques exemples de configuration :
Option | Configuration | Avantages | Inconvénients |
---|---|---|---|
Déclencher un appel à chaque impression de la campagne | Remplir votre variable de type list et lier l’appel à dyGlobalObject.event.event_type = impression | Meilleure précision | Coût des appels |
Regrouper les appels en un appel s.tl() supplémentaire | Utiliser le contenu de dyGlobalObject.event.listVar ou construire votre propre solution analogique, et déclencher un appel s.tl() lors du déchargement de la page. | Bon compromis | Coût d’un appel s.t() supplémentaire |
Regrouper les appels sur un appel existant | Utiliser le contenu de dyGlobalObject.event.listVar ou construire sa propre solution analogique | Pas d’appels ni de coûts supplémentaires | Imprécision due à des conditions de course, si les campagnes sont servies après que l’appel a été effectué. |
Validation de l’intégration
Si vous avez opté pour une intégration via Dynamic Yield ou via le gestionnaire de balises à l’aide de la variable de type list, vous pouvez valider que l’intégration fonctionne comme prévu à l’aide d’Adobe Experience Cloud Debugger, en vérifiant que la variable de type list est correctement renseignée. Par exemple :
Analyse des campagnes Dynamic Yield dans Adobe Analytics
Une fois la configuration terminée, vous devriez voir que votre variable de type list est renseignée dans Adobe Analytics. Vous pouvez procéder à l’analyse en utilisant la variable de type list telle quelle ou en utilisant la classification pour fractionner davantage chaque valeur de la liste.
Utilisation de la variable de type list telle quelle
Supposons que vous ayez une campagne de recommandations avec deux expériences et deux variations par expérience.
Dans Adobe Analytics, vous pouvez créer un nouveau tableau à structure libre et faire glisser la dimension DY Integration dans la vue, aux côtés des visites, des visiteurs uniques ou de tout autre indicateur de conversion.
Dans cet exemple, comme les deux expériences comprennent chacune deux variantes, vous devriez voir quatre lignes. Si le nombre de combinaisons est élevé, vous pouvez diviser chaque combinaison dans sa hierarchy of campaign (hiérarchie de campagne) › Experience › Variation for more convenient analysis (variation pour une analyse plus pratique)
Utilisation de la classification pour créer des dimensions distinctes pour les campagnes, les expériences et les variations
Outre l’utilisation de la variable de type list telle quelle, vous pouvez utiliser la classification pour fractionner davantage chaque valeur de liste, en la séparant par le caractère séparateur de votre choix.
Par exemple, si chaque valeur de la variable de type list est configurée comme suit :
[campaign_name].[experience_name].[variation_name]
Vous pouvez créer trois dimensions en les séparant au niveau du point (.), comme ceci :
- DY Campaign
- DY Experience
- DY Variation
Pour ce faire :
- Rendez-vous dans Admin › Classification Rule Builder
- Ajouter une nouvelle règle de type Regular Expression (expression régulière)
- Sélectionnez votre variable de type list comme entrée
- Sélectionnez une condition de correspondance basée sur le séparateur. Par exemple, si vous utilisez le point (.), les critères de correspondance peuvent être définis comme suit : ^(.*)\.(.*)\.(.*)
- Étant donné que vous effectuez une division en trois dimensions, veillez à classer les résultats en fonction de leur position ordinale : DY Campaign = $1, DY Experience = $2, DY Variation = $3
Lorsque les nouvelles dimensions sont prêtes, retournez dans un espace de travail et utilisez-les :
Désactiver l’intégration pour une campagne spécifique
Par défaut, l’intégration de la plateforme d’analyse personnalisée est activée pour toutes les campagnes. Cependant, l’intégration peut être désactivée pour chaque campagne. Cette opération s’effectue dans les paramètres avancés de chaque campagne.
- Lorsque vous modifiez ou créez une campagne, accédez aux Advanced Settings (paramètres avancés).
- Désactivez (ou activez) l’option Execute custom integrations (exécuter les intégrations personnalisées).
DMPG est une agence indépendante spécialisée dans l’expérience numérique, certifiée sur les plateformes Martech de Google et d’Adobe, qui fournit des services de stratégie et de livraison couvrant les plateformes de données clients, l’automatisation du marketing, la personnalisation cross-canal, l’optimisation du taux de conversion, l’analyse numérique et la gestion des balises.