Salesforce コネクター

Salesforce コネクター

Salesforce CRM を Tajo 経由で Brevo に接続して、エンタープライズグレードのコンタクト同期、リード管理、商談追跡、CRM データを活用したマーケティングオートメーションを実現します。

概要

項目
プラットフォームSalesforce
カテゴリーCRM
セットアップ難易度高度
公式統合あり
同期データコンタクト、リード、アカウント、商談、イベント
API ベース URLhttps://yourInstance.salesforce.com/services/data/vXX.0

機能

  • 双方向のコンタクト/リード同期 - Salesforce のコンタクトとリードを Brevo コンタクトリストと同期
  • 商談追跡 - 売上ベースのセグメンテーションのために取引ステージと金額をマッピング
  • アカウント階層 - Brevo の ABM 向けに企業アカウントを同期
  • カスタムオブジェクトマッピング - Salesforce カスタムオブジェクトを Brevo 属性とイベントにマッピング
  • キャンペーンメンバー同期 - Salesforce キャンペーンメンバーを Brevo リストと同期
  • アクティビティ追跡 - エンゲージメントスコアリング向けに、タスク、イベント、メール活動を同期
  • リアルタイムストリーミング - Salesforce Streaming API を使用した即時データ更新
  • SOQL クエリ対応 - カスタム SOQL クエリで同期データをフィルタリング

前提条件

開始する前に、以下をご用意ください。

  1. API アクセス可能な Salesforce org (エディション不問)
  2. Salesforce Setup で設定した Connected App
  3. Salesforce ユーザープロファイルで API アクセスが有効
  4. API アクセス付きの Brevo アカウント
  5. Tajo アカウント

認証

OAuth 2.0 Web Server フロー (推奨)

ユーザー承認を伴う本番統合に最適です。

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 フロー

ユーザー操作を伴わないサーバー間統合向けです。

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}"

セキュリティトークン

Salesforce の Username-Password フローでは、パスワードにセキュリティトークンを追加する必要があります。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

コンタクト/リードのメール (Brevo における一意の識別子)

FirstName optional
string

Brevo の FIRSTNAME 属性にマッピング

LastName optional
string

Brevo の LASTNAME 属性にマッピング

Phone optional
string

WhatsApp/SMS 送信用の 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バルク取込ジョブを作成
PUT/services/data/vXX.0/jobs/ingest/{jobId}/batchesバッチデータをアップロード
GET/services/data/vXX.0/jobs/ingest/{jobId}ジョブステータスを確認

Streaming API

エンドポイント説明
/cometd/XX.0リアルタイムイベント用 CometD ロングポーリング
PushTopicSOQL ベースのトピックでレコード変更を購読
Change Data Captureフィールドレベルの変更をきめ細かくストリーム
Platform Eventsカスタムイベント駆動アーキテクチャ

イベント

レコードイベント (Change Data Capture)

イベントトリガー用途
ContactChangeEventコンタクトの作成/更新/削除リアルタイムコンタクト同期
LeadChangeEventリードの作成/更新/変換リードライフサイクル追跡
OpportunityChangeEvent商談ステージの変更取引パイプラインの自動化
AccountChangeEventアカウントレコードの変更企業データ同期

Platform Events

イベントトリガー用途
Lead_Converted__eリードがコンタクトに変換変換後のナーチャリング
Deal_Won__e商談成立顧客オンボーディングフロー
Deal_Lost__e商談失注ウィンバックキャンペーン

コード例

コネクターの初期化

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
});

SOQL フィルタでコンタクトを同期

// 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
// }

リアルタイムストリーミング

// 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
}
});

レート制限

Salesforce REST API の制限はエディションとライセンス数によって異なります。

エディション24 時間あたりの API リクエスト数
Developer15,000
Enterpriseユーザーライセンス 1 件あたり 1,000 (最小 15,000)
Unlimitedユーザーライセンス 1 件あたり 5,000 (最小 15,000)
Performanceユーザーライセンス 1 件あたり 5,000 (最小 15,000)

追加制限:

  • 同時 API 制限: 長時間実行リクエスト 25 件
  • Bulk API: 24 時間あたり 15,000 バッチ
  • Streaming API: 1 日あたり 2,000 イベント (引き上げ可能)
  • Composite API: 1 リクエストあたり 25 サブリクエスト

API 使用状況のモニタリング

Salesforce Setup > System Overview で API 使用状況を確認できます。Tajo は大規模同期で Bulk API を使用して API 制限を節約します。

トラブルシューティング

よくある問題

問題原因解決策
INVALID_SESSION_IDトークン期限切れOAuth トークンを自動更新
REQUEST_LIMIT_EXCEEDED1 日の API 制限到達Bulk API を使用または同期頻度を削減
FIELD_INTEGRITY_EXCEPTION必須フィールド欠落設定で全必須フィールドをマッピング
DUPLICATES_DETECTED重複ルールが有効重複処理の設定を調整
INSUFFICIENT_ACCESSオブジェクト権限不足Salesforce プロファイルで API アクセスを付与

デバッグモード

詳細ログを有効化します。

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

接続テスト

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

ベストプラクティス

  1. 大規模同期には Bulk API を使用 - 2,000 件超のデータセットには Bulk API 2.0 を採用
  2. Change Data Capture を実装 - ポーリングの代わりに CDC でリアルタイム同期
  3. 必要なフィールドのみマッピング - 必要なフィールドのみ同期して API 使用量を削減
  4. トークンリフレッシュを処理 - OAuth トークンの自動更新ロジックを実装
  5. Composite リクエストを活用 - 関連する API コールを束ねてリクエスト数を削減
  6. まず Sandbox でテスト - 本番展開前に Salesforce Sandbox org で検証

セキュリティ

  • OAuth 2.0 - 複数のグラント種別をサポートする業界標準の認可
  • IP 制限 - Salesforce はログイン IP 範囲と信頼 IP 設定をサポート
  • TLS 1.2+ - すべての API 通信は TLS 1.2 以上で暗号化
  • フィールドレベルセキュリティ - プロファイルごとのきめ細かいフィールドアクセス制御
  • セッション管理 - セッションタイムアウトと同時セッション数を設定可能

関連リソース

Subscribe to updates

developer-docs

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

AIアシスタント

こんにちは!ドキュメントについて何でもお聞きください。

Brevoで無料で始める