Integrationen

Magento (Adobe Commerce) anbinden

Für Magento gibt es noch keine App, aber die Anbindung besteht aus zwei Teilen, die du sofort umsetzen kannst – Tracking-Skript im Magento-Backend einfügen und abgeschlossene Bestellungen an die Conversion API senden. Inklusive der CSP-Freigabe, die Magento 2.4.7 braucht, und je einem Weg mit und ohne Entwickler.

Für Magento gibt es bei LeadJourney noch keine native App. Vollständige Attribution bekommst du aus einem Magento-Shop trotzdem – du setzt die zwei Teile nur selbst zusammen, und beide sind kurz.

Kurz gesagt

  1. Tracking-Skript im Magento-Backend einfügen, damit es auf jeder Seite lädt.
  2. Ab Magento 2.4.7 die Tracking-Domain in der Content Security Policy freigeben, sonst wird das Skript genau dort blockiert, wo es zählt – auf den Zahlungsseiten.
  3. Bei einer Bestellung diese an die Conversion API von LeadJourney senden, mit Bestellwert und E-Mail-Adresse.

Warum die Bestellung vom Server kommen muss

Das Tracking-Skript kann die Click-ID im Browser lesen, aber keinen Kauf melden: Dafür braucht es dein Postback Secret, und das darf nie in Browser-Code stehen. Die abgeschlossene Bestellung meldet deshalb Magento serverseitig. Das ist der eine Teil, der nicht Copy-and-paste ist.

Bevor du startest

  • Eine Tracking-Domain und dein Tracking-Skript-Snippet aus Einstellungen → Tracking.
  • Deine Webhook-URL und dein Postback Secret aus Einstellungen → Events → Conversion API.
  • Einen Conversion-Typ für abgeschlossene Bestellungen. WonClient gibt es in jedem Workspace – siehe Events & Events Manager.
  • Backend-Zugang zu Magento und für den Bestell-Teil entweder eine Entwicklung oder ein Automatisierungstool wie Zapier oder Make.

Schritt 1: Tracking-Skript einfügen

In die Design-Konfiguration einfügen

Gehe im Magento-Backend auf Content → Design → Configuration. Wähle den Geltungsbereich und klicke auf Edit – die Zeile Default deckt den ganzen Shop ab, eine einzelne Store View nur diese.

Klappe HTML Head auf und füge dein LeadJourney-Snippet in Scripts and Style Sheets ein. Speichern.

Cache leeren

Gehe auf System → Cache Management und klicke auf Flush Magento Cache. Bis dahin liefert der Shop weiter den alten <head> aus.

Prüfen, ob es läuft

Öffne deinen Shop, dann die Browser-Konsole, und führe aus:

await window.lj.getClickId();
window.lj.getTrackingStatus();

Du solltest eine Click-ID und den Status tracked bekommen. Mach dasselbe im Checkout – dort greift die Content Security Policy, und um diese Seite geht es im nächsten Schritt.

Schritt 2: Das Skript durch die Content Security Policy lassen

Magento bringt eine Content Security Policy mit. Ab Magento 2.4.7 läuft sie auf den Zahlungsseiten im Restrict-Modus (überall sonst nur Report-only). Ein externes Skript, das nicht auf der Freigabeliste steht, wird dort schlicht nicht ausgeführt. Vor 2.4.7 ist alles Report-only, das Skript läuft also und du siehst nur Warnungen in der Konsole.

Gib deine Tracking-Domain in einer csp_whitelist.xml im Ordner etc/ eines Moduls frei:

<?xml version="1.0"?>
<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd">
    <policies>
        <policy id="script-src">
            <values>
                <value id="leadjourney" type="host">https://track.deinedomain.de</value>
            </values>
        </policy>
        <policy id="connect-src">
            <values>
                <value id="leadjourney" type="host">https://track.deinedomain.de</value>
            </values>
        </policy>
    </policies>
</csp_whitelist>

Ersetze track.deinedomain.de durch deine eigene Tracking-Domain. Beide Einträge sind nötig: script-src lässt das Skript laden, connect-src lässt es den Besuch melden.

Cookie Restriction Mode

Ist Stores → Configuration → General → Web → Default Cookie Settings → Cookie Restriction Mode aktiv, setzt Magento Cookies erst nach Zustimmung. Die Click-ID liegt in einem Cookie – bis zur Zustimmung gibt es also nichts, was die Bestellung mitnehmen könnte. Das ist eine bewusste Datenschutz-Einstellung; sie begrenzt nur, wie viele Bestellungen exakt zugeordnet werden können.

Schritt 3: Die Bestellung an LeadJourney senden

Wähle den Weg, der zu deiner Situation passt. Sie unterscheiden sich in einem Punkt: ob die Bestellung die Click-ID mitbringt.

Mit EntwicklungOhne Code
WieEin kleines Magento-ModulZapier oder Make
AttributionClick-ID – exakter Klick, Kampagne, Ad Set und AnzeigeE-Mail – Zuordnung zu einem bekannten Besucher
AufwandEin paar Stunden für eine Magento-EntwicklungEin Nachmittag, ohne Code
Passt, wennDu dich auf die Attribution verlassen willstDu diese Woche Ergebnisse brauchst

Warum E-Mail bei einem Shop halbwegs gut funktioniert

Im E-Commerce passiert der Kauf meist in derselben Sitzung wie der Klick, und die E-Mail wird im Checkout immer erfasst – LeadJourney kann die Bestellung also oft einem bereits bekannten Besucher zuordnen. Das ist ein Rückfall, keine Garantie: Eine Bestellung mit einer E-Mail, die LeadJourney nie gesehen hat, bleibt ohne Zuordnung. Fang ohne Code an, wenn es sein muss, aber plane das Modul ein.

Der Weg mit Entwicklung

Praktisch an Magento ist, dass es auf demselben Host läuft wie das Tracking-Skript. Die Click-ID liegt damit bereits im Request – keine Checkout-Anpassung, keine versteckten Felder, keine Theme-Änderung:

Das Skript legt die Click-ID des Besuchers in einem Cookie namens clickId ab, 60 Tage gültig. Dein Observer liest sie direkt aus dem Request:

// über Magento\Framework\Stdlib\CookieManagerInterface
$clickId = $this->cookieManager->getCookie('clickId');

An die Bestellung hängen

Beobachte sales_order_place_after, das ausgelöst wird, sobald die Bestellung existiert. Baue die Daten aus Bestellung und Cookie:

$payload = [
    'type'     => 'WonClient',
    'email'    => $order->getCustomerEmail(),
    'revenue'  => (float) $order->getBaseGrandTotal(),
    'custom_fields' => ['order_id' => $order->getIncrementId()],
];
if ($clickId) {
    $payload['click_id'] = $clickId;
}

Nimm getBaseGrandTotal(), nicht getGrandTotal(): Der Basisbetrag steht in der Basiswährung des Shops, ein Shop mit mehreren Währungen mischt sie so nicht in deinen Reports.

An LeadJourney senden

Schicke die Daten an deine Webhook-URL mit dem Header Authorization: Bearer <secret>. Nutze eine Queue oder einen Cron-Consumer statt eines synchronen Aufrufs – ein langsamer Request darf den Checkout nie aufhalten. Bei jeder Antwort außerhalb von 2xx erneut versuchen. Das vollständige Request-Format steht in Webhooks an LeadJourney senden.

Nur bezahlte Bestellungen zählen?

sales_order_place_after löst beim Aufgeben der Bestellung aus – bei Vorkasse oder Rechnung also, bevor Geld geflossen ist. Wenn du lieber bezahlte Bestellungen zählst, häng dich stattdessen an deinen Zahlungs- oder Rechnungsschritt und sende das Event von dort.

Der Weg ohne Code

Die Magento-2.X-App von Zapier hat einen New Order-Trigger, Make hat ein Adobe-Commerce-Modul. Beide können ohne eine Zeile Code an LeadJourney senden:

Magento verbinden

Lege im Magento-Backend unter System → Extensions → Integrations eine Integration an, aktiviere sie und nutze die API-Zugangsdaten in Zapier oder Make. Gib ihr Lesezugriff auf die Verkaufsdaten.

Auf neue Bestellung auslösen

Nimm den Trigger New Order. Wenn du nur bezahlte Bestellungen willst, ergänze einen Filter auf den Bestellstatus.

An LeadJourney senden

Füge eine Webhooks-Aktion hinzu: POST an deine Webhook-URL, Content-Type: application/json, Header Authorization: Bearer <dein Postback Secret>, und ein Body aus den Bestelldaten:

{
  "type": "WonClient",
  "email": "{{customer_email}}",
  "revenue": 149.00,
  "custom_fields": { "order_id": "{{increment_id}}" }
}

Ordne revenue dem Basis-Gesamtbetrag der Bestellung zu und email der Kunden-E-Mail.

Das Secret liegt dann im Automatisierungstool

Zapier und Make speichern den Header für dich, das ist in Ordnung – sie laufen serverseitig. Füge das Postback Secret nirgends ein, was im Browser läuft, und committe es nicht in ein Repository.

Was du mit einer Bestellung sendest

FeldWert aus MagentoHinweis
typeWonClient für eine abgeschlossene Bestellung. Exakte Schreibweise.
emailKunden-E-MailImmer mitsenden. Sie ist der Rückfall, wenn keine Click-ID da ist.
click_idDas Cookie clickIdNur beim Weg mit Entwicklung. Feld weglassen, wenn leer.
revenueBasis-GesamtbetragEine Zahl, in deiner Workspace-Währung.
custom_fields.order_idIncrement ID (z. B. 000000123)Verbindet eine LeadJourney-Conversion zurück mit der Bestellung.

order_id ist eines der E-Commerce-Custom-Fields, die LeadJourney für Shops anlegt – neben product_name, product_id, variant und product_category. Sende, was du hast, dann kannst du in den Reports danach gruppieren.

Warenkorb- und Checkout-Signale sind optional

Wenn die Bestellungen laufen, kannst du AddToCart und InitiateCheckout genauso ergänzen, aus den passenden Magento-Events. Das sind Signale für den oberen Funnel und um zu sehen, wo er leckt – die Hauptkennzahl bleiben die Kosten pro Bestellung. Siehe das E-Commerce-Playbook.

Retouren und Gutschriften

Wird eine Gutschrift erstellt, sende dieselbe Conversion erneut mit negativem revenue, damit sich dein ROAS korrigiert:

{
  "type": "Refund",
  "email": "[email protected]",
  "revenue": -149.00,
  "custom_fields": { "order_id": "000000123" }
}

Lege das Event Refund vorher im Events Manager an.

Testen

Öffne den Shop über einen getrackten Link – eine Test-Anzeigen-URL oder eine aus dem UTM Builder –, akzeptiere Cookies, falls du ein Consent-Banner nutzt, und kaufe etwas. Ein Testprodukt zum kleinstmöglichen Preis reicht.

Prüfen, ob das Event ankam

Unter Einstellungen → Events steigt der Total des Events und Last Received aktualisiert sich. Im API-Postbacks-Log siehst du die exakt gesendeten Daten, den Statuscode und ob per Klick, E-Mail oder Telefon zugeordnet wurde.

Zuordnung bestätigen

Öffne CRM → Sales, suche die Bestellung und prüfe, ob eine Quelle angezeigt wird. Ist sie da, aber ohne Zuordnung, kam das Event ohne brauchbares Erkennungsmerkmal an – siehe Fehlerbehebung unten.

Fehlerbehebung

Das Skript läuft überall, nur nicht im Checkout

Das ist die Content Security Policy im Restrict-Modus auf den Zahlungsseiten. Trage deine Tracking-Domain in der csp_whitelist.xml für script-src und connect-src ein, deploye und leere den Cache. Die Browser-Konsole nennt den blockierten Host.

Bestellungen kommen an, sind aber nicht zugeordnet

Das Event erreichte LeadJourney ohne etwas, worauf sich zuordnen lässt. Prüfe der Reihe nach: Läuft das Tracking-Skript im Shop, trägt die Bestellung den Wert aus dem Cookie clickId, und wird die Kunden-E-Mail mitgesendet? Beim Weg ohne Code gibt es die Click-ID bauartbedingt nicht, die Zuordnung hängt dann daran, ob LeadJourney diese E-Mail bereits kennt – siehe Fehlende Leads.

Der Umsatz stimmt bei mehreren Währungen nicht

Höchstwahrscheinlich sendest du getGrandTotal(), also den Betrag in der Währung, in der gezahlt wurde. Wechsle auf getBaseGrandTotal() und sende jede Bestellung in einer Währung – siehe Workspace-Währung ändern.

Keine Click-ID bei irgendeiner Bestellung

Entweder läuft das Skript im Shop nicht, oder der Cookie Restriction Mode hält das Cookie bis zur Zustimmung zurück. Prüfe window.lj.getClickId() in der Konsole auf einer Produktseite, nachdem du Cookies akzeptiert hast.

Häufige Fragen

Verwandte Artikel