Коннектор Salesforce
Коннектор Salesforce
Подключите вашу Salesforce CRM к Brevo через Tajo для корпоративной синхронизации контактов, управления лидами, отслеживания возможностей и маркетинговой автоматизации на основе данных CRM.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | Salesforce |
| Категория | CRM |
| Сложность настройки | Продвинутая |
| Официальная интеграция | Да |
| Синхронизируемые данные | Контакты, лиды, аккаунты, возможности, события |
| Базовый URL API | https://yourInstance.salesforce.com/services/data/vXX.0 |
Возможности
- Двусторонняя синхронизация контактов/лидов, синхронизация контактов и лидов Salesforce со списками контактов Brevo
- Отслеживание возможностей, сопоставляйте стадии сделок и суммы для сегментации по выручке
- Иерархия аккаунтов, синхронизируйте компании-аккаунты для account-based маркетинга в Brevo
- Сопоставление кастомных объектов, сопоставляйте кастомные объекты Salesforce с атрибутами и событиями Brevo
- Синхронизация участников кампаний, синхронизируйте участников кампаний Salesforce со списками Brevo
- Отслеживание активности, синхронизируйте задачи, события и email-активности для оценки вовлечённости
- Стриминг в реальном времени, используйте Salesforce Streaming API для мгновенных обновлений данных
- Поддержка SOQL-запросов, фильтруйте синхронизируемые данные кастомными SOQL-запросами
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Salesforce org (любой edition с доступом к API)
- Connected App, настроенное в Salesforce Setup
- Включённый API-доступ для профиля пользователя Salesforce
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo
Аутентификация
OAuth 2.0 Web Server Flow (рекомендуется)
Лучший вариант для продакшен-интеграций с авторизацией пользователя.
# 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
Для интеграций server-to-server без участия пользователя.
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 требует добавлять security token к паролю для username-password flow. Сбросьте токен в Setup > My Personal Information > Reset My Security Token.
Конфигурация
Базовая настройка
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Сопоставление полей
Сопоставьте поля Salesforce с атрибутами контакта Brevo:
Сопоставления по умолчанию
| Parameter | Type | Description |
|---|---|---|
Email required | string | Email контакта/лида (уникальный идентификатор для Brevo) |
FirstName optional | string | Сопоставляется с атрибутом FIRSTNAME в Brevo |
LastName optional | string | Сопоставляется с атрибутом LASTNAME в Brevo |
Phone optional | string | Сопоставляется с атрибутом SMS для WhatsApp/SMS-сообщений |
Account.Name optional | string | Название связанного аккаунта/компании |
LeadSource optional | string | Источник привлечения лида |
StageName optional | string | Стадия возможности для отслеживания сделок |
OwnerId optional | string | Назначенный менеджер по продажам для маршрутизации |
Сопоставление кастомных полей
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
Ресурсы REST API
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /services/data/vXX.0/sobjects/Contact | Запрос контактов |
POST | /services/data/vXX.0/sobjects/Contact | Создать контакт |
PATCH | /services/data/vXX.0/sobjects/Contact/{id} | Обновить контакт |
GET | /services/data/vXX.0/sobjects/Lead | Запрос лидов |
GET | /services/data/vXX.0/sobjects/Account | Запрос аккаунтов |
GET | /services/data/vXX.0/sobjects/Opportunity | Запрос возможностей |
GET | /services/data/vXX.0/query?q={SOQL} | Выполнить SOQL-запрос |
POST | /services/data/vXX.0/composite/sobjects | Пакетное создание/обновление |
Bulk API
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | /services/data/vXX.0/jobs/ingest | Создать bulk ingest job |
PUT | /services/data/vXX.0/jobs/ingest/{jobId}/batches | Загрузить пакет данных |
GET | /services/data/vXX.0/jobs/ingest/{jobId} | Проверить статус job |
Streaming API
| Эндпоинт | Описание |
|---|---|
/cometd/XX.0 | CometD long-polling для событий в реальном времени |
| PushTopic | Подписка на изменения записей через SOQL-топики |
| Change Data Capture | Стриминг детальных изменений на уровне полей |
| Platform Events | Кастомная event-driven архитектура |
События
События записей (Change Data Capture)
| Событие | Триггер | Сценарий использования |
|---|---|---|
ContactChangeEvent | Контакт создан/обновлён/удалён | Синхронизация контактов в реальном времени |
LeadChangeEvent | Лид создан/обновлён/сконвертирован | Отслеживание жизненного цикла лида |
OpportunityChangeEvent | Изменена стадия возможности | Автоматизация воронки сделок |
AccountChangeEvent | Изменена запись аккаунта | Синхронизация данных компаний |
Platform Events
| Событие | Триггер | Сценарий использования |
|---|---|---|
Lead_Converted__e | Лид сконвертирован в контакт | Пост-конверсионное взращивание |
Deal_Won__e | Возможность закрыта как won | Процесс онбординга клиента |
Deal_Lost__e | Возможность закрыта как lost | Win-back кампании |
Примеры кода
Инициализация коннектора
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});Синхронизация контактов с 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// }Стриминг в реальном времени
// 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 }});Ограничения скорости
Лимиты REST API Salesforce зависят от вашего edition и количества лицензий:
| Edition | API-запросы за 24 часа |
|---|---|
| Developer | 15 000 |
| Enterprise | 1 000 на пользовательскую лицензию (минимум 15 000) |
| Unlimited | 5 000 на пользовательскую лицензию (минимум 15 000) |
| Performance | 5 000 на пользовательскую лицензию (минимум 15 000) |
Дополнительные ограничения:
- Лимит параллельных API-вызовов: 25 долгих запросов
- Bulk API: 15 000 пакетов за 24 часа
- Streaming API: 2 000 событий в день (можно увеличить)
- Composite API: 25 подзапросов на композитный запрос
Мониторинг использования API
Отслеживайте использование API в Salesforce Setup > System Overview. Tajo использует Bulk API для крупных синхронизаций, чтобы экономить ваши API-лимиты.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| INVALID_SESSION_ID | Токен истёк | Автоматически обновите OAuth-токен |
| REQUEST_LIMIT_EXCEEDED | Превышен дневной API-лимит | Используйте Bulk API или уменьшите частоту синхронизации |
| FIELD_INTEGRITY_EXCEPTION | Отсутствует обязательное поле | Сопоставьте все обязательные поля в конфигурации |
| DUPLICATES_DETECTED | Активны правила дубликатов | Настройте предпочтения обработки дубликатов |
| INSUFFICIENT_ACCESS | Отсутствуют разрешения на объект | Предоставьте API-доступ в профиле Salesforce |
Режим отладки
Включите подробное логирование:
connectors: salesforce: debug: true log_level: verbose log_api_calls: trueПроверка подключения
tajo connectors test salesforce# ✓ OAuth token valid# ✓ Contacts accessible# ✓ Leads accessible# ✓ Accounts accessible# ✓ Opportunities accessible# ✓ Bulk API enabledЛучшие практики
- Используйте Bulk API для крупных синхронизаций, переключайтесь на Bulk API 2.0 для наборов данных свыше 2 000 записей
- Внедряйте Change Data Capture, используйте CDC для синхронизации в реальном времени вместо опроса
- Сопоставляйте только нужные поля, снижайте нагрузку на API, синхронизируя только необходимые поля
- Обрабатывайте обновление токенов, реализуйте автоматическую логику обновления OAuth-токенов
- Используйте composite-запросы, объединяйте связанные API-вызовы, чтобы уменьшить количество запросов
- Сначала тестируйте в sandbox, используйте Salesforce sandbox org перед развёртыванием в продакшен
Безопасность
- OAuth 2.0, отраслевой стандарт авторизации с несколькими типами grant
- Ограничения по IP, Salesforce поддерживает диапазоны IP для входа и trusted IP
- TLS 1.2+, все API-коммуникации зашифрованы минимум TLS 1.2
- Безопасность на уровне полей, детальный контроль доступа к полям по профилям
- Управление сессиями, настраиваемый таймаут сессии и лимиты параллельных сессий