Zum Inhalt springen

Website und Eigenbau

Für eine Marketing-Website oder einen selbstgebauten Shop gibt es dasselbe Snippet und zusätzlich zwei serverseitige Endpunkte: einen für Anfragen, einen für Bestellungen.

<script async src="https://ingest.evoar-relay.app/v1/relay.js?shop=IHRE-DOMAIN"></script>

Steht eine eigene Messadresse, zeigt der Code im Cockpit bereits dorthin.

Ohne Auszeichnung erfasst eine Website Seitenaufrufe und sonst nichts. Jedes Formular, das als Anfrage zählen soll, bekommt ein Attribut:

<form data-relay-lead="contact">

Möglich sind contact, termin, anruf, download, newsletter, sms, registrierung — oder direkt der kanonische Name, etwa contact_request oder schedule. Der Typ taucht in der Wertliste im Cockpit wieder auf; dort legen Sie fest, was eine Anfrage dieser Art wert ist.

Zwei Felder darf das Formular zusätzlich markieren. Sie werden beim Empfang gehasht:

<input type="email" data-relay-email>
<input type="tel" data-relay-phone>

Ein Feld mit type="email" oder type="tel" wird auch ohne Markierung erkannt.

Das Snippet allein verliert Anfragen: an Blockern, an fehlender Einwilligung und an jedem Formular, das in einem fremden Rahmen steckt. Wer beides einsetzt, hat die Anzahl so hart wie eine Bestellung.

Das Snippet legt dafür zwei versteckte Felder in jedes ausgezeichnete Formular:

<input type="hidden" name="relay_event_id" value="…">
<input type="hidden" name="relay_visitor_id" value="…">

Schicken Sie beide unverändert an /v1/lead weiter.

relay_event_id verhindert die Doppelzählung: Browser und Server melden unter derselben Kennung, daraus wird eine Anfrage statt zweier. Kommt nur eine der beiden Meldungen an, ist die Anfrage trotzdem gezählt.

relay_visitor_id knüpft die Anfrage an die Besuchskette. Ohne sie ist sie gezählt, aber keinem Kanal zuzuordnen — der Server kennt keine Cookies.

Terminal-Fenster
TS=$(date +%s)
BODY='{"event_id":"'"$RELAY_EVENT_ID"'",
"name":"contact_request",
"page_url":"https://ihre-domain.de/kontakt",
"form_id":"kontakt-unten",
"visitor_id":"'"$RELAY_VISITOR_ID"'",
"identity":{"email":"interessent@example.de","phone":"+4917012345"},
"consent":{"ad_storage":true,"analytics_storage":true,
"ad_user_data":true,"ad_personalization":true}}'
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SHOP_SECRET" -hex | cut -d' ' -f2)
curl -X POST https://ingest.evoar-relay.app/v1/lead \
-H 'content-type: application/json' \
-H "X-Relay-Shop: ihre-domain.de" \
-H "X-Relay-Timestamp: $TS" \
-H "X-Relay-Signature: $SIG" \
-d "$BODY"

Die Antwort nennt created. Steht dort false, lag dieselbe event_id schon vor: Ein Wiederholungsversuch nach einer Zeitüberschreitung zählt nicht doppelt.

Erlaubt sind generate_lead, contact_request, call_click, schedule, file_download, email_sign_up, sms_sign_up, account_sign_up und start_trial.

Typeform, Calendly, HubSpot und ähnliche Werkzeuge stellen ihr Formular in ein eigenes Fenster. Dort sieht das Snippet das Absenden nicht. Die Bestätigungsseite danach sieht es:

<meta name="relay-lead" content="termin">

Zählt einmal je Besuch und Seite. Ein Neuladen der Bestätigungsseite erzeugt keine zweite Anfrage.

Für Systeme ohne eigene Webhook-Anbindung gibt es /v1/o, signiert wie oben.

Terminal-Fenster
TS=$(date +%s)
BODY='{"event_id":"order-4711","name":"purchase","order_id":"4711",
"currency":"EUR","total_gross_cents":11900,
"identity":{"email":"kundin@example.de","external_id":"c-99"},
"consent":{"ad_storage":true,"analytics_storage":true,
"ad_user_data":true,"ad_personalization":true}}'
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$SHOP_SECRET" -hex | cut -d' ' -f2)
curl -X POST https://ingest.evoar-relay.app/v1/o \
-H 'content-type: application/json' \
-H "X-Relay-Shop: ihre-domain.de" \
-H "X-Relay-Timestamp: $TS" \
-H "X-Relay-Signature: $SIG" \
-d "$BODY"

Geben Sie visitor_id mit, wenn Ihr Frontend sie kennt — nur dann hängt der Kauf an der Reise, die ihn erzeugt hat.