Obwohl uns das Tag Management (und dataLayer) die Arbeit in der Konfiguration der Digitalen Analyse enorm erleichtert, so bietet es doch eine neue Fehlerquelle: dataLayer Variablen ändern sich plötzlich im dataLayer (gern auch mal ohne ChangeRequest ). Oft wird es erst viel später bemerkt, dass keine Daten vorhanden sind oder schlimmer, eine Änderung betrifft nur einen Teil der User und es werden falsche Zahlen generiert, ohne es zu wissen oder nachvollziehen zu können. Denn Datenqualität ist häufig ein Problem schon am dataLayer. Daher ein kurzer PoC zur Erfassung nicht vorhandener dataLayer Variablen im GTM beim Senden an Google Analytics mit Realtime Anbindung an Slack.
Der Workflow
Der Workflow ist sehr einfach:
- Zuerst werden alle dataLayer Variablen mit einem Default Wert ausgestattet, der anzeigt, dass diese nicht gesetzt sind.
- Der Google Analytics Hit wird per customTask kopiert, transformiert und an eine Cloud Function gesendet
- Die Cloud Function sendet die Information Slack
1. dataLayer Variablen mit Default Wert ausstatten
Das Setzen eines Default-Wertes in jeder DataLayer Variable zeigt an, das kein Wert im dataLayer der Variable zugeordnet werden kann, da sonst der Default-Wert überschrieben werden würde. Damit das funktioniert, muss natürlich ein Default-Wert genutzt werden, der nicht im Setup vorkommt, in diesem Beispiel „notset“. Wird kein Default Wert gesetzt und die Custom Dimension würde im GTM als undefined angezeigt, wird die jeweilige Custom Dimension im Google Analytics Hits nicht mehr mitgesendet und eine Prüfung auf einen fehlenden Wert ist nicht mehr möglich so einfach möglich.
2. Daten per customTask an Cloud Function senden
Bevor die Daten gesendet werden können, wird in der Google Cloud Platform ein Cloud-Function benötigt. Für dieses Beispiel nutze ich eine Cloud-Function namens „slack_webhook“ mit Python 3.7. und HTTP Trigger. Diese erwartet den Hit als GET-Parameter und dem Key „message“, also
https://<cloudfunctionidhiereinfügen>.cloudfunctions.net/slack_webhook?message=<GoogleAnalyticsHit>
Wie üblich, wird der customTask als Custom Javascript Variable im GTM angelegt.
Um alle Daten in message zu erhalten, ersetzen wir im customTask noch = durch – und & durch – und rufen dann die URL der Cloud-Function mit dem hitPayload auf. Vor dem Absenden prüfen wir noch auf den Default-Wert, damit nicht jeder Hit an die Cloud Function gesendet wird.
function() {
var globalSendTaskName = '_Slack_originalSendTask';
return function(customModel) {
window[globalSendTaskName] = window[globalSendTaskName] || customModel.get('sendHitTask');
customModel.set('sendHitTask', function(sendModel) {
var hitPayload = sendModel.get('hitPayload');
hitPayload=hitPayload.replace(/=/g,"-");
hitPayload=hitPayload.replace(/&/g,"--");
var url='https:/<clouodid>.cloudfunctions.net/slack_webhook?message='+hitPayload;
if (hitPayload.includes("notset")){
fetch(url)
.catch(function(error) {console.log('Looks like there was a problem: \n', error);});}
});
};
}
Hinweis: Sollte ein „notset“ im Hit auftreten, würde in diesem Setup jeder User den Fehler an Slack senden. Daher ist es gerade bei Webseiten die nicht nur sporadisch besucht werden, sinnvoll, sich auf Samples zu beschränken, zum Beispiel indem der letzte Teil der Google Client ID auf einen Rest geprüft wird. Z.B. Google Client ID /1000 =< 20 entspricht dann 2 Prozent der User.
Damit der customTask bei jedem Google Analytics Hit ausgeführt wird, setzen wir diesen noch in die Google Analytics Setting Variable.
3. Cloud Function zum Senden der Daten an Slack
Für das Senden der Daten an Slack benutzen wir einen Webhook (also das Aufrufen einer URL). Die URL von Slack enthalten wir durch das Erstellen einer Slack App.
Hinweis: Die Webhook-URL enthält Authentifizierungsdaten. Daher ist es nicht ratsam, diese über den GTM auszulösen, sondern nutzen eine Cloud-Function.
Gehen wir in den Slack App Bereich über die URL: https://api.slack.com/apps?new_app=1 und erstellen eine App für unseren Workspace.
Danach wählen wir als Feature „Incoming Webhooks“ aus
und aktivieren das Feature. Am Ende des Formulars können dann neue Webhooks erstellt und Channels zugeordnet werden.
Danach steht eine URL zur Verfügung, die als Endpoint für unsere Cloud-Function dient.
Die Cloud-Function muss nun nur noch die über den Key „message“ gesendete Informationen an Slack senden. Das sieht in der Cloud-Function wie folgt aus:
Sehen wir uns das ganze als in Aktion an (Beispiel: Pageview und CD5 ist dabei notset):
Selbstverständlich können die Daten von der Cloud-Function auch in BigQuery gespeichert, an ein Ticket-System oder an Mail-APIs gesendet werden. Damit aber nicht viele unnötige Notification erstellt werden, sollte die zum Einsatz passende Logik integriert werden, welche Hits gesendet werden sollen (nur Pageview, Events ohne Timer-Events, etc.).
1 thought on “Custom Dimension Monitoring aus dem GA Hit mit Slack”