Skip to content

Instantly share code, notes, and snippets.

@mbaersch
Created September 8, 2020 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mbaersch/0524eb9cb4093b31f2085b887202a595 to your computer and use it in GitHub Desktop.
Save mbaersch/0524eb9cb4093b31f2085b887202a595 to your computer and use it in GitHub Desktop.
Serverside GTM Demo Client + Tag Template
___INFO___
{
"type": "CLIENT",
"id": "cvt_temp_public_id",
"version": 1,
"securityGroups": [],
"displayName": "Demo Logger",
"brand": {
"id": "brand_dummy",
"displayName": ""
},
"description": "",
"containerContexts": [
"SERVER"
]
}
___TEMPLATE_PARAMETERS___
[]
___SANDBOXED_JS_FOR_SERVER___
//Alle APIs, die wir zum Lesen, Verarbeiten und Weitergeben brauchen, werden hier geladen
const claimRequest = require('claimRequest');
const returnResponse = require('returnResponse');
const getRequestQueryParameter = require('getRequestQueryParameter');
const runContainer = require('runContainer');
const setPixelResponse = require('setPixelResponse');
const getRequestHeader = require('getRequestHeader');
const getRequestPath = require('getRequestPath');
const getRemoteAddress = require('getRemoteAddress');
//Wurde "unser" Endpunkt angesprochen? Wenn ja, sind die Daten für
//diesen Client relevant, sonst tun wir nichts
if (getRequestPath() === '/demologger') {
//Wir werden die Daten verarbeiten, kein anderer Client muss diese dann noch bekommen
claimRequest();
//Auslesen der drei erforderlichen Parameterwerte aus der Anfrage
//oder im Fall der url entweder per Parameter oder aus dem Referrer des Aufrufs
//Sonderfall cid: Wir nutzen eine Konstante, wenn diese fehlen sollte
const ref = getRequestQueryParameter('ref');
const url = getRequestQueryParameter('url') || getRequestHeader('Referer');
const cid = getRequestQueryParameter('cid') || 666;
//Exemplarisch "erheben" wir auch den User Agent und die IP, um diese
//allen nutzenden Tags zur Verfügung zu stellen
const ip = getRemoteAddress();
const ua = getRequestHeader('user-agent');
//Daten zusammenstellen, die den Tags zur Verfügung gestellt werden sollen
var event = {event_name : "page_view", page_location : url, client_id : cid,
ip_override : ip, user_agent : ua, page_referrer: ref};
//Container aufrufen und Daten übergeben, danach ein Pixel als Antwort auf den Request senden
runContainer(event, () => {
setPixelResponse();
returnResponse();
});
}
___SERVER_PERMISSIONS___
[
{
"instance": {
"key": {
"publicId": "read_request",
"versionId": "1"
},
"param": [
{
"key": "queryParametersAllowed",
"value": {
"type": 8,
"boolean": true
}
},
{
"key": "remoteAddressAllowed",
"value": {
"type": 8,
"boolean": true
}
},
{
"key": "headersAllowed",
"value": {
"type": 8,
"boolean": true
}
},
{
"key": "pathAllowed",
"value": {
"type": 8,
"boolean": true
}
},
{
"key": "queryParameterAccess",
"value": {
"type": 1,
"string": "any"
}
},
{
"key": "requestAccess",
"value": {
"type": 1,
"string": "specific"
}
},
{
"key": "headerAccess",
"value": {
"type": 1,
"string": "any"
}
}
]
},
"clientAnnotations": {
"isEditedByUser": true
},
"isRequired": true
},
{
"instance": {
"key": {
"publicId": "return_response",
"versionId": "1"
},
"param": []
},
"isRequired": true
},
{
"instance": {
"key": {
"publicId": "access_response",
"versionId": "1"
},
"param": [
{
"key": "writeResponseAccess",
"value": {
"type": 1,
"string": "any"
}
},
{
"key": "writeHeaderAccess",
"value": {
"type": 1,
"string": "specific"
}
}
]
},
"clientAnnotations": {
"isEditedByUser": true
},
"isRequired": true
},
{
"instance": {
"key": {
"publicId": "run_container",
"versionId": "1"
},
"param": []
},
"isRequired": true
}
]
___TESTS___
scenarios: []
___NOTES___
Created on 8.9.2020, 23:39:33
___INFO___
{
"type": "TAG",
"id": "cvt_temp_public_id",
"version": 1,
"securityGroups": [],
"displayName": "Demo Tag",
"brand": {
"id": "brand_dummy",
"displayName": ""
},
"description": "",
"containerContexts": [
"SERVER"
]
}
___TEMPLATE_PARAMETERS___
[
{
"type": "TEXT",
"name": "endpointUrl",
"displayName": "Da gehts hin",
"simpleValueType": true
}
]
___SANDBOXED_JS_FOR_SERVER___
const getAllEventData = require('getAllEventData');
const sendHttpGet = require('sendHttpGet');
const encodeUriComponent = require('encodeUriComponent');
//URL des Trackers aus den Feldern lesen
const serviceUrl = data.endpointUrl;
//Alle Event-Daten lesen (weil wir faul sind)
const eventData = getAllEventData();
//Die beiden verwendeten Datenelemente auslesen
const url = encodeUriComponent(eventData.page_location || "");
const cid = encodeUriComponent(eventData.client_id || "");
//Wenn wenigstens eine URL oder ID da sind, Trackinghit
//senden. Sonst Fehler an Container zurückmelden
if (cid || url) {
sendHttpGet(serviceUrl + '?cid='+cid+'&loc='+url);
data.gtmOnSuccess();
} else data.gtmOnFailure();
___SERVER_PERMISSIONS___
[
{
"instance": {
"key": {
"publicId": "read_event_data",
"versionId": "1"
},
"param": [
{
"key": "eventDataAccess",
"value": {
"type": 1,
"string": "any"
}
}
]
},
"clientAnnotations": {
"isEditedByUser": true
},
"isRequired": true
},
{
"instance": {
"key": {
"publicId": "send_http",
"versionId": "1"
},
"param": [
{
"key": "allowedUrls",
"value": {
"type": 1,
"string": "any"
}
}
]
},
"clientAnnotations": {
"isEditedByUser": true
},
"isRequired": true
}
]
___TESTS___
scenarios: []
___NOTES___
Created on 8.9.2020, 23:40:09
@mbaersch
Copy link
Author

mbaersch commented Sep 8, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment