Cas particulier: CMP par catégorie


Avec une installation client-side, merci de suivre l'intégration explicitée ci-dessous.
Avec une installation server-side , votre partenaire doit s'assurer de fournir les catégories non-autorisées à chaque appel dans le paramètre pmcat.

Dans le cadre du RGPD vous avez mis en place sur votre site web une CMP par catégories pour récupérer le consentement utilisateur. Ce consentement doit se répercuter sur le déclenchement de vos différents tags, connecteurs, mais également sur la collecte Eulerian.



Opt-out inconditionnel et général

Eulerian ne peut pas agir sur le fait que des tags de suivi de performance soient activés ou non.Par sécurité, nous fournissons aux utilisateurs une adresse permettant de rendre cet utilisateur inactif dans l'intégralité des traitements.Cet opt-out est un opt-out général disponible pour toutes les plateformes Eulerian. Pour l'atteindre, il faut aller à cette adresse (en remplaçant avec votre domaine de collecte et votre url de site):
<domaine_de_collecte>/optout.html?url=votre_domaine

Exemple

Pour le site  www.eulerian.com :  https://mj23.eulerian.com/optout.html?url=www.eulerian.comCette  adresse peut être typiquement positionnée et rendue disponible aux utilisateurs dans votre page d'information “Vie privée” ou “RGPD”, en plus de l'accés à l'édition de la CMP.


Etape 1 : Déclaration des catégories de consentement sur la plateforme

Pour déclarer vos catégories, rendez-vous sur la page : Collecte / Privacy center / Gestion du consentement hors tcfv2Ici, vous pouvez ajouter la même liste des catégories présentes dans le bandeau de contentement de votre site en cliquant sur “ajouter une catégorie”.
Dans la fenêtre suivante donnez un nom à votre catégorie et répetez l'opération jusqu'à-ce-que vous ayez autant de catégories déclarées au sein d'Eulerian que de catégories présentées à vos utilisateurs.


Etape 2 : Activation du consent manager

Rendez-vous sur la page : Collecte / Gestion de la vie privée / Gestion de vos Consent ManagerCliquez sur “Ajouter un nouveau consent manager (asservi)”.
Dans la fenêtre, renseignez le nom du cookie intermédiaire que vous allez utiliser (sensible à la casse). Par defaut vous pouvez utiliser : “EA_cookie_intermediaire”


Paramétrer une CMP par catégorie sans cookie intermédiaire

Si vous ne souhaitez pas poser de cookie intermédiaire, vous devez ajouter dans vos tags Eulerian une variable “epm-shared” qui peut avoir comme valeur “0” (pas de choix de consentement donné) ou “1” (choix de consentement donnés)


Etape 3 : Liaison d'Eulerian à une catégorie

Pour qu'Eulerian sache quand il est autorisé à collecter de la donnée, vous devez lier la collecte Eulerian à une des catégories que vous avez déclaré.Rendez-vous sur la page : Collecte / Gestion de la vie privée / Privacy centerCliquez ensuite sur le bloc “finalités Eulerian” et sélectionnez parmi les catégories créées au sein de la plateforme, celle qui correspond à votre usage d'Eulerian.Une fois votre configuration terminée, entrez le code de vérification envoyé par SMS pour terminer votre paramétrage


Authentification à 2 facteurs

La modification des finalités d'Eulerian nécessite l'envoi d'un code de vérification sur votre numéro de téléphone.Rapprochez-vous de votre CSM pour renseigner votre numéro de téléphone et ainsi pouvoir terminer votre configuration.


Etape 4 : Installation classique du script sur votre site internet

La CMP asservie va nous permettre de récupérer les choix de consentement fait par un utilisateur. Nous mettons à votre disposition un script qui va nous transmettre le choix de consentement de l'utilisateur pour les catégories déclarées au sein d'Eulerian.Le script fonctionne en 4 étapes :
    Au chargement de votre bandeau CMP, le navigateur appelle les catégories Eulerian. Chaque catégorie Eulerian doit correspondre à une catégorie affichée sur le bandeau.
    Lorsqu'un utilisateur accepte ou refuse une catégorie, le choix est impacté dans la liste des catégories Eulerian appellées par le navigateur.
    Une fois que l'utilisateur a fait ses choix de consentement et a cliqué sur sauvegarder, le script renvoit les choix de à Eulerian qui va stocker et appliquer le consentement.
    Un cookie “intermédiaire” est déposé sur le navigateur de l'utilisateur avec comme valeur “1” : il permet de confirmer à Eulerian que l'utilisateur a bien donné son consentement et que les connecteurs/tags peuvent donc être déclenchés.


PRE-REQUIS TECHNIQUE

La librairie collector doit être chargé. Le site doit utiliser la clef « onload » dans le datalayer EA_data pour fournir une fonction de callback à appeler au moment de la réponse du collector.
EA_push( 'onload', [ function() {
console.log('EA js is loaded');
} ]);


Liste des fonctions JS de la librairie

Pour utiliser cette liste de functions, le “consent manger” doit être déjà active en mode “asservie”. Voir  Etape 2 : Activation du consent manager 
Code
Description
_oEa.cookieset(outCookieKey, val, 1);
cookieset() : Crée un cookie de session ayant pour nom outCookieKey et pour valeur val. Ce cookie peut être utilisé comme cookie « asservi ».
outCookieKey: nom du cookie qui sera créé. val: valeur du cookie. vaut 0 ou 1
EA_epmSetAllowAll();
EA_epmSetAllowAll() : collecte le consentement de l'utilisateur actif sur l'ensemble des catégories de consentement existantes définies dans Eulerian
EA_epmSetDenyAll();
EA_epmSetDenyAll() : collecte le refus de consentement de l'utilisateur actif sur l'ensemble des catégories de consentement existantes définies Eulerian
var obj_categories = EA_epmGet();
EA_epmGet() : retourne un tableau d'objet contenant l'ensemble des catégories de consentement et leurs propriétés paramétrés dans Eulerian.
obj_categories: tableau d'objet contenant la liste des catégories de consentement et leurs propriétés.
EA_epmSet(obj_categories);
EA_epmSet(obj) : sauvegarde les modifications apportées à obj dans le navigateur. Attention, il faut utiliser EA_epmEnd() pour pousser ces données à Eulerian. obj_categories: tableau d'objet contenant la liste des catégories de consentement et leurs propriétés.
EA_epmEnd();
EA_epmEnd() : pousse toutes les catégories avec leur consentement associé à Eulerian et déclenche les tags 3rd party le cas échéant.


Envoyer le consentement global
    Utiliser la fonction EA_epmSetAllowAll() ou EA_epmSetDenyAll()
    Envoyer les modifications à Eulerian en utilisant la fonction EA_epmEnd()
    Mettre à jour la valeur du cookie intermédiaire.
EA_epmSetAllowAll();
EA_epmEnd();
setSharedCookie(1);
 
ou
 
EA_epmSetDenyAll();
EA_epmEnd();
setSharedCookie(0);
Votre script fonctionne si:
  • EA_epmSetAllowAll() génère 1 appel Eulerian « misc » avec pmact=clicksave et pm=1
  • EA_epmSetDenyAll() génère 1 appel Eulerian « misc » avec pmact=denyall et pm=1
Envoyer le consentement catégorie par catégorie
    Récupérer obj_categories via EA_epmGet
    Apporter les modifications nécessaires à obj_categories
    Mettre à jour le nouveau obj_categories
    Pousser les modifications à Eulerian en utilisant la fonction EA_epmEnd()
var categorie = EA_epmGet();
categorie[1].allowed=false;
categorie[1].denied=true;
EA_epmSet(categorie);
EA_epmEnd();
setSharedCookie(1);
La modification de consentement sur une catégorie doit être faite simultanément sur les 2 propriétés denied et allowed pour que ce soit pris en compte. C'est à dire que pour passer la propriété denied=true, il faut aussi déclarer allowed=falseVotre script fonctionne si : EA_epmEnd() déclenche un appel Eulerian « misc » qui contient les paramètres :
  • pm=1
  • pmact=clicksave
  • pmcat : cpm_denied_category_id_1- cpm_denied_category_id_2-… (ex: 1-10-19)
pmcat est envoyé uniquement si au moins 1 catégorie CPM est en denied

STRUCTURE DE L’OBJET "OBJ_CATEGORIES"

var obj_categories = [
{
//categorie CPM 1
"id":"{{cpm_category_id}}",
"hdr":"raw cCOLLECTORCONFIGPMCATEGORYLANG.hdr",
"desc":"raw cCOLLECTORCONFIGPMCATEGORYLANG.desc",
"mtid":"useless",
"denied":true|false,
"allowed":true|false
},
{//categorie CPM 2},{//categorie CPM 3}
]

Poser le cookie intermédiaire

Vous devez poser un cookie qui vaut 0 ou 1 (plus d’infos ci-dessous). Ce cookie que nous appelons cookie intermédiaire agira comme un safeguard et permettra de déclencher vos tags 3rd-Party et connecteurs S2S.
function setSharedCookie( val ) {
var days = 365;
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "expires="+date.toGMTString();
var outCookieKey = 'EA_cookie_intermediaire'; /* Must be declared in Eulerian */
var domaine = 'YOUR-DOMAINE.COM' /* EDIT WITH => your domaine */
document.cookie = outCookieKey+'='+val+'; domain='+domaine+'; path=/; '+expires+'';
}
Exemple d'intégration complet

Dans cet exemple vous devez remplacer :
MON-SOUS-DOMAINE avec la valeur de votre sous domaine de tracking
var domaine = 'MON-DOMAINE' avec votre propre domaine
var outCookieKey = 'EA_cookie_intermediaire' avec la valeur de votre cookie intermediaire
Dans la function send_consent_to_EA, vous devez gérer l'envoi du choix de l'utilisateur.
<script>
//call lib eulerian - edit "MON-SOUS-DOMAINE" with your sous domaine
(function(e,a){var i=e.length,y=5381,k='script',s=window,v=document,o=v.createElement(k);for(;i;){i-=1;y=(y*33)^e.charCodeAt(i)}y='_EA_'+(y>>>=0);(function(e,a,s,y){s[a]=s[a]||function(){(s[y]=s[y]||[]).push(arguments);s[y].eah=e;};}(e,a,s,y));i=new Date/1E7|0;o.ea=y;y=i%26;o.async=1;o.src='//'+e+'/'+String.fromCharCode(97+y,122-y,65+y)+(i%1E3)+'.js?2';s=v.getElementsByTagName(k)[0];s.parentNode.insertBefore(o,s);})('MON-SOUS-DOMAINE','EA_push');
 
EA_push('ondone', function() {
window.categories = EA_epmGet(); //get all categories declared in eulerian
send_consent_to_EA();
});
 
 
//setSharedCookie
/*this function is used to set the intermediate cookie
It must have the same name declared in eulerian*/
function setSharedCookie( val ) {
var days = 365;
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
var outCookieKey = 'EA_cookie_intermediaire'; /* add this cookie key when you active your consent manager in category mode */
var domaine = 'MON-DOMAINE' /* EDIT WITH => your domaine. example toto.com */
document.cookie = outCookieKey+'='+val+'; domain='+domaine+'; path=/'+expires+'';
}
 
//endAllDenied
//deny all categories
function endAllDenied() {
EA_push('ondone', function() {
EA_epmSetDenyAll();
EA_epmEnd();
setSharedCookie( 0 ); /* Double-protection with '0'. Even if a new categorie is created, it will not be fired */
);
}
 
//endAllAllowed
//allow all categories
function endAllAllowed() {
EA_push('ondone', function() {
EA_epmSetAllowAll();
EA_epmEnd();
setSharedCookie( 1 );
});
}
 
function toAllowed(index) {
categories[index].allowed = true;
categories[index].denied = false;
EA_epmSet( categories );
}
 
function toDenied(index) {
categories[index].allowed = false;
categories[index].denied = true;
EA_epmSet(categories);
}
 
function endSelected() {
EA_epmEnd();
setSharedCookie(1);
}
 
 
function send_consent_to_EA() {
 
if(/*EDIT WITH YOU CONDITION => USER ACCEPT ALL CATEGORIES*/){
endAllAllowed();
}
 
//if user deny all categories
if(/*EDIT WITH YOUR CONDITION => USER REJECT ALL CATEGORIES*/){
endAllDenied()
}
 
 
//if user accept only some categories
if(/*EDIT WITH YOUR CONDITION => USER REJECT/ACCEPT ONLY SOME CATEGORIES*/){
for(/*loop on the list of your CMP categories*/){
if(/*category [i] is accepted*/){
toAllowed(i);
}
if(/*category [i] is rejected*/){
toDenied(i);
}
}
endSelected();
}
}
</script>


Etape 4 bis : Installation alternative

Utiliser les requêtes MISC
Vous avez la possibilité d’appeler directement les requêtes qui sont générés par notre librairie pour transmettre le consentement.
Ces appels sont déclenchés depuis votre outil de gestionnaire de consentement lorsque l’utilisateur valide le formulaire de consentement.
https://{{DOMAINE_TRACKING}}}/misc/{{SITE_EULERIAN}}/{{CACHEBUSTER}}?pm=1&pmact=clicksave&&pmcat={{cmp_category_id_to_deny}}&url={{url_encoded}}

Valeurs à dyamiser
Noms des macros
Description
{{DOMAINE_TRACKING}}
Le domaine de tracking utilisé par vos tags Eulerian
{{SITE_EULERIAN}}
Le nom du site sur Eulerian
{{CACHEBUSTER}}
Force le rechargement de l’appel. Nombre aléatoire : 123123234 par exemple
{{cmp_category_id_to_deny}}
IDs des categories CPM pour lesquels le client a refusé de donner son consentement. Si plusieurs catégories, utiliser format ID1-ID2-ID3
{{url_encoded}}
url de la page active encodée.
vaut https%3A%2F% 2Fwww.journaldunet.com %2F
Paramètres URL
Noms des paramètres
Obligatoire
Description
pm=1
oui
Prise en charge du nouveau consentement
pmact=clicksave
oui
Vaut clicksave
pmcat=cmp_category_id_to_den
no
Ids des categories CMP à désactiver pour cet utilisateur


Utilisation via tag adaptatif (sans cookie intermédiaire)

//@temp_consentment est un exemple et stock le consentement user / catégorie

var temp_consentment = [];
//@consentment_object.flag vaut 0. Dès que consentment_object.flag vaut 1, on vérifie si l'obje _oEa est bien chargé dans le contexte navigateur et si c'est le cas on trigger l'envoi du consentement à Eulerian
var _consentment = {
aInternal: 0,
aListener: function(val) {},
set flag(val) {this.aInternal = val;this.aListener(val);},
get flag() {return this.aInternal},
registerListener: function(listener) {this.aListener = listener}
}
_consentment.registerListener(function(val) {
if(window._oEa) {console.log("CASE1:", "l'utilisateur vient de pousser un nouveau consentement et la librairie Eulerian a bien été chargée")}
else {console.log("CASE2:","l'utilisateur vient de pousser un nouveau consentement mais la librairie EA n'a pas encore été chargée ou _oEa n'existe plus")}
});
//trigger envoi du consentement vers eulerian au submit de la déclaration user
_consentment.flag = 1;
function GO_CONSENT() {
if(_consentment.flag === 1) {
console.log("PROCESS:je mets ici mon traitement consentement en remaniant par exemple la variable @temp_consentment")
}
else if(_consentment.flag === 0) {console.log("CASE3: La librairie EA est correctement chargée mais l'utilisateur n'a pas déclaré de consentement")}
}
var EA_datalayer = [
'onload', GO_CONSENT()
,"path", "asservi_page"
,"epm-shared","1"
];
if(window._oEa){/*<![CDATA[*/var EA_data = window.EA_data = EA_datalayer;(function(){var td='et2.eulerian.net',d=document,l=d.location;if(!l.protocol.indexOf('http')){var o=d.createElement('script'),a=d.getElementsByTagName('script')[0],cn=parseInt((new Date()).getTime()/3600000),cj='',cdh=(l.host+td).replace(/[^a-z]/g,''),cdr=cdh+cdh.toUpperCase(),acdr=cdr.split('');for(var i=-1;i<cn%7;i++){cj+=acdr[(cn+i)%acdr.length];}o.type='text/javascript';o.async='async';o.defer='defer';o.src='//'+td+'/'+cj+(cn%8760)+'.js';a.parentNode.insertBefore(o,a);}})();}else{_oEa.rf="";EA_collector(EA_datalayer);}


Etape 5: le consentement dans une application


Récupérer le consentement dans une application nécessite de modifier votre SDK pour ajouter un paramètre “pmcat” dans lequel vous devrez nous fournir les IDs des catégories refusées par l'utilisateur (IDs présents au sein d'Eulerian), séparés d'un “-”.
Ainsi, si vous présentez 3 catégories à votre utilisateur :
  • catégorie “analytics” (catégorie ayant l'ID 1 au sein d'Eulerian)
  • catégorie “publicité” (catégorie ayant l'ID 10 au sein d'Eulerian)
  • catégorie “fonctionnel” (catégorie ayant l'ID 19 au sein d'Eulerian)
Si l'utilisateur refuse la catégorie analytics et publicité mais accepte la catégorie “fonctionnel”, le paramètre “pmcat” devra avoir comme valeur “1-10”.Si l'utilisateur ne refuse aucune catégorie, il faudra alors uniquement pousser “-“.

Exemple android
Android sans valeur:
EAProperties genericTag = new EAProperties.Builder("NOM_PAGE")
.setUID("UID")
.set("NOM_PARAM_PERSO","VALEUR_PARAM_PERSO")
.set("pmcat","CATEGORIES CMP REFUSEES")
.build();
EAnalytics.getInstance().track(genericTag);
Android avec valeurs :
EAProperties genericTag = new EAProperties.Builder("|univers|rubrique|page")
.setUID("5434742")
.set("abonnement","mensuel")
.set("pmcat","1-2")
.build();
EAnalytics.getInstance().track(genericTag);
Exemple ios
IOS sans valeurs :
let genericTag = EAProperties(path: "NOM_PAGE")
genericTag.setEulerianWithUid(uid: "UID")
genericTag.setEulerianWithValue("VALEUR_PARAM_PERSO", forKey: "NOM_PARAM_PERSO")
genericTag.setEulerianWithValue("CATEGORIES CMP REFUSEES", forkey: "pmcat")
EAnalytics.track(genericTag)
IOS avec valeurs :
let genericTag = EAProperties(path: "|univers|rubrique|page")
genericTag.setEulerianWithUid(uid: "5434742")
genericTag.setEulerianWithValue("mensuel", forKey: "abonnement")
genericTag.setEulerianWithValue("1-2", forkey: "pmcat")
EAnalytics.track(genericTag)
Exemple noscript
NO script valeurs :
//domain.client.tld/collector/-/REMPLACER_PAR_UNE_VALEUR_ALEATOIRE.html?
uid=REMPLACER_PAR_ID_USER
&urlp=REMPLACER_PAR_NOM_DE_LA_PAGE
&url=http%3A%2F%2Fwww.client.com%2F
&pmcat=CATEGORIES CMP REFUSEES
&rf=
No script avec valeurs :
//domain.client.tld/collector/-/544534509876.html?
uid=123456789
&urlp=univers%2Frubrique%2Fpage
&url=http%3A%2F%2Fwww.client.com%2F
&pmcat=1-2
&rf=


Etape 6 : Mise à jour de vos requêtes sauvegardées pour prendre en compte le consentement utilisateur



Uniquement si vous disposez du module segmentation d'Eulerian
Depuis l'audience engine (module segmentation) vous avez la possibilité d'envoyer des utilisateurs par 3 moyens :
  • Télécharger une liste d'identifiant que vous faites parvenir à votre partenaire
  • Envoyer en one-shot une liste d'identifiants à un partenaire via un connecteur natif
  • Envoyer tous les jours une liste d'identifiants à un partenaire via un connecteur natif avec la fonctionnalité “requête automatiséee”
Dans les 3 cas le consentement utilisateur doit être pris en compte. Pour cela intégrez dans vos requêtes la règle “Catégories de partenaires consenties”


Dans le cadre d'une requête automatisée, l'intégration de cette clause se fait dans la requête sauvegardée qui sera ensuite automatisée