elevatemdev Gespräch anfragen
KontorCRM

Integrationen & API

Kontor spricht mit deinen Formularen, Postfächern und Werbekonten.

Leads kommen signiert über die API, Mails über IMAP und SMTP, Termine aus dem Kalender. Ergebnisse gehen zurück an Meta und Google. Alles ohne Zusatz-Abo – und was fehlt, bauen wir im Projekt an.

json
{
  "201": {"ok": true,  "status": "created",   "id": 4711},
  "200": {"ok": true,  "status": "duplicate", "id": 4711},
  "400": {"ok": false, "error": "bad_json | bad_email"},
  "401": {"ok": false, "error": "stale_timestamp | bad_signature"},
  "405": {"ok": false, "error": "method_not_allowed"},
  "503": {"ok": false, "error": "not_configured"}
}

Überblick

Was angebunden ist.

Diese Anbindungen sind im Code vorhanden. Weitere Systeme (z. B. dein Shop oder deine Buchhaltung) binden wir im Projekt an.

Lead-API

POST mit JSON, abgesichert per HMAC-SHA256 und Zeitfenster.

IMAP & SMTP

Jedes Postfach mit Standardprotokollen, Voreinstellungen für gängige Anbieter.

Calendly

Termine werden abgerufen und dem Kontakt zugeordnet – ohne Webhook-Tarif.

Brevo

Versand von Folgen, Rückkanal für Zustellung, Öffnung, Klick, Bounce, Abmeldung; Import aus Listen.

Meta Conversions-API

Termin und Kunde als Ereignis zurück an Meta.

Google Ads

Offline-Conversions mit Klick-ID oder gehashten Kontaktdaten.

Statusmelder

Deine Websites melden Version, Fehler und Kennzahlen ans CRM – signiert und nur lesend.

Import

Excel (.xlsx) und CSV mit Spaltenzuordnung, Zahlungsexporte per Datei.

Lead-API

Leads signiert übergeben – in drei Zeilen.

Der Eingang braucht kein Login. Stattdessen signiert der Absender jeden Aufruf mit einem gemeinsamen Geheimnis: HMAC-SHA256 über Zeitstempel, Punkt und Body. Kontor lehnt alles ab, was älter als fünf Minuten ist oder nicht passt.

  • Kopfzeilen: X-Elevatem-Timestamp (Unix-Zeit) und X-Elevatem-Signature (hex)
  • Dubletten sind kein Fehler: Antwort 200 mit vorhandener ID, Vermerk im Verlauf
  • Einwilligung (consent) wird mit Zeitpunkt und Nachweis gespeichert
  • Unbekannte Quelle landet unter „Unbekannt“, nicht im Nirgendwo
bash
BODY='{"source":"website","company":"Metallbau Krüger GmbH","first_name":"Jana","email":"jana@metallbau-krueger.example","consent":1,"consent_text":"Kontaktformular, Haken gesetzt","note":"Bitte Rückruf"}'
TS=$(date +%s)
SIG=$(printf '%s.%s' "$TS" "$BODY" | openssl dgst -sha256 -hmac "$INTAKE_SECRET" | sed 's/^.* //')

curl -X POST https://crm.deine-firma.example/api/lead-intake.php \
  -H "Content-Type: application/json" \
  -H "X-Elevatem-Timestamp: $TS" \
  -H "X-Elevatem-Signature: $SIG" \
  --data "$BODY"

# → 201 {"ok":true,"status":"created","id":4711}
# → 200 {"ok":true,"status":"duplicate","id":4711}   (Kontakt existiert, leere Felder ergänzt)

Serverseite

So prüft Kontor die Signatur.

Der Vergleich läuft zeitkonstant (hash_equals), damit die Signatur nicht erraten werden kann. Ohne hinterlegtes Geheimnis ist der Endpunkt gar nicht aktiv.

  • Geheimnis liegt nur auf dem Server, nicht im Code
  • Abgefangene Anfragen lassen sich nach 5 Minuten nicht wiederholen
  • Fehlversuche werden protokolliert
php
// Prüfung auf der Seite von Kontor (api/lead-intake.php, gekürzt)
$body     = file_get_contents('php://input') ?: '';
$zeit     = (string) ($_SERVER['HTTP_X_ELEVATEM_TIMESTAMP'] ?? '');
$signatur = (string) ($_SERVER['HTTP_X_ELEVATEM_SIGNATURE'] ?? '');

// Alte Anfragen ablehnen: höchstens 5 Minuten Abweichung
if (!ctype_digit($zeit) || abs(time() - (int) $zeit) > 300) {
    antwort(401, ['ok' => false, 'error' => 'stale_timestamp']);
}

$erwartet = hash_hmac('sha256', $zeit . '.' . $body, $geheimnis);
if (!hash_equals($erwartet, $signatur)) {
    antwort(401, ['ok' => false, 'error' => 'bad_signature']);
}

Felder

Was der Lead-Eingang annimmt.

Kontakt

company, first_name, last_name
Firma und Person
email, phone, phone2
E-Mail wird geprüft
shop_url, social, industry, city, country
Website, Profil, Branche, Ort, Land

Zuordnung

source
Quelle (Slug), unbekannt → „Unbekannt“
projekt
Projekt oder Marke
note
Notiz, bis 500 Zeichen
revenue_month
Monatsumsatz für die Pipeline

Einwilligung

consent, consent_text
Einwilligung mit Nachweis
marketing_consent
Marketing-Einwilligung (Voraussetzung für Conversions)

Herkunft

gclid, gbraid, wbraid
Google-Klick (auch iOS)
fbclid, fbc, fbp
Meta-Klick und Cookies
ttclid
TikTok-Klick
utm_source … utm_content
Kampagnenparameter
keyword, match_type, device
Suchanzeigen
referrer, landing_page, submit_page
Seitenpfad
attribution
alternativ alles als Objekt

IMAP & SMTP

Jedes Postfach, keine Erweiterung nötig.

Kontor bringt einen eigenen IMAP-Client mit Zertifikatsprüfung mit. Für gängige Anbieter sind Server, Ports und Ordner vorbelegt. Postfach-Passwörter werden verschlüsselt gespeichert.

  • Posteingang und „Gesendet“ werden gelesen
  • Gesendete Mails landen als Kopie in „Gesendet“
  • Antworten im selben Verlauf (In-Reply-To/References)
  • Antwort-Adresse (Reply-To) je Postfach
Voreinstellungen
AnbieterSMTPIMAP
Google Workspacesmtp.gmail.com:465imap.gmail.com:993
Microsoft 365smtp.office365.com:587outlook.office365.com:993
IONOSsmtp.ionos.de:465imap.ionos.de:993
Stratosmtp.strato.de:465imap.strato.de:993
Hostinger-Mailsmtp.hostinger.com:465imap.hostinger.com:993

Newsletter-Versand

Brevo als Versandweg und Rückkanal.

Folgen für warme Kontakte können über Brevo laufen. Der Rückkanal meldet Zustellung, Öffnung, Klick, Bounce, Spam-Beschwerde und Abmeldung zurück an den Kontakt. Kontakte aus Brevo-Listen lassen sich übernehmen.

  • Double-Opt-In wird vor der ersten Mail geprüft
  • Harte Bounces und Abmeldungen sperren
  • Öffnungen und Klicks stehen an der Mail im Verlauf
Rückkanal
AuslöserBrevo meldet Ereigniszugestellt, geöffnet, Klick, Bounce …
BedingungWelche Art?Bounce oder Abmeldung → Sperre
AktionAm Kontakt vermerkenFolge stoppt, falls nötig

Import & Export

Rein mit deinen Daten – und sie bleiben deine.

Der Import nimmt Excel (.xlsx) und CSV, schlägt die Spaltenzuordnung selbst vor und zeigt eine Vorschau. Im Modus „Vorhandene ergänzen“ werden leere Felder bestehender Kontakte gefüllt, nie überschrieben. Textspalten können als Notiz an die Akte.

  • Dubletten beim Import übersprungen und gezählt
  • Zahlungsexporte werden am Dateikopf erkannt
  • Daten liegen in deiner MySQL-Datenbank – direkter Zugriff jederzeit
  • CSV-Export einzelner Listen im Projekt
Import · SpaltenzuordnungBeispiel
Spalte in der DateiFeld in Kontor
FirmennameFirma
E-Mail-AdresseE-Mail
Tel.Telefon
KampagneKampagne (utm_campaign)
Bemerkungals Notiz

Welches System soll mit Kontor sprechen?

Shop, Buchhaltung, Telefonanlage: Was nicht vorhanden ist, bauen wir im Projekt an.