Salesforce-connector
Salesforce-connector
Verbind je Salesforce CRM met Brevo via Tajo voor contactsynchronisatie op enterpriseniveau, leadmanagement, opportunitytracking en marketingautomatisering aangestuurd door je CRM-data.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | Salesforce |
| Categorie | CRM |
| Setupcomplexiteit | Geavanceerd |
| Officiële integratie | Ja |
| Gesynchroniseerde data | Contacten, Leads, Accounts, Opportunities, Events |
| API Base URL | https://yourInstance.salesforce.com/services/data/vXX.0 |
Functies
- Bidirectionele contact-/leadsynchronisatie - Synchroniseer Salesforce-contacten en leads met Brevo-contactlijsten
- Opportunity-tracking - Map dealfases en bedragen voor omzetgebaseerde segmentatie
- Accounthierarchie - Synchroniseer bedrijfsaccounts voor account-based marketing in Brevo
- Custom object-mapping - Map Salesforce custom objects naar Brevo-attributen en -events
- Campaign member-sync - Synchroniseer Salesforce campaign members met Brevo-lijsten
- Activiteitstracking - Synchroniseer tasks, events en e-mailactiviteiten voor engagementscoring
- Realtime streaming - Gebruik de Salesforce Streaming API voor directe data-updates
- SOQL query-ondersteuning - Filter gesynchroniseerde data met custom SOQL queries
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een Salesforce-org (elke editie met API-toegang)
- Een Connected App die is geconfigureerd in Salesforce Setup
- API-toegang ingeschakeld voor je Salesforce-gebruikersprofiel
- Een Brevo-account met API-toegang
- Een Tajo-account
Authenticatie
OAuth 2.0 Web Server Flow (aanbevolen)
Het beste voor productie-integraties met gebruikersautorisatie.
# 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
Voor server-naar-server-integraties zonder gebruikersinteractie.
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 vereist dat je je security token aan je wachtwoord toevoegt voor de username-password flow. Reset je token via Setup > My Personal Information > Reset My Security Token.
Configuratie
Basisinstelling
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: 17Veldmapping
Map Salesforce-velden naar Brevo-contactattributen:
Standaardmappings
| Parameter | Type | Description |
|---|---|---|
Email required | string | E-mail van contact/lead (unieke identifier voor Brevo) |
FirstName optional | string | Mapt naar FIRSTNAME-attribuut in Brevo |
LastName optional | string | Mapt naar LASTNAME-attribuut in Brevo |
Phone optional | string | Mapt naar SMS-attribuut voor WhatsApp/SMS-berichten |
Account.Name optional | string | Gekoppelde account-/bedrijfsnaam |
LeadSource optional | string | Leadacquisitiebron |
StageName optional | string | Opportunityfase voor dealtracking |
OwnerId optional | string | Toegewezen sales rep voor routing |
Custom field-mapping
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-endpoints
REST API-resources
| Method | Endpoint | Beschrijving |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Query contacten |
POST | /services/data/vXX.0/sobjects/Contact | Maak een contact aan |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | Werk een contact bij |
GET | /services/data/vXX.0/sobjects/Lead | Query leads |
GET | /services/data/vXX.0/sobjects/Account | Query accounts |
GET | /services/data/vXX.0/sobjects/Opportunity | Query opportunities |
GET | /services/data/vXX.0/query?q={SOQL} | Voer SOQL query uit |
POST | /services/data/vXX.0/composite/sobjects | Batch aanmaken/bijwerken |
Bulk API
| Method | Endpoint | Beschrijving |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | Maak bulk ingest-job |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | Upload batchdata |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | Controleer jobstatus |
Streaming API
| Endpoint | Beschrijving |
|---|---|
/cometd/XX.0 | CometD long-polling voor realtime-events |
| PushTopic | Abonneer op recordwijzigingen via SOQL-gebaseerde topics |
| Change Data Capture | Stream gedetailleerde wijzigingen op veldniveau |
| Platform Events | Eigen event-driven architectuur |
Events
Record-events (Change Data Capture)
| Event | Trigger | Use case |
|---|---|---|
ContactChangeEvent | Contact aangemaakt/bijgewerkt/verwijderd | Realtime contactsynchronisatie |
LeadChangeEvent | Lead aangemaakt/bijgewerkt/geconverteerd | Lead lifecycle-tracking |
OpportunityChangeEvent | Opportunityfase gewijzigd | Dealpipeline-automatisering |
AccountChangeEvent | Accountrecord gewijzigd | Bedrijfsdatasynchronisatie |
Platform Events
| Event | Trigger | Use case |
|---|---|---|
Lead_Converted__e | Lead geconverteerd naar contact | Nurture na conversie |
Deal_Won__e | Opportunity closed-won | Onboardingflow voor klanten |
Deal_Lost__e | Opportunity closed-lost | Win-back-campagnes |
Codevoorbeelden
Connector initialiseren
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});Contacten synchroniseren met SOQL-filter
// 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// }Realtime 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 }});Rate limits
Salesforce REST API-limieten zijn afhankelijk van je editie en aantal licenties:
| Editie | API-requests per 24 uur |
|---|---|
| Developer | 15.000 |
| Enterprise | 1.000 per user license (min. 15.000) |
| Unlimited | 5.000 per user license (min. 15.000) |
| Performance | 5.000 per user license (min. 15.000) |
Aanvullende limieten:
- Concurrent API-limiet: 25 long-running requests
- Bulk API: 15.000 batches per 24 uur
- Streaming API: 2.000 events per dag (kan worden verhoogd)
- Composite API: 25 subrequests per composite request
API-gebruik monitoren
Monitor je API-gebruik in Salesforce Setup > System Overview. Tajo gebruikt de Bulk API voor grote syncs om je API-limieten te sparen.
Probleemoplossing
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| INVALID_SESSION_ID | Token verlopen | Ververs het OAuth-token automatisch |
| REQUEST_LIMIT_EXCEEDED | Daglimiet voor API bereikt | Gebruik de Bulk API of verlaag de syncfrequentie |
| FIELD_INTEGRITY_EXCEPTION | Verplicht veld ontbreekt | Map alle verplichte velden in de configuratie |
| DUPLICATES_DETECTED | Duplicate rules actief | Configureer de gewenste afhandeling van duplicaten |
| INSUFFICIENT_ACCESS | Ontbrekende objectpermissies | Geef API-toegang in het Salesforce-profiel |
Debugmodus
Zet uitgebreide logging aan:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueVerbinding testen
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledBest practices
- Gebruik de Bulk API voor grote syncs - Schakel over naar Bulk API 2.0 voor datasets van meer dan 2.000 records
- Implementeer Change Data Capture - Gebruik CDC voor realtime-sync in plaats van polling
- Map alleen nodige velden - Beperk API-gebruik door alleen vereiste velden te synchroniseren
- Handel tokenverversing af - Implementeer automatische OAuth-tokenrefresh-logica
- Gebruik composite requests - Combineer gerelateerde API-calls om het aantal requests te verminderen
- Test eerst in een sandbox - Gebruik een Salesforce-sandbox-org voordat je naar productie gaat
Beveiliging
- OAuth 2.0 - Industriestandaard-autorisatie met meerdere grant types
- IP-beperkingen - Salesforce ondersteunt login-IP-ranges en trusted IP-instellingen
- TLS 1.2+ - Alle API-communicatie is versleuteld met minimaal TLS 1.2
- Field-level security - Granulaire veldtoegangscontrole per profiel
- Sessiebeheer - Configureerbare sessie-timeout en limieten op gelijktijdige sessies