Problematik #
Im serverseitigen Google Tag Manager (sGTM) wird nicht mehr das bekannte _ga-Cookie genutzt, sondern ein neues Cookie namens FPID. Dieses ist als „httpOnly“ gesetzt und somit für JavaScript nicht lesbar. Damit Anrufer im Reporting korrekt zugeordnet werden können, muss die FPID an matelso übergeben werden. Ohne diese Anpassung ginge die Attribution verloren. Die dafür notwendigen Schritte und Anpassungen erläutern wir im Folgenden.
Telefontracking & Server-Side Tagging #
Beim Telefontracking (Call Tracking) wird das Verhalten von Website-Besuchern, die eine Rufnummer wählen, erfasst. Das erlaubt Rückschlüsse darauf, über welche Kampagnen oder Kanäle Kunden zu einem Anruf bewegt wurden.
Mit matelso erhält jeder Nutzer eine individuelle Rufnummer, sodass bereits beim Anruf Informationen zu Quelle, Kampagne oder besuchten Seiten vorliegen. Über die „Integrations 2.0“ können diese Daten zudem in Google Analytics 4 einfließen, wo eine detaillierte Auswertung möglich ist.
Cookies im sGTM #
Mit dem serverseitigen Tracking wird zunehmend die FPID als Client ID genutzt – anstelle des klassischen _ga-Cookies.
– Bisher: _ga im Format GA1.1.134086739.1708512876
– Neu: FPID im Format FPID2.2.DTB6aPZTYF8heNouSVrjnFHrdPyf7UbPOaZXGU8x+2c=.1709032348
Das Problem: Die FPID ist für JavaScript nicht auslesbar, da das Cookie ausschließlich im Rahmen der Server-Kommunikation sichtbar ist. Ein Tracking-Tool wie matelso Call Tracking kann die FPID also nicht direkt abfragen.
Wenn matelso weiterhin nur den Wert des alten _ga-Cookies nutzt, während GA4 bereits die FPID speichert, kommt es zu fehlerhaften Zuordnungen: Anrufe lassen sich keinem gültigen Nutzer zuordnen.
Lösung: Übergabe der FPID an matelso #
Um dieses Problem zu beheben, muss die FPID an matelso weitergereicht werden. Das Vorgehen umfasst drei Schritte:
Schritt 1: FPID ermitteln #
Über ein eigenes Client-Template im sGTM kann die FPID abgefragt und als Antwort ausgegeben werden. Hierfür kann dem Klickpfad aus den Folgenden Screenshots gefolgt werden:


Sie können dieser Vorlage nun erst einmal einen aussagekräftigen Namen geben. Hier empfehlen wir einen aussagekräftigen Namen, um die Vorlage anschließend einfach wiederfinden zu können. Darauf muss der Folgende Code unter “Code” kopiert werden und die Folgenden Berechtigungen unter “Berechtigungen” eingestellt werden.
Hier der Code
const returnResponse = require('returnResponse');
const setResponseBody = require('setResponseBody');
const setResponseStatus = require('setResponseStatus');
const setResponseHeader = require('setResponseHeader');
const getRequestQueryParameter = require('getRequestQueryParameter');
const getCookieValues = require('getCookieValues');
const log = require("logToConsole");
const fpidcallback = getRequestQueryParameter('fpidcallback');
if(fpidcallback) {
require('claimRequest')();
setResponseStatus(200);
setResponseHeader("content-type", "text/javascript");
setResponseBody(fpidcallback+"('"+getCookieValues("FPID")[0]+"');");
}
Hier die Berechtigungen


Daraufhin kann die erstellte Vorlage unter dem Menüpunkt “Clients” noch hinzugefügt und aktiviert werden.

Wenn der Client hinzugefügt ist, kann der Container veröffentlicht werden. So sollte die FPID von dem angesteuerten Endpunkt auch ausgegeben werden.
Schritt 2: FPID an matelso senden #
Im zweiten Schritt wird die FPID clientseitig an matelso übergeben.
Dazu kann im Google Tag Manager (Web-Container) ein Custom HTML Tag eingesetzt werden, der beim Laden der Seite die FPID vom sGTM-Server abruft und an matelso weitergibt.
Hier ein vollständiges Beispiel-Snippet:
<script>
function ed_getCookie(cname){
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
}
return "";
};
function matelsoready(FPID) {
FPID = FPID.split(".")[2] + "." + FPID.split(".")[3];
var ga4sessionid = ed_getCookie("_ga_MN66EBC2V8").split(".")[2];
window[window.CallTrackingObject]("addCustomTrackingValues", {
ssgtm_fpid: FPID,
ga4sessid: ga4sessionid
});
}
var scriptTag = document.createElement('script');
scriptTag.src = "https://sst.e-dialog.group/?fpidcallback=matelsoready&x=" + new Date().getTime();
document.body.appendChild(scriptTag);
</script>
Dieses Skript führt folgende Schritte aus:
- Es holt die FPID über den zuvor erstellten sGTM-Endpunkt ab.
- Es extrahiert die FPID- und GA4-Session-IDs.
- Es übergibt beide Werte über die Funktion addCustomTrackingValues an das matelso-CallTracking-Objekt.
So wird sichergestellt, dass matelso bei jedem Anruf die richtigen Sitzungs- und Nutzer-IDs an GA4 weitergibt.
Das Skript sollte nach dem Laden des matelso-Trackings ausgeführt werden (z.B. als Cleanup-Tag im GTM).
Schritt 3: Setup in matelso #
Damit matelso die empfangenen Werte korrekt verarbeitet, müssen die Variablen ssgtm_fpid und ga4sessid in der matelso Integration definiert werden.
Dazu wird im Data Definition Directory (DDD) eine entsprechende Zuordnung angelegt, z.B.:
{{webData.custom.ssgtm_fpid.attribution(FIRSTNOTEMPTY)}}
{{webData.custom.ga4sessid.attribution(FIRSTNOTEMPTY)}}

So kann matelso die übergebenen Werte bei Anruf-Events verwenden und sie an Zielsysteme weitergeben. Für Social Media-Attribution (z.B. Meta Ads) empfiehlt es sich außerdem, die Parameter _fbp und _fbc zu übermitteln, um Nutzer eindeutig zuordnen zu können.
Eine GA4 Integration könnte also ungefähr so aussehen:

Fazit: #
Weil sGTM statt _ga die httpOnly-FPID nutzt, muss diese aktiv an matelso übergeben werden – sonst reißt die GA4-Attribution bei Anrufen. Mit dem beschriebenen Setup (FPID-Endpoint im sGTM, Web-GTM-Snippet, Mapping der Variablen ssgtm_fpid und ga4sessid in matelso) bleibt die Nutzer- und Session-Zuordnung stabil; optional lassen sich _fbp/_fbc für Social ergänzen.
