Salesforce Connector
Salesforce Connector
Verbinde dein Salesforce-CRM über Tajo mit Brevo für eine Kontaktsynchronisierung auf Enterprise-Niveau, Lead-Management, Opportunity-Tracking und eine durch deine CRM-Daten gespeiste Marketingautomatisierung.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | Salesforce |
| Kategorie | CRM |
| Einrichtungsaufwand | Fortgeschritten |
| Offizielle Integration | Ja |
| Synchronisierte Daten | Kontakte, Leads, Accounts, Opportunities, Events |
| API-Basis-URL | https://yourInstance.salesforce.com/services/data/vXX.0 |
Funktionen
- Bidirektionale Kontakt-/Lead-Synchronisierung - Synchronisiere Salesforce-Kontakte und -Leads mit Brevo-Kontaktlisten
- Opportunity-Tracking - Ordne Deal-Phasen und -Beträge für eine umsatzbasierte Segmentierung zu
- Account-Hierarchie - Synchronisiere Unternehmens-Accounts für Account-based Marketing in Brevo
- Zuordnung benutzerdefinierter Objekte - Ordne benutzerdefinierte Salesforce-Objekte Brevo-Attributen und -Events zu
- Kampagnenmitglieder-Synchronisierung - Synchronisiere Salesforce-Kampagnenmitglieder mit Brevo-Listen
- Aktivitäts-Tracking - Synchronisiere Aufgaben, Events und E-Mail-Aktivitäten für Engagement-Scoring
- Echtzeit-Streaming - Nutze die Salesforce Streaming API für sofortige Datenaktualisierungen
- SOQL-Abfrageunterstützung - Filtere synchronisierte Daten mit benutzerdefinierten SOQL-Abfragen
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Eine Salesforce-Organisation (jede Edition mit API-Zugriff)
- Eine in Salesforce Setup konfigurierte Connected App
- API-Zugriff für dein Salesforce-Nutzer:innen-Profil aktiviert
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto
Authentifizierung
OAuth 2.0 Web-Server-Flow (Empfohlen)
Am besten geeignet für produktive Integrationen mit Autorisierung durch Nutzer:innen.
# Step 1: Authorizehttps://login.salesforce.com/services/oauth2/authorize? response_type=code& client_id={consumer_key}& redirect_uri={callback_url}
# Step 2: Exchange code for tokenscurl -X POST https://login.salesforce.com/services/oauth2/token \ -d "grant_type=authorization_code" \ -d "code={auth_code}" \ -d "client_id={consumer_key}" \ -d "client_secret={consumer_secret}" \ -d "redirect_uri={callback_url}"Username-Password-Flow
Für Server-zu-Server-Integrationen ohne Interaktion durch Nutzer:innen.
curl -X POST https://login.salesforce.com/services/oauth2/token \ -d "grant_type=password" \ -d "client_id={consumer_key}" \ -d "client_secret={consumer_secret}" \ -d "username={username}" \ -d "password={password}{security_token}"Security-Token
Salesforce verlangt, dass du dein Security-Token im Username-Password-Flow an dein Passwort anhängst. Setze dein Token unter Setup > Meine persönlichen Informationen > Mein Security-Token zurücksetzen zurück.
Konfiguration
Grundeinrichtung
connectors: salesforce: enabled: true instance_url: "https://yourorg.my.salesforce.com" api_version: "v59.0" auth: type: oauth2 consumer_key: "${SF_CONSUMER_KEY}" consumer_secret: "${SF_CONSUMER_SECRET}" refresh_token: "${SF_REFRESH_TOKEN}"
# Data sync options sync: contacts: true leads: true accounts: true opportunities: true campaigns: true
# Sync direction direction: salesforce_to_brevo
# Brevo list assignment lists: all_leads: 15 qualified_leads: 16 customers: 17Feldzuordnung
Ordne Salesforce-Felder Brevo-Kontaktattributen zu:
Standardzuordnungen
| Parameter | Type | Description |
|---|---|---|
Email required | string | E-Mail des Kontakts/Leads (eindeutige Kennung für Brevo) |
FirstName optional | string | Wird dem FIRSTNAME-Attribut in Brevo zugeordnet |
LastName optional | string | Wird dem LASTNAME-Attribut in Brevo zugeordnet |
Phone optional | string | Wird dem SMS-Attribut für WhatsApp/SMS-Nachrichten zugeordnet |
Account.Name optional | string | Name des zugeordneten Accounts/Unternehmens |
LeadSource optional | string | Quelle der Lead-Gewinnung |
StageName optional | string | Opportunity-Phase für Deal-Tracking |
OwnerId optional | string | Zugewiesene:r Vertriebsmitarbeiter:in für das Routing |
Zuordnung benutzerdefinierter Felder
field_mapping: # Standard fields Email: email FirstName: FIRSTNAME LastName: LASTNAME Phone: SMS
# CRM fields LeadSource: LEAD_SOURCE Lead_Score__c: LEAD_SCORE Account.Name: COMPANY_NAME Account.Industry: INDUSTRY
# Opportunity fields Amount: DEAL_VALUE StageName: DEAL_STAGE CloseDate: EXPECTED_CLOSE_DATE
# Custom fields Preferred_Channel__c: PREFERRED_CHANNEL Customer_Tier__c: VIP_TIERAPI-Endpunkte
REST-API-Ressourcen
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Kontakte abfragen |
POST | /services/data/vXX.0/sobjects/Contact | Einen Kontakt anlegen |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | Einen Kontakt aktualisieren |
GET | /services/data/vXX.0/sobjects/Lead | Leads abfragen |
GET | /services/data/vXX.0/sobjects/Account | Accounts abfragen |
GET | /services/data/vXX.0/sobjects/Opportunity | Opportunities abfragen |
GET | /services/data/vXX.0/query?q={SOQL} | SOQL-Abfrage ausführen |
POST | /services/data/vXX.0/composite/sobjects | Batch-Anlage/-Aktualisierung |
Bulk API
| Methode | Endpunkt | Beschreibung |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | Bulk-Ingest-Job anlegen |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | Batch-Daten hochladen |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | Job-Status prüfen |
Streaming API
| Endpunkt | Beschreibung |
|---|---|
/cometd/XX.0 | CometD Long-Polling für Echtzeit-Events |
| PushTopic | Datensatzänderungen über SOQL-basierte Topics abonnieren |
| Change Data Capture | Fein abgestufte Änderungen auf Feldebene streamen |
| Platform Events | Benutzerdefinierte event-getriebene Architektur |
Events
Datensatz-Events (Change Data Capture)
| Event | Auslöser | Anwendungsfall |
|---|---|---|
ContactChangeEvent | Kontakt erstellt/aktualisiert/gelöscht | Echtzeit-Kontaktsynchronisierung |
LeadChangeEvent | Lead erstellt/aktualisiert/konvertiert | Lead-Lifecycle-Tracking |
OpportunityChangeEvent | Opportunity-Phase geändert | Deal-Pipeline-Automatisierung |
AccountChangeEvent | Account-Datensatz geändert | Synchronisierung von Unternehmensdaten |
Platform Events
| Event | Auslöser | Anwendungsfall |
|---|---|---|
Lead_Converted__e | Lead in Kontakt konvertiert | Nurture-Flow nach der Konvertierung |
Deal_Won__e | Opportunity gewonnen | Kundenonboarding-Flow |
Deal_Lost__e | Opportunity verloren | Win-back-Kampagnen |
Code-Beispiele
Connector initialisieren
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Salesforceawait tajo.connectors.connect('salesforce', { instanceUrl: 'https://yourorg.my.salesforce.com', consumerKey: process.env.SF_CONSUMER_KEY, consumerSecret: process.env.SF_CONSUMER_SECRET, refreshToken: process.env.SF_REFRESH_TOKEN});Kontakte mit SOQL-Filter synchronisieren
// Sync only qualified leads from Salesforceawait tajo.connectors.sync('salesforce', { type: 'filtered', resources: ['leads'], filter: "SELECT Id, Email, FirstName, LastName, LeadScore__c FROM Lead WHERE Status = 'Qualified' AND Email != null", brevoListId: 16});
// Check sync statusconst status = await tajo.connectors.status('salesforce');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 18400,// leadsSynced: 7200,// opportunitiesSynced: 3100// }Echtzeit-Streaming
// Subscribe to Salesforce Change Data Captureawait tajo.connectors.stream('salesforce', { channels: [ '/data/ContactChangeEvent', '/data/LeadChangeEvent', '/data/OpportunityChangeEvent' ], handler: async (event) => { console.log(`Change detected: ${event.entity} ${event.changeType}`); // Automatically synced to Brevo by Tajo }});Ratenbegrenzungen
Die Grenzen der Salesforce REST API hängen von deiner Edition und der Anzahl der Lizenzen ab:
| Edition | API-Anfragen pro 24 Stunden |
|---|---|
| Developer | 15.000 |
| Enterprise | 1.000 pro Nutzer:innen-Lizenz (mind. 15.000) |
| Unlimited | 5.000 pro Nutzer:innen-Lizenz (mind. 15.000) |
| Performance | 5.000 pro Nutzer:innen-Lizenz (mind. 15.000) |
Weitere Begrenzungen:
- Limit für gleichzeitige API-Aufrufe: 25 lang laufende Anfragen
- Bulk API: 15.000 Batches pro 24 Stunden
- Streaming API: 2.000 Events pro Tag (kann erhöht werden)
- Composite API: 25 Subrequests pro Composite-Anfrage
API-Nutzungsüberwachung
Überwache deine API-Nutzung in Salesforce unter Setup > Systemüberblick. Tajo nutzt die Bulk API für große Synchronisierungen, um deine API-Limits zu schonen.
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| INVALID_SESSION_ID | Token abgelaufen | OAuth-Token automatisch erneuern |
| REQUEST_LIMIT_EXCEEDED | Tageslimit der API erreicht | Bulk API nutzen oder Synchronisierungsfrequenz reduzieren |
| FIELD_INTEGRITY_EXCEPTION | Pflichtfeld fehlt | Alle Pflichtfelder in der Konfiguration zuordnen |
| DUPLICATES_DETECTED | Duplikatsregeln aktiv | Duplikatsbehandlungspräferenzen konfigurieren |
| INSUFFICIENT_ACCESS | Fehlende Objektberechtigungen | API-Zugriff im Salesforce-Profil erteilen |
Debug-Modus
Ausführliches Logging aktivieren:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueVerbindung testen
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledBest Practices
- Bulk API für große Synchronisierungen nutzen - Wechsle bei Datensätzen über 2.000 Einträgen zur Bulk API 2.0
- Change Data Capture implementieren - Verwende CDC für Echtzeit-Synchronisierung statt Polling
- Nur benötigte Felder zuordnen - Reduziere die API-Nutzung, indem du nur erforderliche Felder synchronisierst
- Token-Refresh handhaben - Implementiere eine automatische OAuth-Token-Refresh-Logik
- Composite-Requests verwenden - Kombiniere zusammengehörige API-Aufrufe, um die Anzahl der Anfragen zu reduzieren
- Zuerst in der Sandbox testen - Nutze eine Salesforce-Sandbox-Organisation vor dem produktiven Rollout
Sicherheit
- OAuth 2.0 - Branchenstandard-Autorisierung mit mehreren Grant-Typen
- IP-Beschränkungen - Salesforce unterstützt Login-IP-Bereiche und Einstellungen für vertrauenswürdige IPs
- TLS 1.2+ - Die gesamte API-Kommunikation wird mit mindestens TLS 1.2 verschlüsselt
- Feldbasierte Sicherheit - Granulare Feldzugriffskontrolle pro Profil
- Session-Management - Konfigurierbare Session-Timeouts und Limits für gleichzeitige Sitzungen