Conector de Salesforce
Conector de Salesforce
Conecta tu CRM de Salesforce con Brevo a través de Tajo para sincronizar contactos de forma empresarial, gestionar leads, hacer seguimiento de oportunidades y automatizar el marketing impulsado por los datos de tu CRM.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Salesforce |
| Categoría | CRM |
| Complejidad de configuración | Avanzada |
| Integración oficial | Sí |
| Datos sincronizados | Contactos, Leads, Cuentas, Oportunidades, Eventos |
| URL base de la API | https://yourInstance.salesforce.com/services/data/vXX.0 |
Funcionalidades
- Sincronización bidireccional de contactos/leads - Sincroniza los contactos y leads de Salesforce con listas de contactos de Brevo
- Seguimiento de oportunidades - Asocia etapas e importes de negocios para segmentar por ingresos
- Jerarquía de cuentas - Sincroniza cuentas de empresa para marketing basado en cuentas en Brevo
- Mapeo de objetos personalizados - Asocia objetos personalizados de Salesforce con atributos y eventos de Brevo
- Sincronización de miembros de campaña - Sincroniza los miembros de campañas de Salesforce con listas de Brevo
- Seguimiento de actividades - Sincroniza tareas, eventos y actividades de email para el scoring de interacción
- Streaming en tiempo real - Usa la Streaming API de Salesforce para actualizaciones instantáneas
- Soporte para consultas SOQL - Filtra los datos sincronizados con consultas SOQL personalizadas
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una organización de Salesforce (cualquier edición con acceso a la API)
- Una Connected App configurada en la configuración de Salesforce
- Acceso a la API habilitado en el perfil de tu usuario de Salesforce
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo
Autenticación
Flujo OAuth 2.0 Web Server (recomendado)
La mejor opción para integraciones en producción con autorización del usuario.
# 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}"Flujo Username-Password
Para integraciones servidor a servidor sin interacción del usuario.
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}"Token de seguridad
Salesforce requiere añadir tu token de seguridad a tu contraseña en el flujo username-password. Regenera el token en Setup > My Personal Information > Reset My Security Token.
Configuración
Configuración básica
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: 17Asignación de campos
Asocia los campos de Salesforce con los atributos de contacto de Brevo:
Asignaciones por defecto
| Parameter | Type | Description |
|---|---|---|
Email required | string | Correo electrónico de contacto/lead (identificador único para Brevo) |
FirstName optional | string | Se asigna al atributo FIRSTNAME en Brevo |
LastName optional | string | Se asigna al atributo LASTNAME en Brevo |
Phone optional | string | Se asigna al atributo SMS para mensajería por WhatsApp/SMS |
Account.Name optional | string | Nombre de la cuenta/empresa asociada |
LeadSource optional | string | Fuente de adquisición del lead |
StageName optional | string | Etapa de la oportunidad para el seguimiento del negocio |
OwnerId optional | string | Comercial asignado para el enrutamiento |
Asignación de campos personalizados
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_TIEREndpoints de la API
Recursos de la REST API
| Método | Endpoint | Descripción |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Consultar contactos |
POST | /services/data/vXX.0/sobjects/Contact | Crear un contacto |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | Actualizar un contacto |
GET | /services/data/vXX.0/sobjects/Lead | Consultar leads |
GET | /services/data/vXX.0/sobjects/Account | Consultar cuentas |
GET | /services/data/vXX.0/sobjects/Opportunity | Consultar oportunidades |
GET | /services/data/vXX.0/query?q={SOQL} | Ejecutar consulta SOQL |
POST | /services/data/vXX.0/composite/sobjects | Crear/actualizar en lote |
Bulk API
| Método | Endpoint | Descripción |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | Crear job de ingesta masiva |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | Subir datos por lote |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | Consultar estado del job |
Streaming API
| Endpoint | Descripción |
|---|---|
/cometd/XX.0 | Long-polling CometD para eventos en tiempo real |
| PushTopic | Suscripción a cambios de registros mediante topics basados en SOQL |
| Change Data Capture | Stream granular de cambios a nivel de campo |
| Platform Events | Arquitectura personalizada orientada a eventos |
Eventos
Eventos de registros (Change Data Capture)
| Evento | Disparador | Caso de uso |
|---|---|---|
ContactChangeEvent | Contacto creado/actualizado/eliminado | Sincronización de contactos en tiempo real |
LeadChangeEvent | Lead creado/actualizado/convertido | Seguimiento del ciclo de vida del lead |
OpportunityChangeEvent | Cambio de etapa de la oportunidad | Automatización del pipeline |
AccountChangeEvent | Registro de cuenta modificado | Sincronización de datos de empresa |
Platform Events
| Evento | Disparador | Caso de uso |
|---|---|---|
Lead_Converted__e | Lead convertido en contacto | Nutrición posconversión |
Deal_Won__e | Oportunidad ganada | Flujo de onboarding de clientes |
Deal_Lost__e | Oportunidad perdida | Campañas de recuperación |
Ejemplos de código
Inicializar el conector
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});Sincronizar contactos 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 en tiempo real
// 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 }});Límites de velocidad
Los límites de la REST API de Salesforce dependen de tu edición y del número de licencias:
| Edición | Peticiones a la API cada 24 horas |
|---|---|
| Developer | 15.000 |
| Enterprise | 1.000 por licencia de usuario (mín. 15.000) |
| Unlimited | 5.000 por licencia de usuario (mín. 15.000) |
| Performance | 5.000 por licencia de usuario (mín. 15.000) |
Límites adicionales:
- Límite concurrente de la API: 25 peticiones de larga duración
- Bulk API: 15.000 lotes cada 24 horas
- Streaming API: 2.000 eventos al día (se puede ampliar)
- Composite API: 25 subpeticiones por petición compuesta
Supervisión del uso de la API
Supervisa el uso de la API en Salesforce Setup > System Overview. Tajo usa Bulk API para sincronizaciones grandes para no consumir tus límites.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| INVALID_SESSION_ID | Token expirado | Refresca el token OAuth automáticamente |
| REQUEST_LIMIT_EXCEEDED | Límite diario de la API alcanzado | Usa Bulk API o reduce la frecuencia de sincronización |
| FIELD_INTEGRITY_EXCEPTION | Falta un campo obligatorio | Asigna todos los campos obligatorios en la configuración |
| DUPLICATES_DETECTED | Reglas de duplicados activas | Configura las preferencias de gestión de duplicados |
| INSUFFICIENT_ACCESS | Permisos de objeto insuficientes | Concede acceso a la API en el perfil de Salesforce |
Modo depuración
Activa el registro detallado:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueProbar la conexión
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledBuenas prácticas
- Usa Bulk API para sincronizaciones grandes - Pasa a Bulk API 2.0 para conjuntos de más de 2.000 registros
- Implementa Change Data Capture - Usa CDC para sincronizaciones en tiempo real en lugar de polling
- Asigna solo los campos necesarios - Reduce el uso de la API sincronizando solo los campos requeridos
- Gestiona la renovación de tokens - Implementa lógica de refresh de tokens OAuth automática
- Usa peticiones compuestas - Combina llamadas relacionadas a la API para reducir el número de peticiones
- Prueba primero en sandbox - Usa una organización sandbox de Salesforce antes de desplegar en producción
Seguridad
- OAuth 2.0 - Autorización estándar del sector con varios tipos de grant
- Restricciones de IP - Salesforce admite rangos de IP de inicio de sesión y configuración de IP de confianza
- TLS 1.2+ - Toda la comunicación con la API va cifrada con TLS 1.2 como mínimo
- Seguridad a nivel de campo - Control granular de acceso a campos por perfil
- Gestión de sesiones - Tiempo de espera de sesión y límites de sesiones concurrentes configurables