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

EigenschapWaarde
PlatformSalesforce
CategorieCRM
SetupcomplexiteitGeavanceerd
Officiële integratieJa
Gesynchroniseerde dataContacten, Leads, Accounts, Opportunities, Events
API Base URLhttps://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:

  1. Een Salesforce-org (elke editie met API-toegang)
  2. Een Connected App die is geconfigureerd in Salesforce Setup
  3. API-toegang ingeschakeld voor je Salesforce-gebruikersprofiel
  4. Een Brevo-account met API-toegang
  5. Een Tajo-account

Authenticatie

OAuth 2.0 Web Server Flow (aanbevolen)

Het beste voor productie-integraties met gebruikersautorisatie.

Terminal window
# Step 1: Authorize
https://login.salesforce.com/services/oauth2/authorize?
response_type=code&
client_id={consumer_key}&
redirect_uri={callback_url}
# Step 2: Exchange code for tokens
curl -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.

Terminal window
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: 17

Veldmapping

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_TIER

API-endpoints

REST API-resources

MethodEndpointBeschrijving
GET/services/data/vXX.0/sobjects/ContactQuery contacten
POST/services/data/vXX.0/sobjects/ContactMaak een contact aan
PATCH/services/data/vXX.0/sobjects/Contact/{id}Werk een contact bij
GET/services/data/vXX.0/sobjects/LeadQuery leads
GET/services/data/vXX.0/sobjects/AccountQuery accounts
GET/services/data/vXX.0/sobjects/OpportunityQuery opportunities
GET/services/data/vXX.0/query?q={SOQL}Voer SOQL query uit
POST/services/data/vXX.0/composite/sobjectsBatch aanmaken/bijwerken

Bulk API

MethodEndpointBeschrijving
POST/services/data/vXX.0/jobs/ingestMaak bulk ingest-job
PUT/services/data/vXX.0/jobs/ingest/{jobId}/batchesUpload batchdata
GET/services/data/vXX.0/jobs/ingest/{jobId}Controleer jobstatus

Streaming API

EndpointBeschrijving
/cometd/XX.0CometD long-polling voor realtime-events
PushTopicAbonneer op recordwijzigingen via SOQL-gebaseerde topics
Change Data CaptureStream gedetailleerde wijzigingen op veldniveau
Platform EventsEigen event-driven architectuur

Events

Record-events (Change Data Capture)

EventTriggerUse case
ContactChangeEventContact aangemaakt/bijgewerkt/verwijderdRealtime contactsynchronisatie
LeadChangeEventLead aangemaakt/bijgewerkt/geconverteerdLead lifecycle-tracking
OpportunityChangeEventOpportunityfase gewijzigdDealpipeline-automatisering
AccountChangeEventAccountrecord gewijzigdBedrijfsdatasynchronisatie

Platform Events

EventTriggerUse case
Lead_Converted__eLead geconverteerd naar contactNurture na conversie
Deal_Won__eOpportunity closed-wonOnboardingflow voor klanten
Deal_Lost__eOpportunity closed-lostWin-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 Salesforce
await 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 Salesforce
await 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 status
const 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 Capture
await 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:

EditieAPI-requests per 24 uur
Developer15.000
Enterprise1.000 per user license (min. 15.000)
Unlimited5.000 per user license (min. 15.000)
Performance5.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

ProbleemOorzaakOplossing
INVALID_SESSION_IDToken verlopenVervers het OAuth-token automatisch
REQUEST_LIMIT_EXCEEDEDDaglimiet voor API bereiktGebruik de Bulk API of verlaag de syncfrequentie
FIELD_INTEGRITY_EXCEPTIONVerplicht veld ontbreektMap alle verplichte velden in de configuratie
DUPLICATES_DETECTEDDuplicate rules actiefConfigureer de gewenste afhandeling van duplicaten
INSUFFICIENT_ACCESSOntbrekende objectpermissiesGeef API-toegang in het Salesforce-profiel

Debugmodus

Zet uitgebreide logging aan:

connectors:
salesforce:
debug: true
log_level: verbose
log_api_calls: true

Verbinding testen

Terminal window
tajo connectors test salesforce
# ✓ OAuth token valid
# ✓ Contacts accessible
# ✓ Leads accessible
# ✓ Accounts accessible
# ✓ Opportunities accessible
# ✓ Bulk API enabled

Best practices

  1. Gebruik de Bulk API voor grote syncs - Schakel over naar Bulk API 2.0 voor datasets van meer dan 2.000 records
  2. Implementeer Change Data Capture - Gebruik CDC voor realtime-sync in plaats van polling
  3. Map alleen nodige velden - Beperk API-gebruik door alleen vereiste velden te synchroniseren
  4. Handel tokenverversing af - Implementeer automatische OAuth-tokenrefresh-logica
  5. Gebruik composite requests - Combineer gerelateerde API-calls om het aantal requests te verminderen
  6. 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

Gerelateerde bronnen

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

AI-assistent

Hallo! Stel me vragen over de documentatie.

Start gratis met Brevo