Cas particulier: CMP par catégorie

Cas particulier: CMP par catégorie

CMP par catégorie — Gestion du consentement

Installation client-side : suivez les étapes ci-dessous dans leur intégralité. Installation server-side : votre partenaire doit envoyer les catégories refusées dans le paramètre pmcat à chaque appel.


Opt-out général (inconditionnel)

En dehors de la gestion par catégories, Eulerian met à disposition une URL d'opt-out général qui rend un utilisateur inactif sur l'ensemble des traitements Eulerian, toutes plateformes confondues.
https://[DOMAINE_COLLECTE]/optout.html?url=[VOTRE_DOMAINE]
Exemple pour le site www.eulerian.com :
<https://mj23.eulerian.com/optout.html?url=www.eulerian.com>
Cette URL est généralement exposée dans les pages Vie privée ou RGPD du site, en complément de l'accès à la CMP.


Étape 1 — Déclarer les catégories dans Eulerian

Les catégories déclarées dans Eulerian doivent correspondre exactement aux catégories affichées dans le bandeau de consentement de votre site.
Où aller : Gestion du consentement hors TCFv2
Cliquez sur "Ajouter une catégorie" et donnez un nom à chaque catégorie. Répétez l'opération jusqu'à avoir autant de catégories dans Eulerian que dans votre CMP.



Étape 2 — Activer le Consent Manager

Où aller : Gestion de vos Consent Managers
Cliquez sur "Ajouter un nouveau consent manager (asservi)", puis renseignez le nom du cookie intermédiaire que vous allez utiliser (sensible à la casse).

Valeur par défaut recommandée : EA_cookie_intermediaire
Sans cookie intermédiaire : si vous ne souhaitez pas poser de cookie, ajoutez la variable epm-shared dans vos tags Eulerian. Elle prend la valeur 0 (pas de consentement donné) ou 1 (consentement donné).


Étape 3 — Lier Eulerian à une catégorie

Pour qu'Eulerian sache quand il est autorisé à collecter de la donnée, vous devez l'associer à l'une des catégories déclarées à l'étape 1.
Où aller : Privacy Center
Cliquez sur le bloc "Finalités Eulerian", sélectionnez la catégorie correspondante, puis validez avec le code de vérification envoyé par SMS.
Authentification à 2 facteurs requise : rapprochez-vous de votre CSM pour enregistrer votre numéro de téléphone avant de réaliser cette étape.


Étape 4 — Intégrer le script sur votre site (client-side)

Le script de consentement fonctionne en 4 temps :
    Au chargement du bandeau CMP, le navigateur récupère les catégories Eulerian.
    Quand l'utilisateur accepte ou refuse une catégorie, le choix est répercuté dans l'objet catégories.
    Quand l'utilisateur clique sur "Sauvegarder", le script envoie les choix à Eulerian.
    Un cookie intermédiaire est posé avec la valeur 1 pour confirmer que le consentement a bien été fourni, et permettre le déclenchement des tags et connecteurs tiers.

Prérequis technique

La librairie collector Eulerian doit être chargée. Le datalayer doit utiliser la clé onload pour fournir une fonction de callback déclenchée à la réponse du collector.
EA_push("onload", [
function () {
console.log("EA js is loaded");
},
]);


Fonctions JS disponibles

Ces fonctions sont disponibles uniquement si le consent manager est activé en mode asservi (cf. Étape 2).
Fonction
Description
EA_epmGet()
Retourne un tableau d'objets contenant toutes les catégories de consentement déclarées dans Eulerian et leurs propriétés.
EA_epmSet(obj_categories)
Sauvegarde les modifications apportées à l'objet catégories dans le navigateur. Ne pousse pas encore les données vers Eulerian — utiliser EA_epmEnd() pour cela.
EA_epmEnd()
Envoie toutes les catégories avec leur consentement associé à Eulerian, et déclenche les tags tiers si applicable.
EA_epmSetAllowAll()
Accepte toutes les catégories de consentement en une seule opération.
EA_epmSetDenyAll()
Refuse toutes les catégories de consentement en une seule opération.
_oEa.cookieset(outCookieKey, val, 1)
Crée un cookie de session avec le nom outCookieKey et la valeur val (0 ou 1). Peut être utilisé comme cookie asservi.


Cas 1 — Envoyer un consentement global (tout accepter / tout refuser)

// Tout accepter
EA_epmSetAllowAll();
EA_epmEnd();
setSharedCookie(1);

// Tout refuser
EA_epmSetDenyAll();
EA_epmEnd();
setSharedCookie(0);
Vérification :
  • EA_epmSetAllowAll() doit générer un appel Eulerian misc avec pmact=clicksave et pm=1
  • EA_epmSetDenyAll() doit générer un appel Eulerian misc avec pmact=denyall et pm=1


Cas 2 — Envoyer le consentement catégorie par catégorie

Le flux est toujours le même : récupérer → modifier → sauvegarder → envoyer.
La modification d'une catégorie doit toujours agir simultanément sur allowed et denied. Pour passer une catégorie en refus, il faut déclarer denied=true et allowed=false en même temps.
var categorie = EA_epmGet(); // 1. Récupérer les catégories
categorie[1].allowed = false; // 2. Modifier
categorie[1].denied = true; // (toujours les deux propriétés ensemble)
EA_epmSet(categorie); // 3. Sauvegarder dans le navigateur
EA_epmEnd(); // 4. Envoyer à Eulerian
setSharedCookie(1); // 5. Poser le cookie intermédiaire
Vérification : EA_epmEnd() doit déclencher un appel misc contenant :
  • pm=1
  • pmact=clicksave
  • pmcat=ID1-ID2-... (IDs des catégories refusées, séparés par -) — envoyé uniquement si au moins une catégorie est refusée


Structure de l'objet obj_categories

var obj_categories = [
{
"id": "{{cpm_category_id}}", // ID de la catégorie dans Eulerian
"hdr": "Nom de la catégorie", // Libellé affiché
"desc": "Description", // Description de la catégorie
"mtid": "useless",
"denied": true, // true = refusée
"allowed": false // false = non autorisée
},
// { catégorie 2 },
// { catégorie 3 }, ...
]


Poser le cookie intermédiaire

Le cookie intermédiaire sert de garde-fou : il conditionne le déclenchement des tags tiers et des connecteurs S2S. Sa valeur vaut 0 (pas de consentement) ou 1 (consentement donné).
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"; // Doit correspondre au nom déclaré dans Eulerian
var domaine = "VOTRE-DOMAINE.COM"; // ex: <monsite.com>
document.cookie = outCookieKey + "=" + val + "; domain=" + domaine + "; path=/; " + expires;
}


Exemple d'intégration complet

Remplacez MON-SOUS-DOMAINE par votre sous-domaine de tracking, MON-DOMAINE par votre domaine, et adaptez les conditions dans send_consent_to_EA selon la logique de votre CMP.
// Chargement de la librairie Eulerian
(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');

// Dès que la librairie est chargée, on récupère les catégories et on envoie le consentement
EA_push('ondone', function() {
window.categories = EA_epmGet();
send_consent_to_EA();
});

// --- Cookie intermédiaire ---
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';
var domaine = 'MON-DOMAINE';
document.cookie = outCookieKey + '=' + val + '; domain=' + domaine + '; path=/' + expires;
}

// --- Fonctions utilitaires ---

// Refuser toutes les catégories
function endAllDenied() {
EA_push('ondone', function() {
EA_epmSetDenyAll();
EA_epmEnd();
setSharedCookie(0);
});
}

// Accepter toutes les catégories
function endAllAllowed() {
EA_push('ondone', function() {
EA_epmSetAllowAll();
EA_epmEnd();
setSharedCookie(1);
});
}

// Passer une catégorie en "autorisée"
function toAllowed(index) {
categories[index].allowed = true;
categories[index].denied = false;
EA_epmSet(categories);
}

// Passer une catégorie en "refusée"
function toDenied(index) {
categories[index].allowed = false;
categories[index].denied = true;
EA_epmSet(categories);
}

// Finaliser un consentement sélectif
function endSelected() {
EA_epmEnd();
setSharedCookie(1);
}

// --- Logique principale ---
// Adaptez les conditions selon votre CMP
function send_consent_to_EA() {

if (/* CONDITION : l'utilisateur a tout accepté */) {
endAllAllowed();
}

if (/* CONDITION : l'utilisateur a tout refusé */) {
endAllDenied();
}

if (/* CONDITION : l'utilisateur a fait un choix sélectif */) {
for (/* boucle sur vos catégories CMP */) {
if (/* catégorie [i] acceptée */) { toAllowed(i); }
if (/* catégorie [i] refusée */) { toDenied(i); }
}
endSelected();
}
}


Étape 4 bis — Alternative : appels MISC directs (sans librairie JS)

Si vous ne pouvez pas intégrer la librairie JS, vous pouvez envoyer le consentement via un appel HTTP direct depuis votre CMP au moment où l'utilisateur valide ses choix.
https://[DOMAINE_TRACKING]/misc/[SITE_EULERIAN]/[CACHEBUSTER]?pm=1&pmact=clicksave&pmcat=[IDS_REFUSES]&url=[URL_ENCODEE]
Macros à dynamiser :
Macro
Description
[DOMAINE_TRACKING]
Domaine de tracking de vos tags Eulerian
[SITE_EULERIAN]
Nom du site dans Eulerian
[CACHEBUSTER]
Nombre aléatoire pour forcer le rechargement (ex: 123456789)
[IDS_REFUSES]
IDs des catégories refusées séparés par - (ex: 1-10-19). Vide si tout est accepté.
[URL_ENCODEE]
URL de la page active encodée (ex: https%3A%2F%2Fwww.monsite.com%2F)
Paramètres URL :
Paramètre
Obligatoire
Description
pm=1
Oui
Indique une prise en charge du consentement
pmact=clicksave
Oui
Action de sauvegarde du consentement
pmcat
Non
IDs des catégories CMP à désactiver pour cet utilisateur


Étape 5 — Consentement dans une application mobile

Pour les apps Android et iOS, le consentement est transmis directement via le paramètre pmcat dans chaque appel, contenant les IDs des catégories refusées séparés par -.
Exemple avec 3 catégories déclarées dans Eulerian :
  • analytics → ID 1
  • publicité → ID 10
  • fonctionnel → ID 19
Si l'utilisateur refuse analytics et publicité mais accepte fonctionnelpmcat=1-10 Si l'utilisateur accepte tout → pmcat=-


Android

// Sans valeur (placeholder)
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);

// Avec valeurs réelles (catégories 1 et 2 refusées)
EAProperties genericTag = new EAProperties.Builder("|univers|rubrique|page")
.setUID("5434742")
.set("abonnement", "mensuel")
.set("pmcat", "1-2")
.build();
EAnalytics.getInstance().track(genericTag);

iOS

// Sans valeur (placeholder)
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)

// Avec valeurs réelles (catégories 1 et 2 refusées)
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)

Noscript (appel HTTP direct)

// Sans valeur (placeholder)
//domain.client.tld/collector/-/[RANDOM].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=

// Avec valeurs réelles (catégories 1 et 2 refusées)
//domain.client.tld/collector/-/544534509876.html?
uid=123456789
&urlp=univers%2Frubrique%2Fpage
&url=http%3A%2F%2Fwww.client.com%2F
&pmcat=1-2
&rf=


Étape 6 — Prise en compte du consentement dans vos requêtes sauvegardées

Cette étape ne concerne que les clients disposant du module Segmentation Eulerian.
Depuis l'Audience Engine, vous pouvez envoyer des audiences vers vos partenaires de trois façons :
  • Téléchargement d'une liste d'identifiants
  • Envoi one-shot via un connecteur natif
  • Envoi automatisé quotidien via un connecteur natif (requête automatisée)
Dans les trois cas, le consentement utilisateur doit être intégré à la requête. Pour cela, ajoutez la règle "Catégories de partenaires consenties" dans votre requête.
Pour les requêtes automatisées, cette règle doit être intégrée dans la requête sauvegardée qui sera ensuite planifiée.