Pipedrive コネクター
Pipedrive コネクター
Pipedrive を Tajo 経由で Brevo に接続して、営業パイプラインとマーケティングオートメーションを橋渡しします。コンタクト、取引、組織、アクティビティを同期することで、CRM のステージ変更をきっかけとするライフサイクルキャンペーンを実現できます。
概要
| 項目 | 値 |
|---|---|
| プラットフォーム | Pipedrive |
| カテゴリー | CRM |
| セットアップ難易度 | 容易 |
| 公式統合 | なし |
| 同期データ | 個人、取引、組織、アクティビティ |
| 利用可能なスキル | 8 |
機能
- コンタクト同期 - Pipedrive の個人と Brevo コンタクトを双方向同期
- 取引ステージ追跡 - 取引パイプラインのステージ変更で Brevo オートメーションをトリガー
- 組織同期 - Pipedrive 組織を Brevo の会社属性にマッピング
- アクティビティ追跡 - Pipedrive のアクティビティ (通話、メール、会議) を Brevo イベントとして転送
- カスタムフィールド - Pipedrive カスタムフィールドを Brevo コンタクト属性にマッピング
- パイプラインレポート - マーケティングアトリビューション向けに取引パイプラインデータを取得
- リード同期 - Pipedrive のリードをナーチャリングキャンペーン用に Brevo へ取り込み
- ウェブフック自動化 - Pipedrive ウェブフックによるリアルタイム更新
前提条件
開始する前に、以下をご用意ください。
- 管理者権限のある Pipedrive アカウント
- Pipedrive の API トークン (Settings > Personal preferences > API にあります)
- OAuth アプリの場合: 登録済み Pipedrive アプリの Client ID と Client Secret
- API アクセス付きの Brevo アカウント
- API 認証情報を持つ Tajo アカウント
認証
API トークン
最もシンプルな認証方式です。Pipedrive の Settings > Personal preferences > API に API トークンがあります。
curl "https://api.pipedrive.com/v1/persons?api_token=YOUR_API_TOKEN"OAuth 2.0 (アプリ向け推奨)
本番アプリケーションには OAuth 2.0 を使用してください。
# Authorization URLhttps://oauth.pipedrive.com/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI
# Token exchangecurl -X POST https://oauth.pipedrive.com/oauth/token \ -d "grant_type=authorization_code" \ -d "code=AUTH_CODE" \ -d "redirect_uri=REDIRECT_URI" \ -u "CLIENT_ID:CLIENT_SECRET"アクセストークン取得後:
curl "https://api.pipedrive.com/v1/persons" \ -H "Authorization: Bearer ACCESS_TOKEN"設定
基本セットアップ
connectors: pipedrive: enabled: true api_token: "your-pipedrive-api-token" company_domain: "yourcompany" # yourcompany.pipedrive.com
# Data sync options sync: persons: true deals: true organizations: true activities: true leads: true
# Brevo list assignment lists: all_contacts: 60 qualified_leads: 61 customers: 62 churned: 63個人フィールドマッピング
Pipedrive の個人フィールドを Brevo コンタクト属性にマッピングします。
person_mapping: email: email name: FULLNAME first_name: FIRSTNAME last_name: LASTNAME phone: SMS org_id.name: COMPANY
# Deal-related computed fields won_deals_count: WON_DEALS lost_deals_count: LOST_DEALS open_deals_count: OPEN_DEALS closed_deals_count: CLOSED_DEALS total_revenue: LTV
# Custom fields (use Pipedrive field key) custom_fields.lead_source: LEAD_SOURCE custom_fields.industry: INDUSTRY custom_fields.company_size: COMPANY_SIZE取引ステージのマッピング
Pipedrive のパイプラインステージを Brevo のリスト割当にマッピングします。
deal_stage_mapping: # stage_id -> brevo_list_id 1: 61 # Lead In 2: 61 # Contact Made 3: 62 # Proposal Made 4: 62 # Negotiations Started "won": 63 # Won -> Customers list "lost": 64 # Lost -> Win-back listウェブフック設定
webhooks: - event_action: "added" event_object: "person" brevo_event: "contact_created" - event_action: "updated" event_object: "person" brevo_event: "contact_updated" - event_action: "added" event_object: "deal" brevo_event: "deal_created" - event_action: "updated" event_object: "deal" brevo_event: "deal_updated" - event_action: "merged" event_object: "person" brevo_event: "contact_merged" - event_action: "added" event_object: "activity" brevo_event: "activity_logged"API エンドポイント
| メソッド | エンドポイント | 説明 |
|---|---|---|
GET | /v1/persons | 個人一覧 |
POST | /v1/persons | 個人を作成 |
PUT | /v1/persons/{id} | 個人を更新 |
DELETE | /v1/persons/{id} | 個人を削除 |
GET | /v1/deals | 取引一覧 |
POST | /v1/deals | 取引を作成 |
PUT | /v1/deals/{id} | 取引を更新 |
GET | /v1/organizations | 組織一覧 |
POST | /v1/organizations | 組織を作成 |
GET | /v1/activities | アクティビティ一覧 |
POST | /v1/activities | アクティビティを作成 |
GET | /v1/leads | リード一覧 |
GET | /v1/pipelines | パイプライン一覧 |
GET | /v1/stages | パイプラインステージ一覧 |
GET | /v1/itemSearch | 全アイテム横断検索 |
POST | /v1/webhooks | ウェブフック作成 |
GET | /v1/recents | 最近変更されたアイテム取得 |
コード例
Pipedrive コネクターの初期化
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Pipedrive accountawait tajo.connectors.connect('pipedrive', { apiToken: process.env.PIPEDRIVE_API_TOKEN, companyDomain: 'yourcompany'});個人を Brevo に同期
// Fetch persons from Pipedriveconst response = await fetch( `https://api.pipedrive.com/v1/persons?start=0&limit=100&api_token=${API_TOKEN}`);
const { data, additional_data } = await response.json();// data: [{ id, name, first_name, last_name, email, phone, org_id, ... }]// additional_data.pagination: { start, limit, more_items_in_collection }取引ステージ変更の追跡
// Webhook handler for deal updatesapp.post('/webhooks/pipedrive', async (req, res) => { const { meta, current, previous } = req.body;
if (meta.object === 'deal' && meta.action === 'updated') { // Detect stage change if (current.stage_id !== previous.stage_id) { await tajo.connectors.handleWebhook('pipedrive', { topic: 'deal.stage_changed', payload: { dealId: current.id, dealTitle: current.title, previousStage: previous.stage_id, newStage: current.stage_id, personId: current.person_id, value: current.value, currency: current.currency } }); } }
res.status(200).send('OK');});Pipedrive 全体検索
// Global search across persons, deals, and organizationsconst response = await fetch( `https://api.pipedrive.com/v1/itemSearch?term=${query}&item_types=person,deal&api_token=${API_TOKEN}`);
const { data } = await response.json();// Returns matching persons, deals, and organizationsレート制限
| プラン | 制限 | 詳細 |
|---|---|---|
| Essential | 80 リクエスト/10 秒 | API トークンごと |
| Advanced | 100 リクエスト/10 秒 | API トークンごと |
| Professional | 200 リクエスト/10 秒 | API トークンごと |
| Power | 200 リクエスト/10 秒 | API トークンごと |
| Enterprise | 400 リクエスト/10 秒 | API トークンごと |
| OAuth アプリ | 80 リクエスト/2 秒 | アクセストークンごと |
追加制限:
| リソース | 制限 |
|---|---|
| 1 ページあたり | 最大 500 レコード |
| ウェブフック | アカウントあたり 40 |
| 一括削除 | 100 件/リクエスト |
| 検索 | 標準レート制限 |
レート制限ヘッダー
Pipedrive は X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset ヘッダーを返します。X-RateLimit-Remaining がゼロに近づいたらバックオフを実装してください。
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
401 Unauthorized | 無効な API トークン | Pipedrive の Settings > API でトークンを再生成 |
403 Forbidden | アカウント権限不足 | アカウントに API 利用のための管理者権限を付与 |
| 個人にメールがない | レコードにメールなし | 同期前に有効なメールを持つ個人でフィルタ |
| カスタムフィールドが未マッピング | フィールドキーが不正 | 表示名ではなく Pipedrive のフィールドキー (ハッシュ) を使用 |
| ウェブフックが受信されない | ファイアウォールでブロック | ウェブフック URL が HTTPS で公開されていることを確認 |
| 重複した個人 | 複数のメールレコード | 同期前に Pipedrive のマージ API を使用 |
429 Too Many Requests | レート制限超過 | X-RateLimit-Reset ヘッダーでバックオフを実装 |
ベストプラクティス
- 本番では OAuth を利用 - 本番アプリケーションでは API トークンより OAuth 2.0 を優先
- 取引ステージ変更を追跡 - ウェブフックでパイプラインステージ遷移時に Brevo オートメーションをトリガー
- カスタムフィールドをマッピング - Pipedrive のカスタムフィールドキー (名前ではなく) を使って確実にマッピング
- ページネーションを処理 -
startとlimitパラメータを使用し、more_items_in_collectionを確認 - Recents エンドポイントを活用 - フルエクスポートの代わりに
/v1/recentsをポーリングして増分同期 - 同期前に重複排除 - 同期前に Pipedrive で重複した個人をマージ
- サンドボックスを利用 - 統合テスト用に開発者サンドボックスアカウントを作成
セキュリティ
- API トークン認証 - 個人利用向けシンプルなトークンベースアクセス
- OAuth 2.0 - サードパーティアプリ向けの安全な委任アクセス
- HTTPS のみ - すべての API 通信に TLS 暗号化必須
- ウェブフック HTTPS - ウェブフックは HTTPS エンドポイントにのみ配信
- ロールベースアクセス - Pipedrive の権限はユーザーロールに従う
- SOC 2 認証 - Pipedrive は SOC 2 コンプライアンスを維持
- GDPR 準拠 - データのエクスポートと削除リクエストに対応