El objetivo de esta página es englobar, dar información de uso y transparencia de ejecución a los diferentes equipos de implementación acerca de la implementación común de permutive en entorno web no AMP.
:warning: Para estar al tanto de las ultimas actualizaciones considera suscribirte al repositorio
Se delega la ejecución de cualquier proceso de datos a la obtención de consentimiento del usuario.
Al no ser el DMP un vendor que realice procesamiento per se, sino que simplemente da la herramienta de procesamiento para ser usada por terceros, la forma elegida es preguntar por los propósitos para los que el usuario ha dado consentimiento.
Dependiendo de la versión de implementación:
TCF v2
"1": Store and/or access information on a device
"3": Create a personalised ads profile
"4": Select personalised ads
"7": Measure ad performance
"10": Develop and improve products
TCF v1
"1": Storage and access of information
"2": Personalisation
"3": Ad selection, delivery, reporting
"5": Measurement
Esta documentación corresponde a una integración Single, indicada para páginas en las que existe una única instancia de Permutive.
Todos los métodos wemass están pensados para ejecutarse tras un buffer (__wmass.bff), el cual es inicializado manualmente, por lo que la posibilidad de errores será minimizada.
Existe una excepción a esto, el método getSegments, el cual será inicializado manualmente en una versión básica ya que los segmentos son almacenados en localStorage, y potencialmente podría ser utilizados antes de que el motor del DMP sea inicializado.
El DMP usa un esquema de validación para conjuntos de propiedad-valor y eventos.
Si se incluye una propiedad o nombre de evento no declarados (estos valores son case-sensitive), o un valor no apropiado para el esquema, esto será rechazado con un error 400.
Para añadir o modificar estos valores, por favor contacta con wemass.
Este paso ha de ejecutarse antes de poder usar ningún otro método y debe de ser ejecutado en el objeto window superior de la página. Cuanto más arriba en el propio código fuente de la página, mejor.
<script>
window.__wmass = window.__wmass || {};
window.__wmass.bff = window.__wmass.bff || [];
window.__wmass.getSegments =
window.__wmass.getSegments ||
function () {
let pSegs = [];
try {
pSegs = JSON.parse(window.localStorage._papns || "[]")
.slice(0, 250)
.map(String);
} catch (e) {
pSegs = [];
}
return { permutive: pSegs };
};
</script>
<script async src="__URLWemassService__"></script>
- :warning: Wemass hará llegar el código correcto. No usar este código en producción.
warning: No se debe cachear el resultado de la funcion __wmass.getSegments el contenido que devuelve puede variar en funcion de el momento de ejecucion y la propia funcion es sobreescrita una vez que el sdk termina de cargar. Ver Función getSegments
Estos son los atributos que se han de pasar al DMP, en caso de que alguno de ellos no se pueda rellenar se ha de pasar un string vacío. Este código ha de lanzarse lo antes posible en la ejecución, idealmente justo después de la inicialización. Hay que tener en cuenta los siguientes puntos:
:warning: Importante: aqui aplican los Esquemas de validación
<script>
__wmass.bff.push(function () {
/*Si se dispone de algún tipo de identificador del usuario cuando se carga la página se debería ejecutar este código Ver la sección de #enviando-atributos-de-la-página-al-dmp para más información.
if (USER_ID_AVAILABLE) {
__wmass.dmp.identify([
{
id: '<USER_ID>',
tag: '<ID_TAG>'
}
]);
}*/
__wmass.dmp.addon("web", {
page: {
type: "<STRING>",
content: {
categories: ["<LIST>", "<OF>", "<STRINGS>"],
},
article: {
id: "<STRING>",
title: "<STRING>",
description: "<STRING>",
topics: ["<LIST>", "<OF>", "<STRINGS>"],
authors: ["<LIST>", "<OF>", "<STRINGS>"],
modifiedAt: "< DATE / TIME > ",
publishedAt: "< DATE / TIME > ",
premium: "< BOOLEAN >",
wordCount: "< INTEGER >",
paragraphCount: "< INTEGER >",
section: "<STRING>",
subsection: "<STRING>",
},
user: {
type: "<STRING>",
age: "< INTEGER >",
gender: "<STRING>",
},
},
});
});
</script>
Este código es el que se encarga de enviar los identificadores disponibles para el usuario. Identify requiere un array de objetos, cada uno de estos objetos requiere las propiedades:
Se debe tener en cuenta los siguientes puntos:
- :warning: Importante: aqui aplican los Esquemas de validación
warning: Este paso es especialmente necesario en Safari debido a las restricciones de ITP respecto al uso de localStorage.
__wmass.bff.push(function () {
if (USER_ID_AVAILABLE) {
__wmass.dmp.identify([
{
id: "<USER_ID>",
tag: "<ID_TAG>",
},
]);
}
//__wmass.dmp.addon('web', {... });
});
En aquellas páginas con scroll infinito se ha de llamar a la función addon sin pasar los atributos de usuario (a no ser que estos hayan cambiado).
:warning: Importante: aqui aplican los Esquemas de validación
__wmass.bff.push(function () {
__wmass.dmp.addon('web', {
page: {
type: "<STRING>",
content: {
categories: ["<LIST>", "<OF>", "<STRINGS>"]
},
article: {
id: "<STRING>",
title: "<STRING>",
description: "<STRING>",
topics: ["<LIST>", "<OF>", "<STRINGS>"],
authors: ["<LIST>", "<OF>", "<STRINGS>"],
modifiedAt: "< DATE / TIME > ",
publishedAt: "< DATE / TIME > ",
premium: "< BOOLEAN >",
wordCount: "< INTEGER >",
paragraphCount: "< INTEGER >",
section: "<STRING>",
subsection: "<STRING>"
}
});
});
let segmentList = __wmass.getSegments({ format: "msft" });
getSegments devolverá los segmentos adaptados al formato de msft.
La funcion permite como argumento un objeto de opciones. Las propiedades utilizadas en esta integración son:
"msft".Es importante para obtener los segmentos usar la función __wmass.getSegments() ya que, aunque se inicializa con una funcionalidad estática en el setUp del DMP. Una vez que se inicializa el mismo, su funcionalidad podría cambiar.
Se han de pasar los datos de los segmentos de permutive a msft.
:warning: Este código es un ejemplo: adaptar para cada necesidad
En msft los segmentos se han de pasar dentro del parámetro keywords como se puede ver en el ejemplo.
El parámetro admite un objeto cuyas propiedades tienen un array de strings. La función __wmass.getSegments({ format: "msft" }) devolverá los valores listos para usar.
let wemassDataSegments = __wmass.getSegments({ format: "msft" }),
adUnits = [
{
code: "your prebid AdUnit code here",
mediaTypes: {
banner: {
sizes: [
[300, 250],
[300, 600],
],
},
},
bids: [
{
bidder: "msft",
params: {
placementId: 13144370,
keywords: wemassDataSegments,
},
},
],
},
];
pbjs.addAdUnits(adUnits);
Se incluyen aquí otras posibilidades que permite el DMP, para más detalles sobre implementación y uso contacte con wemass.
Se puede preguntar por el estado de inclusión de un segmento predefinido para realizar alguna acción en la página
__wmass.bff.push(function () {
__wmass.dmp.segment(idEvento, function (result) {
if (result) {
// El usuario pertenece al segmento indicado
}
});
});
:warning: Debido a la inmediatez de la ejecución de prebid es mejor, para enviar los segmentos a los SSP usar la funcion estatica __wmass.getSegments({ format: "msft" })
Es posible hacer seguimiento de acciones que realice el usuario en tiempo real, por ejemplo, rellenando una encuesta, usando la funcion track.
__wmass.bff.push(function () {
__wmass.dmp.track("CustomEventName", { dataItem: true }, opciones);
});
Es posible asociar callbacks a interacciones cuando un usuario es incluido en un segmento a través de un Evento.
__wmass.bff.push(function () {
__wmass.dmp.trigger(idEvento, "result", function(obj){
if(obj.result)
//realizar acciones necesarias
});
});
:warning: Importante: aqui aplican los Esquemas de validación