Customer.io コネクター
Customer.io メッセージングプラットフォームを Brevo に接続し、統合された顧客データ、クロスプラットフォームキャンペーン連携、一元化されたエンゲージメントアナリティクスを実現します。
概要
| 項目 | 値 |
|---|---|
| プラットフォーム | Customer.io |
| カテゴリー | マーケティング |
| セットアップ難易度 | 中程度 |
| 公式統合 | なし |
| 同期データ | ピープル、イベント、キャンペーン、セグメント |
| 利用 API | Track API、App API、Pipelines API |
| 認証 | Site ID + API キー / App API キー |
| ベース URL | track.customer.io、api.customer.io |
機能
- ピープル同期 - Brevo コンタクトと顧客プロファイルを双方向同期
- イベント転送 - 行動イベントを追跡し、Brevo のオートメーショントリガーへ転送
- キャンペーン分析 - 統合レポートのためキャンペーンパフォーマンス指標を同期
- ワークフローデータ - Customer.io のワークフロー状態を Brevo コンタクト属性にミラーリング
- セグメント複製 - Customer.io のセグメントを Brevo リストとして複製
- オブジェクトデータ同期 - 非ピープルオブジェクトとリレーションシップデータを同期
前提条件
開始する前に、以下をご用意ください。
- API アクセス付きの Customer.io アカウント
- Site ID と Track API キー (Settings > API Credentials で確認)
- キャンペーンとセグメントデータ読み取り用の App API キー
- API アクセス付きの Brevo アカウント
- 有効なサブスクリプションの Tajo アカウント
認証
Customer.io は認証方式の異なる 2 つの API を使用します。
Track API (行動データ)
ピープル、イベント、デバイスデータを送信するために使用します。Basic 認証で Site ID と API キーを使用します。
# Basic Auth: Site ID as username, API Key as passwordcurl -X POST https://track.customer.io/api/v1/customers/user123 \ -u "$SITE_ID:$API_KEY" \ -H "Content-Type: application/json" \App API (データ読み取り)
キャンペーン、セグメント、顧客データを取得するために使用します。Bearer トークンで認証します。
curl -X GET https://api.customer.io/v1/campaigns \ -H "Authorization: Bearer $APP_API_KEY"API キーの分離
Track API キーと App API キーは異なる認証情報です。Track API キーはデータの書き込みに、App API キーはデータの読み取りに使用されます。完全な Tajo 統合には両方が必要です。
Tajo への接続
tajo connectors install customerio \ --site-id $CIO_SITE_ID \ --track-api-key $CIO_TRACK_API_KEY \ --app-api-key $CIO_APP_API_KEY設定
基本セットアップ
connectors: customerio: enabled: true region: "us" # or "eu" for EU data center
sync: people: true events: true campaigns: true segments: true objects: false
lists: all_contacts: 12 active_subscribers: 13 churned: 14フィールドマッピング
Customer.io のピープル属性を Brevo コンタクト属性にマッピングします。
field_mapping: # Standard fields id: CIO_ID email: email first_name: FIRSTNAME last_name: LASTNAME phone: SMS
# Engagement metrics created_at: SIGNUP_DATE last_activity: LAST_ACTIVE plan: PLAN_NAME
# Custom attributes company: COMPANY role: JOB_TITLE mrr: MONTHLY_REVENUE lifecycle_stage: LIFECYCLE_STAGEイベントマッピング
event_mapping: # Customer.io event -> Brevo event purchase_completed: ORDER_PLACED subscription_started: SUBSCRIPTION_START feature_activated: FEATURE_USED support_ticket_opened: SUPPORT_REQUESTAPI エンドポイント
Tajo は以下の Customer.io API エンドポイントと連携します。
| エンドポイント | メソッド | API | 用途 |
|---|---|---|---|
/api/v1/customers/{id} | PUT | Track | ピープルを作成または更新 |
/api/v1/customers/{id}/events | POST | Track | ピープルイベントを追跡 |
/api/v1/events | POST | Track | 匿名イベントを追跡 |
/api/v2/entity | POST | Track | ピープル/オブジェクトを作成または更新 (Pipelines) |
/v1/campaigns | GET | App | キャンペーン一覧 |
/v1/campaigns/{id}/metrics | GET | App | キャンペーンパフォーマンス指標 |
/v1/segments | GET | App | セグメント一覧 |
/v1/segments/{id}/membership | GET | App | セグメントメンバー取得 |
/v1/customers/{id}/attributes | GET | App | 顧客属性取得 |
/v1/customers/{id}/activities | GET | App | 顧客アクティビティログ取得 |
コード例
コネクターの初期化
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('customerio', { siteId: process.env.CIO_SITE_ID, trackApiKey: process.env.CIO_TRACK_API_KEY, appApiKey: process.env.CIO_APP_API_KEY, region: 'us'});ピープルを Brevo に同期
// Incremental sync of Customer.io peopleawait tajo.connectors.sync('customerio', { type: 'incremental', resources: ['people'], since: '2024-01-01', batchSize: 100});
const status = await tajo.connectors.status('customerio');console.log(status);// {// connected: true,// lastSync: '2024-03-15T14:20:00Z',// peopleCount: 32500,// campaignsTracked: 18,// eventsProcessed: 87000// }イベント転送
// Forward Customer.io reporting webhook events to Brevoapp.post('/webhooks/customerio', async (req, res) => { const events = req.body;
for (const event of events) { await tajo.connectors.handleEvent('customerio', { type: event.metric, payload: { customerId: event.data.customer_id, campaignId: event.data.campaign_id, timestamp: event.timestamp } }); }
res.status(200).send('OK');});セグメントのエクスポート
const result = await tajo.connectors.exportSegment('customerio', { segmentId: 42, targetList: 13, includeAttributes: ['email', 'first_name', 'last_name', 'plan']});
console.log(`Exported ${result.count} people to Brevo list 13`);レート制限
Customer.io は API ごとに異なるレート制限を適用します。
| API | レート制限 | 備考 |
|---|---|---|
| Track API | 約 100 リクエスト/秒 | ワークスペース単位 |
| App API | 10 リクエスト/秒 | API キー単位 |
| Pipelines API | 100 リクエスト/秒 | 大量データ向けに推奨 |
| バッチエンドポイント | 1 リクエストあたり 1,000 ピープル | ペイロード最大 500KB |
バッチエンドポイントの活用
大規模同期では、Tajo は Customer.io のバッチエンドポイントを使用して 1 リクエストあたり最大 1,000 ピープルを送信し、API コール数を大幅に削減します。
トラブルシューティング
よくある問題
| 問題 | 原因 | 解決策 |
|---|---|---|
| 401 Unauthorized | Site ID または API キーが無効 | Customer.io Settings > API で認証情報を確認 |
| ピープルが同期されない | 識別子が不足 | 各ピープルに id または email があることを確認 |
| イベントが追跡されない | API キーの種類が誤り | イベントには App API キーではなく Track API キーを使用 |
| EU データにアクセスできない | リージョン設定が誤り | EU ワークスペースではリージョンを eu に設定 |
| レート制限エラー | App API コールが多すぎる | キャンペーンデータのポーリング頻度を下げる |
デバッグモード
connectors: customerio: debug: true log_level: verbose log_api_calls: true接続テスト
tajo connectors test customerio# ✓ Track API connection successful# ✓ App API connection successful# ✓ People accessible# ✓ Campaigns readable# ✓ Segments listableベストプラクティス
- 大量データには Pipelines API を使用 - 新しい Pipelines API は大量取り込みに最適化されています
- レポートウェブフックをセットアップ - Customer.io のメールイベントをリアルタイムで Tajo に転送
- ライフサイクルステージをマッピング - Customer.io のセグメントメンバーシップを Brevo 属性に同期
- 一貫した識別子を使用 - Customer.io と Brevo 間で
idフィールドを一致させる - 増分同期 - フルエクスポートは避け、
last_activityタイムスタンプを活用 - ウェブフック配信を監視 - ウェブフック配信失敗時のアラートを設定
セキュリティ
- Basic 認証 - Track API は Site ID と API キーで認証
- Bearer トークン - App API は OAuth スタイルの bearer トークンを使用
- HTTPS 限定 - すべての API 通信を TLS 1.2+ で暗号化
- リージョナルデータセンター - GDPR 準拠のため EU データセンターオプションあり
- 暗号化ストレージ - Tajo 内ですべての認証情報を保存時に暗号化
- ウェブフック署名 - HMAC 署名でウェブフックペイロードを検証