Was ist Salesforce?
Salesforce ist eine cloudbasierte CRM-Plattform. Vertrieb, Service und Marketing arbeiten darin im Browser mit denselben Datensätzen — bekannt sind vor allem Sales Cloud für den Vertrieb, Service Cloud für den Kundenservice und Marketing Cloud für Kampagnen. Genutzt wird das System vor allem von größeren Vertriebsorganisationen, die viele Kontakte über längere Zeiträume und mehrere Stufen begleiten. Für die Website zählt davon vor allem eines: Salesforce dokumentiert seine REST-API öffentlich und bietet daneben mit Web-to-Lead einen eigenen Weg, um Formulardaten als Lead entgegenzunehmen.
Wie kommen Leads von der Website nach Salesforce?
Über zwei Wege, die Salesforce selbst vorsieht. Der eine ist die REST-API: Ein eigener Endpunkt auf dem Server der Website nimmt das Formular entgegen, meldet sich per OAuth an und legt den Datensatz über die sObject-Ressource an, also mit einem POST auf /services/data/vXX.X/sobjects/Lead/. Die Antwort enthält die ID des angelegten Datensatzes, ein Feld für Fehler und ein Erfolgskennzeichen. Der andere ist Web-to-Lead: Salesforce erzeugt im Setup ein HTML-Formular, das seine Daten direkt an Salesforce schickt und den Besucher danach auf eine Seite weiterleitet, die du selbst festlegst. Welcher Weg trägt, entscheiden wir im Konzept — nach Aufgabe, nicht nach Modernität.
Was ist der Unterschied zwischen Web-to-Lead und der Salesforce-API?
Es sind zwei Bauarten für dieselbe Aufgabe. Web-to-Lead ist ein Formular-POST an Salesforce mit anschließender Weiterleitung auf eine Zielseite. Es ist ohne Programmierung eingerichtet, lässt sich im Setup mit Zuordnungsregeln, Auto-Antwort-Vorlagen und einem reCAPTCHA-Feld kombinieren, und Salesforce nennt dafür ein Kontingent von bis zu 500 Leads in 24 Stunden; was darüber hinausgeht, landet in einer Warteschlange und wird nachgereicht. Über die REST-API bekommt die Website dagegen eine strukturierte Antwort zurück: Sie sieht, ob der Datensatz angelegt wurde, kennt seine ID, kann vorher validieren, Felder gezielt zuordnen und im Fehlerfall gezielt reagieren. Wer ein schlankes Kontaktformular braucht, ist mit Web-to-Lead schnell am Ziel. Wer Bestätigung, Zuordnung und Fehlerbehandlung im eigenen Ablauf haben will, nimmt die API.
Wie meldet sich die Website bei Salesforce an?
Über OAuth 2.0. Dafür wird in Salesforce eine App angelegt — je nach Ausbaustufe eine Connected App oder eine External Client App —, die den Zugriff erlaubt und die Rechte festlegt. Für die Verbindung von Server zu Server, bei der niemand interaktiv einen Login bestätigen kann, dokumentiert Salesforce zwei Wege. Beim JWT-Bearer-Flow schickt der Server ein JWT an den Token-Endpunkt, signiert mit einem Zertifikat nach RSA SHA256, und bekommt dafür ein Access Token; die App muss vorher freigegeben sein, Scopes lassen sich im JWT nicht mitgeben. Beim Client-Credentials-Flow werden Consumer Key und Consumer Secret gegen ein Token getauscht, wobei ein festgelegter Integrationsnutzer die Verarbeitung trägt. Beides läuft ohne Nutzerinteraktion — und beides gehört auf den Server, nie in den Browser des Besuchers.
Was hat es mit den API-Limits von Salesforce auf sich?
Salesforce rechnet API-Aufrufe nicht pro Formular ab, sondern organisationsweit. Die Dokumentation beschreibt ein Kontingent, das gegen die Summe aller API-Aufrufe einer Organisation in einem Zeitraum von 24 Stunden gerechnet wird; dazu zählen unter anderem die REST-API, die SOAP-API, die Bulk API und die meisten Connect-REST-APIs. Die Website teilt sich dieses Kontingent also mit jedem anderen System, das an derselben Salesforce-Organisation hängt. Deshalb fragt bei uns keine Seite das CRM bei jedem Aufruf. Wir bündeln Anfragen serverseitig, halten Daten im eigenen Bestand vor und schreiben nur, was geschrieben werden muss. Wie viel vom Kontingent übrig ist, meldet Salesforce im Antwort-Header Sforce-Limit-Info und über die Ressource /services/data/vXX.X/limits/ im Wert DailyApiRequests.
Wie werden Dubletten in Salesforce vermieden?
An zwei Stellen. Salesforce selbst bringt Dubletten- und Zuordnungsregeln mit, die sogenannten Duplicate Rules und Matching Rules; für Leads, Kontakte und Geschäftskunden sind Standardregeln von Haus aus aktiv und greifen beim Anlegen. Und die Website kann von sich aus eindeutig schreiben: Über die Upsert-Ressource wird ein Datensatz nicht blind angelegt, sondern über ein externes Schlüsselfeld angesprochen. Ein PATCH auf /services/data/vXX.X/sobjects/Lead/Schluesselfeld/Wert legt den Datensatz an, wenn es ihn noch nicht gibt, und aktualisiert ihn, wenn es ihn schon gibt; die Antwort sagt über ein Kennzeichen, welcher der beiden Fälle eingetreten ist. Passen mehrere Datensätze auf denselben Schlüssel, antwortet Salesforce mit einem Fehler, statt zu raten.
Was passiert, wenn Salesforce gerade nicht erreichbar ist?
Dann darf der Lead trotzdem nicht verloren gehen. Der serverseitige Endpunkt nimmt das Formular entgegen und bestätigt dem Besucher den Eingang, sobald die Daten sicher liegen — nicht erst, wenn das CRM geantwortet hat. Bleibt die Antwort aus oder kommt ein Fehler zurück, wandert der Vorgang in eine Warteschlange und wird mit wachsendem Abstand erneut versucht. Jeder Versuch wird protokolliert. Und weil über die Upsert-Ressource mit einem eigenen Schlüssel geschrieben wird, entsteht auch beim dritten Anlauf kein dritter Datensatz. Zusätzlich geht der Lead per E-Mail an ein Postfach, damit jemand ihn auch dann sieht, wenn die Technik noch arbeitet. Ein Aussetzer wird so zur Verzögerung statt zum Datenverlust.
Lässt sich Salesforce in TYPO3, WordPress oder Statamic integrieren?
Ja, in allen dreien. Die Anbindung bauen wir in jedem System selbst, mit dessen eigenen Bordmitteln. In TYPO3 entsteht eine eigene Extension: Extbase als Unterbau, TCA für das Datenmodell, eine serverseitige Route mit Middleware für den Formularversand, ein Scheduler-Task für wiederholte Läufe, Fluid für das Frontend; die Zugangsdaten liegen in der Konfiguration der Extension. In WordPress entsteht ein eigenes Plugin statt Theme-Code, damit die Anbindung einen Theme-Wechsel überlebt: eine eigene REST-Route nimmt das Formular entgegen, die Schlüssel liegen in der wp-config.php oder in einer Umgebungsvariablen, Template-Dateien und Blocks bringen Formular und Bestätigung ins Frontend. In Statamic liegt Laravel darunter: Route plus Controller für den Versand, ein Artisan-Command im Scheduler für Wiederholungen, ein Blueprint als Datenmodell, die Schlüssel in der .env, Antlers oder Blade für die Ausgabe. In allen drei Fällen liegt der Zugang auf dem Server — im Browser des Besuchers läuft dafür kein Fremdcode.