Connettore Salesforce
Connettore Salesforce
Collega il tuo CRM Salesforce a Brevo tramite Tajo per una sincronizzazione contatti di livello enterprise, gestione lead, tracciamento opportunità e automazione marketing alimentata dai tuoi dati CRM.
Panoramica
| Proprietà | Valore |
|---|---|
| Piattaforma | Salesforce |
| Categoria | CRM |
| Complessità di setup | Avanzata |
| Integrazione ufficiale | Sì |
| Dati sincronizzati | Contatti, Lead, Account, Opportunità, Eventi |
| API Base URL | https://yourInstance.salesforce.com/services/data/vXX.0 |
Funzionalità
- Sincronizzazione bidirezionale contatti/lead - Sincronizza contatti e lead Salesforce con le liste Brevo
- Tracciamento opportunità - Mappa stage e importi dei deal per la segmentazione basata sui ricavi
- Gerarchia account - Sincronizza gli account aziendali per account-based marketing in Brevo
- Mappatura oggetti personalizzati - Mappa gli oggetti personalizzati Salesforce agli attributi ed eventi Brevo
- Sync dei campaign member - Sincronizza i membri delle campagne Salesforce con le liste Brevo
- Tracciamento attività - Sincronizza task, eventi e attività email per l’engagement scoring
- Streaming in tempo reale - Usa la Salesforce Streaming API per aggiornamenti dati istantanei
- Supporto query SOQL - Filtra i dati sincronizzati con query SOQL personalizzate
Prerequisiti
Prima di iniziare, assicurati di avere:
- Una org Salesforce (qualsiasi edizione con accesso API)
- Una Connected App configurata in Salesforce Setup
- Accesso API abilitato per il profilo utente Salesforce
- Un account Brevo con accesso API
- Un account Tajo
Autenticazione
OAuth 2.0 Web Server Flow (consigliato)
Ideale per integrazioni in produzione con autorizzazione dell’utente.
# 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
Per integrazioni server-to-server senza interazione utente.
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 richiede di aggiungere il tuo security token alla password per il flusso username-password. Resetta il tuo token da Setup > My Personal Information > Reset My Security Token.
Configurazione
Setup di base
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: 17Mappatura dei campi
Mappa i campi Salesforce agli attributi di contatto Brevo:
Mappature predefinite
| Parameter | Type | Description |
|---|---|---|
Email required | string | Email di Contact/Lead (identificatore univoco per Brevo) |
FirstName optional | string | Mappato all'attributo FIRSTNAME in Brevo |
LastName optional | string | Mappato all'attributo LASTNAME in Brevo |
Phone optional | string | Mappato all'attributo SMS per messaggi WhatsApp/SMS |
Account.Name optional | string | Nome dell'account/azienda associato |
LeadSource optional | string | Sorgente di acquisizione del lead |
StageName optional | string | Stage dell'opportunità per il tracciamento deal |
OwnerId optional | string | Sales rep assegnato per il routing |
Mappatura campi personalizzati
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_TIEREndpoint API
Risorse REST API
| Metodo | Endpoint | Descrizione |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Query contatti |
POST | /services/data/vXX.0/sobjects/Contact | Crea un contatto |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | Aggiorna un contatto |
GET | /services/data/vXX.0/sobjects/Lead | Query lead |
GET | /services/data/vXX.0/sobjects/Account | Query account |
GET | /services/data/vXX.0/sobjects/Opportunity | Query opportunità |
GET | /services/data/vXX.0/query?q={SOQL} | Esegui query SOQL |
POST | /services/data/vXX.0/composite/sobjects | Creazione/aggiornamento batch |
Bulk API
| Metodo | Endpoint | Descrizione |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | Crea job di ingest bulk |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | Carica dati batch |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | Verifica stato del job |
Streaming API
| Endpoint | Descrizione |
|---|---|
/cometd/XX.0 | Long-polling CometD per eventi in tempo reale |
| PushTopic | Sottoscrivi i cambiamenti dei record tramite topic basati su SOQL |
| Change Data Capture | Stream di modifiche granulari a livello di campo |
| Platform Events | Architettura event-driven personalizzata |
Eventi
Eventi record (Change Data Capture)
| Evento | Trigger | Caso d’uso |
|---|---|---|
ContactChangeEvent | Contatto creato/aggiornato/eliminato | Sync contatti in tempo reale |
LeadChangeEvent | Lead creato/aggiornato/convertito | Tracciamento lifecycle lead |
OpportunityChangeEvent | Stage opportunità modificato | Automazione deal pipeline |
AccountChangeEvent | Record account modificato | Sync dati aziendali |
Platform Events
| Evento | Trigger | Caso d’uso |
|---|---|---|
Lead_Converted__e | Lead convertito in contatto | Nurture post-conversione |
Deal_Won__e | Opportunità closed-won | Flusso onboarding cliente |
Deal_Lost__e | Opportunità closed-lost | Campagne di win-back |
Esempi di codice
Inizializza il connettore
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});Sincronizza contatti con filtro SOQL
// 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// }Streaming in tempo reale
// 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 }});Limiti di velocità
I limiti della Salesforce REST API dipendono dalla tua edizione e dal numero di licenze:
| Edizione | Richieste API per 24 ore |
|---|---|
| Developer | 15.000 |
| Enterprise | 1.000 per licenza utente (min 15.000) |
| Unlimited | 5.000 per licenza utente (min 15.000) |
| Performance | 5.000 per licenza utente (min 15.000) |
Limiti aggiuntivi:
- Limite API concorrenti: 25 richieste long-running
- Bulk API: 15.000 batch per 24 ore
- Streaming API: 2.000 eventi al giorno (possono essere aumentati)
- Composite API: 25 subrequest per richiesta composite
Monitoraggio uso API
Monitora l’utilizzo delle API in Salesforce Setup > System Overview. Tajo usa la bulk API per le sync grandi per risparmiare i tuoi limiti API.
Risoluzione dei problemi
Problemi comuni
| Problema | Causa | Soluzione |
|---|---|---|
| INVALID_SESSION_ID | Token scaduto | Aggiorna automaticamente il token OAuth |
| REQUEST_LIMIT_EXCEEDED | Limite API giornaliero raggiunto | Usa Bulk API o riduci la frequenza di sync |
| FIELD_INTEGRITY_EXCEPTION | Campo obbligatorio mancante | Mappa tutti i campi obbligatori in configurazione |
| DUPLICATES_DETECTED | Regole di duplicazione attive | Configura le preferenze di gestione duplicati |
| INSUFFICIENT_ACCESS | Permessi oggetto mancanti | Concedi l’accesso API nel profilo Salesforce |
Modalità debug
Abilita il logging dettagliato:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueTesta la connessione
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledBest practice
- Usa Bulk API per sync grandi - Passa a Bulk API 2.0 per dataset oltre i 2.000 record
- Implementa Change Data Capture - Usa CDC per la sync in tempo reale invece del polling
- Mappa solo i campi necessari - Riduci l’uso dell’API sincronizzando solo i campi richiesti
- Gestisci il refresh del token - Implementa la logica di refresh automatico del token OAuth
- Usa richieste composite - Combina chiamate API correlate per ridurre il numero di richieste
- Testa prima in sandbox - Usa una org sandbox di Salesforce prima del deployment in produzione
Sicurezza
- OAuth 2.0 - Autorizzazione standard del settore con più tipi di grant
- Restrizioni IP - Salesforce supporta login IP range e trusted IP settings
- TLS 1.2+ - Tutte le comunicazioni API cifrate con TLS 1.2 minimo
- Sicurezza a livello di campo - Controllo granulare degli accessi ai campi per profilo
- Gestione sessioni - Timeout sessione configurabile e limiti di sessione concorrenti