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.