Geschrieben von

generateRandom API: Google Tag Manager Server

Webtracking

In diesem Beitrag geht es um die generateRandom-API, welches im Google Tag Manager-Server benutzt werden kann.

generateRandom

Die generateRandom-API macht im Grunde etwas ganz einfaches: Sie gibt innerhalb eines selbst definierten Bereichs eine zufällige Zahl (Integer) zurück.

Beispiel und Syntax

Zuerst muss die API geladen werden:

const generateRandom = require('generateRandom');

Die grundlegende Syntax lautet:

generateRandom(min, max);

“min” definiert den minimalsten Wert, während “max” den höchsten Wert definiert. Ausgegeben wird dann ein zufälliger Wert zwischen angegebenen min- und max-Wert (inkl. min- und max-Wert):

const randomValue = generateRandom(0, 10);
return randomValue; // Würde z.B. 8 zurückgeben

“min” und “max” sind Pflicht-Parameter, ansonsten gibt generateRandom einen Fehler zurück.

generateRandom API mit Beispiel

Gehen wir davon aus, wir möchten eine ID für unterschiedliche Zwecke im folgenden Format generieren:

ttls-cl4w-9OWG-toBb-BJpU-HdGyxK8544ss

Leider gibt es im Server-Container keine Math.random()-Funktion auf die man zurückgreifen kann. Daher müssen wir das über die generateRandom-API implementieren. Das heißt wir brauchen:

  • 32 Zeichen, die zufällig generiert werden.
  • Die zufällig generierten Zeichen sollten an bestimmten Stellen durch ein “-” getrennt werden.

Im ersten Schritt brauchen wir die generateRandom-API (in einem Variablen-Template):

const generateRandom = require('generateRandom');

Dann brauchen wir auch die Zeichen, die wir zufällig generieren möchten:

const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

Im nächsten Schritt erstelle ich eine Helper-Funktion und übergebe ein Array (dazu gleich mehr). Aus diesem Array gebe ich mir einen zufälligen Wert über die generateRandom-API zurück:

const randomElement = (arr) => {
  return arr[generateRandom(0, arr.length - 1)];
};

Nun folgt die eigentliche Funktion, die die ganze Arbeit macht. Starten wir mit der Deklaration der Funktion:

const randomIdGenerator = () => {
 
};

Zuerst brauche ich ein Array meiner Zeichen und eine Variable, wo ich 32 zufällig generierte Zeichen reinpacken kann:

const randomIdGenerator = () => {
 const charactersArr = characters.split('');
 let idPlain = '';
};

Jetzt kommt die Logik um die Variable idPlain zu befüllen. Hier kommt dann unsere Helper-Funktion zum Einsatz:

const randomIdGenerator = () => {
 const charactersArr = characters.split('');
 let idPlain = '';
 
 for (let i = 0; i < 32; i++) {
  idPlain += randomElement(charactersArr);
 }
};

Es wird also 32-mal ein zufälliges Zeichen aus meiner characters-Varibale gewählt und in die Variable "idPlain" gepackt. Danach kommt die Logik, um noch den Trenner (Minus z.B.) an den gewünschten Stellen zu platzieren:

const randomIdGenerator = () => {
 const charactersArr = characters.split('');
 let idPlain = '';
 
 for (let i = 0; i < 32; i++) {
  idPlain += randomElement(charactersArr);
 }
 
 const indices = [4, 8, 12, 16, 20];
 var idCustom = idPlain.split('');
 indices.reverse().forEach(i => idCustom.splice(i, 0, '-'));
 return idCustom.join('');
};

Und zum Schluss alles nochmal zurückgeben. Fertig sieht die Vorlage wie folgt aus:

const generateRandom = require('generateRandom');
 
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
 
const randomElement = (arr) => {
  return arr[generateRandom(0, arr.length - 1)];
};
 
const randomIdGenerator = () => {
 const charactersArr = characters.split('');
 let idPlain = '';
 
 for (let i = 0; i < 32; i++) {
  idPlain += randomElement(charactersArr);
 }
 
 const indices = [4, 8, 12, 16, 20];
 var idCustom = idPlain.split('');
 indices.reverse().forEach(i => idCustom.splice(i, 0, '-'));
 return idCustom.join('');
};
 
const final = randomIdGenerator();
return final;

Ich habe für eine ähnliche Logik ein Custom Template geschrieben, welches unter https://github.com/demirj/gtm-server-id-generator-template erreichbar ist (und vielleicht auch bald in der Google Tag Manager Vorlagen-Gallerie). Im Template habe ich zusätzlich weitere Logiken implementiert. Damit können Trenner und Zeichenlänge gewählt werden.