PostHog コネクタ

Tajo を介して PostHog を Brevo に接続し、製品分析データ、ユーザー行動イベント、コホートメンバーシップを同期して、データ駆動型マーケティングキャンペーンとパーソナライズされた顧客エンゲージメントを実現します。

概要

プロパティ
プラットフォームPostHog
カテゴリ製品分析(カスタム)
セットアップの複雑さ
公式統合いいえ
同期データイベント、人物、機能フラグ、コホート
認証方式Personal API Key / Project Token

機能

  • イベント同期 - 行動ターゲティングのために PostHog 分析イベントを Brevo に転送
  • 人物プロファイル同期 - PostHog の人物プロパティを Brevo 連絡先属性に同期
  • コホートベースのセグメンテーション - PostHog コホートを Brevo 連絡先リストにマッピング
  • 機能フラグ同期 - 有効化された機能フラグで連絡先をセグメント化
  • ファネルデータ - ターゲットの再エンゲージメントのためにコンバージョンファネルデータを使用
  • セッションリプレイメタデータ - セッションエンゲージメントメトリクスで連絡先を強化

前提条件

開始する前に、以下を準備してください。

  1. PostHog アカウント(クラウドまたはセルフホスト)
  2. PostHog Settings からの Personal API Key
  3. Project Settings からのプロジェクト API キー(トークン)
  4. API アクセス可能な Brevo アカウント
  5. コネクタ権限を持つ Tajo アカウント

認証

Personal API Key(プライベートエンドポイント)

Terminal window
# https://app.posthog.com/settings/user-api-keys で生成
export POSTHOG_PERSONAL_API_KEY=phx_your_personal_api_key
export POSTHOG_PROJECT_TOKEN=phc_your_project_token
export POSTHOG_HOST=https://us.posthog.com # または https://eu.posthog.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// プライベート API エンドポイントは Bearer 認証を使用
const headers = {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`,
'Content-Type': 'application/json'
};
// パブリックエンドポイントはプロジェクトトークンを使用
const publicHeaders = {
'Content-Type': 'application/json'
};
// パブリックエンドポイントではトークンをリクエストボディで渡す

API キーのセキュリティ

Personal API キーは完全なアカウントアクセスを提供します。クライアントサイドコードに決して公開しないでください。イベントキャプチャや機能フラグ評価などのパブリックエンドポイントにはプロジェクト API キー(トークン)を使用してください。

設定

基本セットアップ

connectors:
posthog:
enabled: true
host: "${POSTHOG_HOST}"
personal_api_key: "${POSTHOG_PERSONAL_API_KEY}"
project_token: "${POSTHOG_PROJECT_TOKEN}"
project_id: "12345"
sync:
persons: true
events: true
cohorts: true
feature_flags: true
schedule: "0 */3 * * *" # 3 時間ごと
event_filters:
- "$pageview"
- "purchase_completed"
- "signup_completed"
- "feature_used"
lists:
all_users: 25
active_users: 26
power_users: 27

フィールドマッピング

field_mapping:
email: email
$name: FIRSTNAME
$browser: BROWSER
$os: OS
$initial_referrer: REFERRAL_SOURCE
total_events: EVENT_COUNT
last_seen: LAST_ACTIVE_DATE
signup_date: SIGNUP_DATE
plan: SUBSCRIPTION_PLAN
company: COMPANY
cohort_names: POSTHOG_COHORTS

API エンドポイント

エンドポイントメソッド説明
{host}/api/projects/{id}/persons/GET人物を一覧取得
{host}/api/projects/{id}/events/GETイベントを一覧取得
{host}/api/projects/{id}/cohorts/GETコホートを一覧取得
{host}/api/projects/{id}/feature_flags/GET機能フラグを一覧取得
{host}/api/projects/{id}/feature_flags/evaluation/POSTフラグを評価
{host}/api/projects/{id}/insights/GET保存済みインサイトを一覧取得
{host}/api/projects/{id}/query/POSTHogQL クエリを実行
{host}/i/v0/ePOSTイベントをキャプチャ(パブリック)
{host}/decide/?v=3POST機能フラグの判定(パブリック)

コード例

コネクタの初期化

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('posthog', {
host: process.env.POSTHOG_HOST,
personalApiKey: process.env.POSTHOG_PERSONAL_API_KEY,
projectToken: process.env.POSTHOG_PROJECT_TOKEN,
projectId: '12345'
});

人物を Brevo に同期

// PostHog の人物をページネーションで取得
let nextUrl = `${posthogHost}/api/projects/${projectId}/persons/?` +
new URLSearchParams({ limit: '100' });
while (nextUrl) {
const response = await fetch(nextUrl, {
headers: {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`
}
});
const data = await response.json();
for (const person of data.results) {
const email = person.properties.$email || person.properties.email;
if (!email) continue;
await tajo.contacts.sync({
email,
attributes: {
FIRSTNAME: person.properties.$name || person.properties.name,
LAST_ACTIVE_DATE: person.properties.$last_seen,
SIGNUP_DATE: person.created_at,
EVENT_COUNT: person.properties.$event_count,
BROWSER: person.properties.$browser,
OS: person.properties.$os,
REFERRAL_SOURCE: person.properties.$initial_referrer
},
listIds: [25]
});
}
nextUrl = data.next;
}

コホートを Brevo リストとして同期

// PostHog のコホートを取得してメンバーを Brevo リストに同期
const cohortsResponse = await fetch(
`${posthogHost}/api/projects/${projectId}/cohorts/`,
{
headers: {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`
}
}
);
const { results: cohorts } = await cohortsResponse.json();
for (const cohort of cohorts) {
// このコホート内の人物を取得
const personsResponse = await fetch(
`${posthogHost}/api/projects/${projectId}/cohorts/${cohort.id}/persons/`,
{
headers: {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`
}
}
);
const { results: persons } = await personsResponse.json();
for (const person of persons) {
const email = person.properties.$email || person.properties.email;
if (email) {
await tajo.contacts.update(email, {
attributes: {
POSTHOG_COHORTS: cohort.name
}
});
}
}
}

分析用の HogQL クエリを実行

// HogQL を使用して分析データをクエリ
const queryResponse = await fetch(
`${posthogHost}/api/projects/${projectId}/query/`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
query: {
kind: 'HogQLQuery',
query: `
SELECT
properties.$email AS email,
count() AS event_count,
max(timestamp) AS last_event
FROM events
WHERE event = 'purchase_completed'
AND timestamp > now() - interval 30 day
GROUP BY email
HAVING event_count > 3
ORDER BY event_count DESC
LIMIT 1000
`
}
})
}
);
const queryResult = await queryResponse.json();
for (const row of queryResult.results) {
await tajo.contacts.update(row[0], {
attributes: {
PURCHASE_COUNT_30D: row[1],
LAST_PURCHASE: row[2]
}
});
}

レート制限

エンドポイントカテゴリ制限備考
分析エンドポイント240/分、1,200/時間GET persons、events、insights
クエリエンドポイント2,400/時間HogQL とカスタムクエリ
機能フラグ評価600/分ローカル評価エンドポイント
CRUD エンドポイント480/分、4,800/時間作成、更新、削除操作
パブリックエンドポイント(キャプチャ)無制限イベントキャプチャ、フラグ判定

バッチエクスポート

大規模なイベントデータエクスポートには、API ではなく PostHog のバッチエクスポート機能を使用してください。バッチエクスポートは S3、BigQuery、Snowflake などの送信先をサポートしています。

トラブルシューティング

問題原因解決策
401 UnauthorizedAPI キーが無効設定で Personal API Key を確認
400 Invalid projectプロジェクト ID が間違っているPostHog URL のプロジェクト ID を確認
人物リストが空識別されたユーザーがいないposthog.identify() が呼び出されているか確認
プロパティの欠落プロパティが未設定クライアント SDK の $set 呼び出しを確認
レート制限 429リクエスト過多バックオフを実装し、レート制限ヘッダーを確認

デバッグモード

connectors:
posthog:
debug: true
log_level: verbose
log_queries: true
log_sync: true

ベストプラクティス

  1. ユーザーを識別する - 人物同期を有効にするため常にメール付きで posthog.identify() を呼び出す
  2. セグメンテーションにはコホートを使用する - Brevo リストに PostHog の行動コホートを活用
  3. API リクエストをバッチ処理する - 大規模データセットにはページネーションとバッチ処理を使用
  4. 複雑なクエリには HogQL を使用する - SQL ライクなクエリでカスタム分析を抽出
  5. バッチエクスポートを設定する - 大量のデータには API ポーリングよりもバッチエクスポートを優先
  6. 関連イベントをフィルタリング - ノイズを減らすためマーケティング関連イベントのみを同期

セキュリティ

  • Personal API Key - スコープ付き Bearer トークン認証
  • プロジェクトトークン - クライアントサイド操作専用のパブリックトークン
  • HTTPS のみ - すべてのエンドポイントに TLS 暗号化が必要
  • IP 許可リスト - セルフホストインスタンスで利用可能
  • キースコープ - 特定の権限スコープで API キーを作成
  • GitHub シークレットスキャン - PostHog は漏洩キー検出のため GitHub と提携

関連リソース

Subscribe to updates

developer-docs

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

auto-detect
AIアシスタント

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