Skip to main content
All CollectionsFor WebTag Configuration
Conversion package (scripts)
Conversion package (scripts)

Setting up metrics you wish to track for all of your tests

Updated over 9 months ago

To have a conversion package, you should add this code to your pre-init script in your Tag.

There are two parts users typically maintain - the oConv array labelled Metrics, and Triggers.

/*

CONVERSION PACKAGE

*/

WT.ConversionPackage = function(){

try {


if(!window.WT.optimize || !WT.getProjectCookies){

setTimeout(WT.ConversionPackage, 200);

return;

}

var testAliasExclusionList = ['ta_dummy_exclude'];

// Metrics

var oConv = [

{

name: 'conversion_name',

regex: /example.com/i

},

{

name: "page_cart",

path: /^\/cart\/?$/i

},

{

name: "click_atb_pdp",

onEvent: "atb",

regex: /\/products/

},

{

name: "page_shipping",

path: /\/checkout/i,

ifCondition: function(){

return document.title.match(/\s*Shipping/i)

}

},

{

name: "purchase",

onEvent: "datalayer-ready",

collectData: function(){

let purchaseEvent = dataLayer.filter(x => x.ecommerce);

return {

revenue: purchaseEvent.purchase.actionField.revenue,

units: purchaseEvent.purchase.products.length

}

}

}

];

// Debugger

if (window.location.href.match(/_wt.convPackageDebug=true/i)) document.cookie = '_wt.convPackageDebug=true;path=/;';

var Print = {},

bDebug = Boolean(document.cookie.match(/_wt.convPackageDebug=true/i));

if (bDebug) {

Print.debug = window.console;

Print.debug.alert = window.alert;

} else {

Print.debug = {

log: function() {},

info: function() {},

warn: function() {},

error: function() {},

dir: function() {},

alert: function() {}

};

}

// Core

Print.debug.log('Conversion Package Running');

var Core = {};

WT.CPCore = Core;

// domainID & keyToken

var cfg = WT.optimizeModule.prototype.wtConfigObj;

var domainID = cfg.s_domainKey;

var keyToken = cfg.s_keyToken;

Core.cookieMethods = WT.helpers.cookie;

// Get testAliases

Core.getTestAliases = function () {

if (window.location.search.match(/cpDummy/i) && !Core.cookieMethods.has('wt_dummy_pkg')) {

var answer = window.prompt();

Core.cookieMethods.set('wt_dummy_pkg', answer, 1);

}

var cookies = document.cookie.match(/_wt.control\-\d+\-([^=]+)/g);

var projectCookies = document.cookie.match(/_wt.project/i);

if (!cookies && !projectCookies) return false;

var arr = [];

if (Core.cookieMethods.has('wt_dummy_pkg')) {

var dummyTa = Core.cookieMethods.get('wt_dummy_pkg');

arr.push(dummyTa);

} else if (cookies) {

for (var i = 0; i < cookies.length; i++) {

var c = cookies[i].replace(/_wt.control\-\d+\-/i, '');

arr.push(c);

}

}

if (WT.getProjectCookies) {

var list = Object.keys(WT.getProjectCookies());

for (var i = 0; i < list.length; i++) {

arr.push(list[i].replace(/_wt.control\-\d+\-/i, ''));

}

}

return arr;

};

/* -------------------- */

// Get matching url

Core.getMatchingUrl = function(wlh, regArr) {

for (var j = 0; j < regArr.length; j++) {

if (wlh.match(regArr[j])) {

Print.debug.log("page matches:", regArr[j]);

return true;

}

}

};

/* Fire CTrack2 for each Alias

-------------------------------------------------------------*/

Core.trackAliases = function (testAliases, testAliasExclusionList, me, dataInfo) {

dataInfo = (typeof dataInfo === 'undefined') ? {} : dataInfo;

//remove excluded Aliases

for(var l=0; l<testAliasExclusionList.length; l++) {

var excludedAlias = testAliasExclusionList[l];

index = testAliases.indexOf(excludedAlias);

if (index > -1) {

testAliases.splice(index, 1);

}

}

var o = {

testAlias: '',

conversionPoint: me.name,

additionalCookies: {},

data: dataInfo

};

var projectCookies = {};

if (WT.getProjectCookies) {

projectCookies = WT.getProjectCookies();

}

for (var k = 0; k < testAliases.length; k++) {

var tA = testAliases[k];

//collect control cookie

var cookiename = '_wt.control-' + domainID + '-' + tA;

var controlcookie = Core.cookieMethods.get(cookiename);

if (controlcookie) {

o.additionalCookies[cookiename] = { value: controlcookie };

}

var pcookie = projectCookies[cookiename];

if (pcookie) o.additionalCookies[cookiename] = pcookie;

}

// Aliases: ta_1,ta_2

var testAliasString = testAliases.join()

o.testAlias = testAliasString;

o.additionalCookies['_wt.user-'+ domainID] = {value: Core.cookieMethods.get('_wt.user-'+ domainID)};

o.additionalCookies['_wt.mode-'+ domainID] = {value: Core.cookieMethods.get('_wt.mode-'+ domainID)};

Print.debug.log("ctrack:", o);

WTO_CTrack2(o);

};

WT.trackEvent = function(o){

Core.trackAliases(

[o.testAlias],

[],

{

name: o.conversionPoint

},

o.data || {}

);

};

/* Evaluate oConv Object

-------------------------------------------------------------*/

function doEvaluate(onEvent){

var wlh = window.location.href;

var testAliases = Core.getTestAliases();

if(!testAliases || !testAliases.length) return;

for(var i=0; i<oConv.length; i++){

var me = oConv[i];

// Check onEvent is correct

if((!onEvent && !me.onEvent) || me.onEvent == onEvent){

// fine

} else {

continue; // skip this one.

}

// Check regex

if(me.regex){

var regArr = (me.regex instanceof Array) ? me.regex : [me.regex];

var urlMatched = Core.getMatchingUrl(wlh, regArr);

if(!urlMatched) continue;

}

if(me.path){

var regArr = (me.regex instanceof Array) ? me.regex : [me.regex];

var urlMatched = Core.getMatchingUrl(location.pathname, regArr);

if(!urlMatched) continue;

}

//Conditional Conversion

if(me.ifCondition){

try {

if(!me.ifCondition()){

continue;

}

} catch(err) {

continue;

}

}

//Check if we need to collect data

var data = {};

if( typeof me.collectData === 'function') {

try {

data = me.collectData();

} catch(err){}

}

Core.trackAliases(testAliases, testAliasExclusionList, me, data);

}//url loop

}

/* CTrack2

-------------------------------------------------------------*/

var WTO_CTrack2 = function(params) {

var OTS_ACTION = params.conversionPoint ? "track" : "control";

var OTS_GUID = domainID + (params.testAlias ? "-" + params.testAlias : "");

var useTestGroupShared = false;

var OTS_URL_POST = "https://ots.webtrends-optimize.com/ots/api/rest-1.2/" + OTS_ACTION + "/" + OTS_GUID;

// Send request only when there is at least one Optimize cookie

var aCookies = params.additionalCookies || {};

var cookiesFound = document.cookie.match(/_wt\.(user|mode)-[^=]+=[^;\s$]+/ig);

if (cookiesFound) {

/* Send conversion request

-------------------------------------------------------------*/

var qpURL = "\x26url\x3d" + (params.URL ? encodeURIComponent(params.URL) : window.location.origin + window.location.pathname);

var qpConversion = params.conversionPoint && "\x26conversionPoint\x3d" + params.conversionPoint || "";

var qpData = params.data ? "\x26data\x3d" + JSON.stringify(params.data) : "";

var offsetValue = function() {

var rightNow = new Date;

var offset = -rightNow.getTimezoneOffset() / 60;

return offset * 1E3 * 60 * 60

};

var offset = "\x26_wm_TimeOffset\x3d" + offsetValue();

var referrer = "";

if (window.document && window.document.referrer && document.referrer !== "") referrer = "\x26_wm_referer\x3d" + document.referrer;

var rqElSrc = "keyToken\x3d" + keyToken + "\x26preprocessed\x3dtrue\x26_wt.encrypted\x3dtrue\x26testGroup\x3d" + (useTestGroupShared ? "shared" : "default") + qpURL + "\x26cookies\x3d" + JSON.stringify(aCookies) + qpConversion + qpData + offset + referrer;

Print.debug.log("--- Sending Request ---");

Print.debug.log(rqElSrc);

if ( navigator.sendBeacon && window.Blob ) {

var blob = new Blob([rqElSrc], { type: 'application/x-www-form-urlencoded' });

navigator.sendBeacon(OTS_URL_POST, blob);

} else {

var xhttp = new XMLHttpRequest();

xhttp.open("POST", OTS_URL_POST, true);

xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhttp.send(rqElSrc)

}

}

};

WT.helpers.CTrack2 = WTO_CTrack2;

/* Triggers

-------------------------------------------------------------*/

// On page load

doEvaluate(false);

// Poll for page change

var curURL = window.location.href;

setInterval(function(){

if(window.location.href !== curURL){

curURL = window.location.href;

Print.debug.log('path changed');

doEvaluate(false);

}

}, 1000);

/* window.opt_data

-------------------------------------------------------------*/

function processOptData(aEntry){

try {

if(!(aEntry instanceof Array)) return "bad input"; // bad input

var testAliases = Core.getTestAliases();

if(!testAliases || !testAliases.length) return "no control cookies found, nothing to store.";

aEntry.forEach(function(o){

if(o.event){

var o_data = {};

if(o.data){

// clean data. only keep types we can store.

for(var key in o.data){

if( !(typeof o.data[key]).match(/number|string/i) ){

continue; // bad data type, move on.

}

o_data[key] = o.data[key];

}

}

Core.trackAliases(testAliases, testAliasExclusionList, {

name: o.event

}, o_data);

}

});

} catch(err){}

}

if(window.opt_data && opt_data.length){

// we have records, do something with it.

processOptData(opt_data);

}

if(!window.opt_data || window.opt_data instanceof Array){

window.opt_data = {

h: (window.opt_data || []),

push: function(o){

try {

if(!o) return "opt_data.push - missing any arguments";

if(!o.event) return "opt_data.push - you should provide o.event";

this.h.push(o);

processOptData([o]);

return this.h;

} catch(err){

return err;

}

}

};

}

} catch(err){

// console.warn(err);

if(document.cookie.match(/_wt.bdebug=true/i)) console.log(err);

}

};

WT.ConversionPackage();

Minified conversion package

/*

CONVERSION PACKAGE

*/

WT.ConversionPackage = function(){

try {


if(!window.WT.optimize || !WT.getProjectCookies){

setTimeout(WT.ConversionPackage, 200);

return;

}

var testAliasExclusionList = ['ta_dummy_exclude'];

// Metrics

var oConv = [

{

name: 'conversion_name',

regex: /example.com/i

},

{

name: "page_cart",

path: /^\/cart\/?$/i

},

{

name: "click_atb_pdp",

onEvent: "atb",

regex: /\/products/

},

{

name: "page_shipping",

path: /\/checkout/i,

ifCondition: function(){

return document.title.match(/\s*Shipping/i)

}

},

{

name: "purchase",

onEvent: "datalayer-ready",

collectData: function(){

let purchaseEvent = dataLayer.filter(x => x.ecommerce);

return {

revenue: purchaseEvent.purchase.actionField.revenue,

units: purchaseEvent.purchase.products.length

}

}

}

];

if (window.location.href.match(/_wt.convPackageDebug=true/i)) document.cookie = '_wt.convPackageDebug=true;path=/;'; var Print = {}, bDebug = Boolean(document.cookie.match(/_wt.convPackageDebug=true/i)); if (bDebug) { Print.debug = window.console; Print.debug.alert = window.alert; } else { Print.debug = { log: function() {}, info: function() {}, warn: function() {}, error: function() {}, dir: function() {}, alert: function() {} }; } Print.debug.log('Conversion Package Running'); var Core = {}; WT.CPCore = Core; var cfg = WT.optimizeModule.prototype.wtConfigObj; var domainID = cfg.s_domainKey; var keyToken = cfg.s_keyToken; Core.cookieMethods = WT.helpers.cookie; Core.getTestAliases = function () { if (window.location.search.match(/cpDummy/i) && !Core.cookieMethods.has('wt_dummy_pkg')) { var answer = window.prompt(); Core.cookieMethods.set('wt_dummy_pkg', answer, 1); } var cookies = document.cookie.match(/_wt.control\-\d+\-([^=]+)/g); var projectCookies = document.cookie.match(/_wt.project/i); if (!cookies && !projectCookies) return false; var arr = []; if (Core.cookieMethods.has('wt_dummy_pkg')) { var dummyTa = Core.cookieMethods.get('wt_dummy_pkg'); arr.push(dummyTa); } else if (cookies) { for (var i = 0; i < cookies.length; i++) { var c = cookies[i].replace(/_wt.control\-\d+\-/i, ''); arr.push(c); } } if (WT.getProjectCookies) { var list = Object.keys(WT.getProjectCookies()); for (var i = 0; i < list.length; i++) { arr.push(list[i].replace(/_wt.control\-\d+\-/i, '')); } } return arr; }; Core.getMatchingUrl = function(wlh, regArr) { for (var j = 0; j < regArr.length; j++) { if (wlh.match(regArr[j])) { Print.debug.log("page matches:", regArr[j]); return true; } } }; Core.trackAliases = function (testAliases, testAliasExclusionList, me, dataInfo) {dataInfo = (typeof dataInfo === 'undefined') ? {} : dataInfo;for(var l=0; l<testAliasExclusionList.length; l++) {var excludedAlias = testAliasExclusionList[l];index = testAliases.indexOf(excludedAlias);if (index > -1) {testAliases.splice(index, 1);}} var o = { testAlias: '', conversionPoint: me.name, additionalCookies: {}, data: dataInfo }; var projectCookies = {}; if (WT.getProjectCookies) { projectCookies = WT.getProjectCookies(); } for (var k = 0; k < testAliases.length; k++) { var tA = testAliases[k]; var cookiename = '_wt.control-' + domainID + '-' + tA; var controlcookie = Core.cookieMethods.get(cookiename); if (controlcookie) { o.additionalCookies[cookiename] = { value: controlcookie }; } var pcookie = projectCookies[cookiename]; if (pcookie) o.additionalCookies[cookiename] = pcookie; } var testAliasString = testAliases.join(); o.testAlias = testAliasString; o.additionalCookies['_wt.user-'+ domainID] = {value: Core.cookieMethods.get('_wt.user-'+ domainID)}; o.additionalCookies['_wt.mode-'+ domainID] = {value: Core.cookieMethods.get('_wt.mode-'+ domainID)}; Print.debug.log("ctrack:", o); WTO_CTrack2(o); }; WT.trackEvent = function(o){ Core.trackAliases( [o.testAlias], [], { name: o.conversionPoint }, o.data || {} ); }; function doEvaluate(onEvent){ var wlh = window.location.href; var testAliases = Core.getTestAliases(); if(!testAliases || !testAliases.length) return; for(var i=0; i<oConv.length; i++){ var me = oConv[i]; if((!onEvent && !me.onEvent) || me.onEvent == onEvent){ } else { continue; } if(me.regex){ var regArr = (me.regex instanceof Array) ? me.regex : [me.regex]; var urlMatched = Core.getMatchingUrl(wlh, regArr); if(!urlMatched) continue; } if(me.path){ var regArr = (me.regex instanceof Array) ? me.regex : [me.regex]; var urlMatched = Core.getMatchingUrl(location.pathname, regArr); if(!urlMatched) continue; } if(me.ifCondition){ try { if(!me.ifCondition()){ continue; } } catch(err) { continue; } } var data = {}; if( typeof me.collectData === 'function') { try { data = me.collectData(); } catch(err){}} Core.trackAliases(testAliases, testAliasExclusionList, me, data); }}; var WTO_CTrack2 = function(params) { var OTS_ACTION = params.conversionPoint ? "track" : "control"; var OTS_GUID = domainID + (params.testAlias ? "-" + params.testAlias : ""); var useTestGroupShared = false; var OTS_URL_POST = "https://ots.webtrends-optimize.com/ots/api/rest-1.2/" + OTS_ACTION + "/" + OTS_GUID; var aCookies = params.additionalCookies || {}; var cookiesFound = document.cookie.match(/_wt\.(user|mode)-[^=]+=[^;\s$]+/ig); if (cookiesFound) { var qpURL = "\x26url\x3d" + (params.URL ? encodeURIComponent(params.URL) : window.location.origin + window.location.pathname); var qpConversion = params.conversionPoint && "\x26conversionPoint\x3d" + params.conversionPoint || ""; var qpData = params.data ? "\x26data\x3d" + JSON.stringify(params.data) : ""; var offsetValue = function() { var rightNow = new Date; var offset = -rightNow.getTimezoneOffset() / 60; return offset * 1E3 * 60 * 60; }; var offset = "\x26_wm_TimeOffset\x3d" + offsetValue(); var referrer = ""; if (window.document && window.document.referrer && document.referrer !== "") referrer = "\x26_wm_referer\x3d" + document.referrer; var rqElSrc = "keyToken\x3d" + keyToken + "\x26preprocessed\x3dtrue\x26_wt.encrypted\x3dtrue\x26testGroup\x3d" + (useTestGroupShared ? "shared" : "default") + qpURL + "\x26cookies\x3d" + JSON.stringify(aCookies) + qpConversion + qpData + offset + referrer; Print.debug.log("--- Sending Request ---"); Print.debug.log(rqElSrc); if ( navigator.sendBeacon && window.Blob ) { var blob = new Blob([rqElSrc], { type: 'application/x-www-form-urlencoded' }); navigator.sendBeacon(OTS_URL_POST, blob); } else { var xhttp = new XMLHttpRequest(); xhttp.open("POST", OTS_URL_POST, true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send(rqElSrc); } } }; WT.helpers.CTrack2 = WTO_CTrack2;

/* Triggers

-------------------------------------------------------------*/

// On page load

doEvaluate(false);

// Poll for page change

var curURL = window.location.href;

setInterval(function(){

if(window.location.href !== curURL){

curURL = window.location.href;

Print.debug.log('path changed');

doEvaluate(false);

}

}, 1000);

function processOptData(aEntry){ try { if(!(aEntry instanceof Array)) return "bad input"; var testAliases = Core.getTestAliases(); if(!testAliases || !testAliases.length) return "no control cookies found, nothing to store."; aEntry.forEach(function(o){if(o.event){var o_data = {};if(o.data){for(var key in o.data){if( !(typeof o.data[key]).match(/number|string/i) ){continue;}o_data[key] = o.data[key];}} Core.trackAliases(testAliases, testAliasExclusionList, { name: o.event }, o_data); }}); } catch(err){} } if(window.opt_data && opt_data.length){processOptData(opt_data)} if(!window.opt_data || window.opt_data instanceof Array){window.opt_data = {h:(window.opt_data || []),push: function(o){try {if(!o) return "opt_data.push - missing any arguments";if(!o.event) return "opt_data.push - you should provide o.event";this.h.push(o);processOptData([o]);return this.h;} catch(err){return err;}}};}} catch(err){if(document.cookie.match(/_wt.bdebug=true/i)) console.log(err);}

};

WT.ConversionPackage();

Did this answer your question?