Integración de CMP/Consentimiento por categorías


En el contexto del RGPD, has implementado en tu sitio web una CMP por categorías para recopilar el consentimiento del usuario. Este consentimiento debe reflejarse en el desencadenamiento de tus diferentes etiquetas, conectores, pero también en la recopilación de Eulerian.
Índice:
  • Opt-out incondicional y general
  • Paso 1: Declaración de las categorías de consentimiento en la plataforma
  • Paso 2: Activación del gestor de consentimiento
  • Paso 3: Vinculación de Eulerian a una categoría
  • Paso 4: Instalación clásica del script en tu sitio web
  • Paso 4 bis: Instalación alternativa
  • Paso 5: El consentimiento en una aplicación
  • Paso 6: Actualización de tus solicitudes guardadas para tener en cuenta el consentimiento del usuario

Opt-out incondicional y general

Eulerian no puede influir en si se activan o no las etiquetas de seguimiento de rendimiento.
Por seguridad, proporcionamos a los usuarios una dirección que les permite hacer inactivo a este usuario en la totalidad de los tratamientos.
Este opt-out es un opt-out general disponible para todas las plataformas de Eulerian. Para acceder a él, debes ir a esta dirección (sustituyendo con tu dominio de recopilación y la URL de tu sitio):
<dominio_de_recopilación>/optout.html?url=tu_dominio
Esta dirección puede ser típicamente posicionada y disponible para los usuarios en tu página de información "Vida privada" o "RGPD", además del acceso a la edición de la CMP.

Paso 1: Declarar las categorías de consentimiento en la plataforma

Para declarar tus categorías, dirígete a la página: Recopilación / Privacy center / Gestión del consentimiento fuera de tcfv2
Aquí, puedes agregar la misma lista de categorías presentes en la barra de consentimiento de tu sitio haciendo clic en "añadir una categoría".
En la ventana siguiente, da un nombre a tu categoría y repite la operación hasta que tengas tantas categorías declaradas en Eulerian como categorías presentadas a tus usuarios.

Paso 2: Activar el gestor de consentimiento

Dirígete a la página: Recopilación / Gestión de la privacidad / Gestión de tus Consent Manager
Haz clic en "Agregar un nuevo gestor de consentimiento (esclavo)".
En la ventana, introduce el nombre de la cookie intermedia que vas a usar (sensible a mayúsculas y minúsculas). Por defecto, puedes usar: "EA_cookie_intermedia"
Info: Configurar una CMP por categoría sin cookie intermediaSi no deseas colocar una cookie intermedia, debes añadir en tus etiquetas Eulerian una variable "epm-shared" que puede tener como valor "0" (sin elección de consentimiento dada) o "1" (elecciones de consentimiento dadas)

Paso 3: Vincular Eulerian a una categoría

Para que Eulerian sepa cuándo está autorizado a recopilar datos, debes vincular la recopilación de Eulerian a una de las categorías que has declarado.
Dirígete a la página: Recopilación / Gestión de la privacidad / Privacy Center
Haz clic en el bloque "finalidades Eulerian" y selecciona entre las categorías creadas en la plataforma, la que corresponda a tu uso de Eulerian.
Una vez completada tu configuración, introduce el código de verificación enviado por SMS para finalizar tu configuración.
Autenticación de dos factores
La modificación de las finalidades de Eulerian requiere el envío de un código de verificación a tu número de teléfono.Acércate a tu CSM para registrar tu número de teléfono y así poder finalizar tu configuración.

Paso 4: Instalación clásica del script en tu sitio web

El CMP esclavo nos permitirá recuperar las elecciones de consentimiento hechas por un usuario. Ponemos a tu disposición un script que nos transmitirá la elección de consentimiento del usuario para las categorías declaradas en Eulerian.
El script funciona en 4 etapas:
  • Al cargar tu barra CMP, el navegador llama a las categorías de Eulerian. Cada categoría de Eulerian debe corresponder a una categoría mostrada en la barra.
  • Cuando un usuario acepta o rechaza una categoría, la elección se refleja en la lista de categorías de Eulerian llamadas por el navegador.
  • Una vez que el usuario ha hecho sus elecciones de consentimiento y ha hecho clic en guardar, el script devuelve las elecciones a Eulerian, que almacenará y aplicará el consentimiento.
  • Se coloca una cookie "intermedia" en el navegador del usuario con el valor "1": confirma a Eulerian que el usuario ha dado su consentimiento y que los conectores/etiquetas pueden ser activados.
Warning: REQUISITO TÉCNICO PREVIOLa biblioteca collector debe estar cargada. El sitio debe usar la clave "onload" en el datalayer EA_data para proporcionar una función de callback para llamar en el momento de la respuesta del collector.
EA_push( 'onload', [ function() {
console.log('EA js is loaded');
} ]);

Lista de funciones JS de la biblioteca

Para usar esta lista de funciones, el "gestor de consentimiento" ya debe estar activado en modo "esclavo". Ver Paso 2: Activación del gestor de consentimiento.
Código
Descripción
_oEa.cookieset(outCookieKey, val, 1);
#cookieset() : Crea una cookie de sesión con el nombre @outCookieKey y el valor @val. Esta cookie puede ser utilizada como una cookie "esclava". @outCookieKey: nombre de la cookie que se creará. @val: valor de la cookie. Vale 0 o 1.
EA_epmSetAllowAll();
#EA_epmSetAllowAll() : Recopila el consentimiento del usuario activo en todas las categorías de consentimiento existentes definidas en Eulerian.
EA_epmSetDenyAll();
#EA_epmSetDenyAll() : Recopila el rechazo de consentimiento del usuario activo en todas las categorías de consentimiento existentes definidas en Eulerian.
var obj_categories = EA_epmGet();
#EA_epmGet() : Devuelve un arreglo de objetos que contiene todas las categorías de consentimiento y sus propiedades configuradas en Eulerian. @obj_categories: arreglo de objetos que contiene la lista de categorías de consentimiento y sus propiedades.
EA_epmSet(obj_categories);
#EA_epmSet(obj) : Guarda los cambios realizados en @obj en el navegador. Atención, se debe usar EA_epmEnd() para empujar estos datos a Eulerian. @obj_categories: arreglo de objetos que contiene la lista de categorías de consentimiento y sus propiedades.
EA_epmEnd();
#EA_epmEnd() : Empuja todas las categorías con su consentimiento asociado a Eulerian y activa las etiquetas de terceros si es necesario.

Enviar el consentimiento global

  • Usar la función EA_epmSetAllowAll() o EA_epmSetDenyAll().
  • Enviar los cambios a Eulerian usando la función EA_epmEnd().
  • Actualizar el valor de la cookie intermedia.
EA_epmSetAllowAll();
EA_epmEnd();
setSharedCookie(1);

// o

EA_epmSetDenyAll();
EA_epmEnd();
setSharedCookie(0);
Tu script funciona si:
  • EA_epmSetAllowAll() genera una llamada a Eulerian "misc" con pmact=clicksave y pm=1
  • EA_epmSetDenyAll() genera una llamada a Eulerian "misc" con pmact=denyall y pm=1

Enviar el consentimiento categoría por categoría

  • Recuperar obj_categories a través de EA_epmGet
  • Realizar las modificaciones necesarias en obj_categories
  • Actualizar el nuevo obj_categories
  • Empujar las modificaciones a Eulerian utilizando la función EA_epmEnd()
var categoria = EA_epmGet();
categoria[1].allowed=false;
categoria[1].denied=true;
setSharedCookie(1);
EA_epmSet(categoria);
EA_epmEnd();
La modificación del consentimiento en una categoría debe hacerse simultáneamente en las dos propiedades denied y allow para que sea tenida en cuenta. Es decir, para pasar la propiedad denied=true, también hay que declarar allow=false.
Tu script funciona si:EA_epmEnd() desencadena una llamada a Eulerian "misc" que contiene los parámetros:
  • pm=1
  • pmact=clicksave
  • pmcat: cpm_denied_category_id_1- cpm_denied_category_id_2-… (ej: 1-10-19)
pmcat se envía solo si al menos 1 categoría CPM está en denied

ESTRUCTURA DEL OBJETO "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}
]

Colocar la cookie intermedia

Debes colocar una cookie que valga 0 o 1 (más información a continuación). Esta cookie, que llamamos cookie intermedia, actuará como una salvaguardia y permitirá activar tus etiquetas de terceros y conectores 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'; /* Debe ser declarado en Eulerian */
var domaine = 'TU-DOMINIO.COM' /* EDITAR CON => tu dominio */
document.cookie = outCookieKey+'='+val+'; domain='+domaine+'; path=/; '+expires+'';
}

Ejemplo de integración

AtenciónEn este ejemplo debes reemplazar:
  • MI-SUB-DOMINIO con el valor de tu subdominio de seguimiento
  • var domaine = 'MI-DOMINIO' con tu propio dominio
  • var outCookieKey = 'EA_cookie_intermediaire' con el valor de tu cookie intermedia (Paso 2: Activación del gestor de consentimiento)
En la función send_consent_to_EA, debes gestionar el envío de la elección del usuario.
<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() {
setSharedCookie( 0 ); /* Double-protection with '0'. Even if a new categorie is created, it will not be fired */
EA_push('ondone', function() {
EA_epmSetDenyAll();
EA_epmEnd();
}
);
}

//endAllAllowed
//allow all categories
function endAllAllowed() {
setSharedCookie( 1 );
EA_push('ondone', function() {
EA_epmSetAllowAll();
EA_epmEnd();
});
}

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() {
setSharedCookie(1);
EA_epmEnd();
}


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>

Paso 4 bis: Instalación alternativa

Usar las solicitudes MISC

Tienes la posibilidad de llamar directamente a las solicitudes que son generadas por nuestra biblioteca para transmitir el consentimiento.
Estas llamadas se activan desde tu herramienta de gestión de consentimiento cuando el usuario valida el formulario de consentimiento.
https://{{DOMINIO_DE_SEGUIMIENTO}}/misc/{{SITIO_EULERIAN}}/{{CACHEBUSTER}}?pm=1&pmact=clicksave&&pmcat={{cmp_category_id_to_deny}}&url={{url_encoded}}
Valores a dinamizar
Nombres de las macros
Descripción
{{DOMINIO_DE_SEGUIMIENTO}}
El dominio de seguimiento utilizado por tus etiquetas Eulerian
{{SITIO_EULERIAN}}
El nombre del sitio en Eulerian
{{CACHEBUSTER}}
Fuerza la recarga de la llamada. Número aleatorio: 123123234 por ejemplo
{{cmp_category_id_to_deny}}
IDs de las categorías CMP para las cuales el cliente ha rechazado dar su consentimiento. Si hay varias categorías, usar el formato ID1-ID2-ID3
{{url_encoded}}
URL de la página activa codificada. https://www.journaldunet.com equivale a https%3A%2F% 2Fwww.journaldunet.com %2F
Parámetros URL
Nombres de los parámetros
Descripción
pm=1
Obligatorio - Toma en cuenta el nuevo consentimiento
pmact=clicksave
Obligatorio – vale clicksave
pmcat=cmp_category_id_to_deny
Opcional – ids de las categorías CMP a desactivar para este usuario

Utilizar vía tag adaptativo (sin cookie intermedia)

//@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);}

Paso 5: El consentimiento en una aplicación

Recuperar el consentimiento en una aplicación requiere modificar tu SDK para agregar un parámetro "pmcat" en el cual debes proporcionarnos los IDs de las categorías rechazadas por el usuario (IDs presentes en Eulerian), separados por un "-".
Así, si presentas 3 categorías a tu usuario:
  • categoría "análisis" (categoría con el ID 1 en Eulerian)
  • categoría "publicidad" (categoría con el ID 10 en Eulerian)
  • categoría "funcional" (categoría con el ID 19 en Eulerian)
Si el usuario rechaza la categoría de análisis y publicidad pero acepta la categoría "funcional", el parámetro "pmcat" deberá tener el valor "1-10".Si el usuario no rechaza ninguna categoría, entonces solo deberás empujar "-".

Ejemplo Android

Android sin valor:
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 con valores:
EAProperties genericTag = new EAProperties.Builder("|univers|rubrique|page")
.setUID("5434742")
.set("abonnement","mensuel")
.set("pmcat","1-2")
.build();
EAnalytics.getInstance().track(genericTag);

Ejemplo iOS

iOS sin valores:
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 con valores:
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)

Ejemplo noscript

Sin valores:
//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=
con valores:
//domain.client.tld/collector/-/544534509876.html?
uid=123456789
&urlp=univers%2Frubrique%2Fpage
&url=http%3A%2F%2Fwww.client.com%2F
&pmcat=1-2
&rf=
Leer también: documentación sobre integración del SDK de Eulerian.

Paso 6: Actualización de tus solicitudes guardadas para tener en cuenta el consentimiento del usuario

Solo si dispones del módulo de segmentación de Eulerian
Desde el audience engine (módulo de segmentación) tienes la posibilidad de enviar usuarios de 3 maneras:
  • Descargar una lista de identificadores que envías a tu partner
  • Enviar en un solo disparo una lista de identificadores a un partner a través de un conector nativo
  • Enviar todos los días una lista de identificadores a un partner a través de un conector nativo con la funcionalidad "consulta automatizada"
En los 3 casos, el consentimiento del usuario debe tenerse en cuenta. Para ello, integra en tus consultas la regla "Categorías de partners consentidas"
En el caso de una consulta automatizada, la integración de esta cláusula se hace en la consulta guardada que luego será automatizada