Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

Konektor PostHog

Hubungkan PostHog ke Brevo melalui Tajo untuk menyinkronkan data product analytics, event perilaku pengguna, dan keanggotaan cohort demi kampanye pemasaran berbasis data serta keterlibatan pelanggan yang dipersonalisasi.

Ikhtisar

PropertiNilai
PlatformPostHog
KategoriProduct Analytics (Custom)
Kompleksitas penyiapanSedang
Integrasi resmiTidak
Data tersinkronEvent, person, feature flag, cohort
Metode autentikasiPersonal API Key / Project Token

Fitur

  • Sinkronisasi event - Teruskan event analytics PostHog ke Brevo untuk penargetan berbasis perilaku
  • Sinkronisasi profil person - Sinkronkan properti person PostHog ke atribut kontak Brevo
  • Segmentasi berbasis cohort - Petakan cohort PostHog ke list kontak Brevo
  • Sinkronisasi feature flag - Segmentasikan kontak berdasarkan feature flag yang aktif
  • Data funnel - Manfaatkan data funnel konversi untuk re-engagement yang tertarget
  • Metadata session replay - Perkaya kontak dengan metrik keterlibatan sesi

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Akun PostHog (Cloud atau self-hosted)
  2. Personal API Key dari PostHog Settings
  3. Project API Key (token) Anda dari Project Settings
  4. Akun Brevo dengan akses API
  5. Akun Tajo dengan izin konektor

Autentikasi

Personal API Key (endpoint privat)

Terminal window
# Generate at 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 # or https://eu.posthog.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// Private API endpoints use Bearer authentication
const headers = {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`,
'Content-Type': 'application/json'
};
// Public endpoints use the project token
const publicHeaders = {
'Content-Type': 'application/json'
};
// Token is passed in the request body for public endpoints

Keamanan API key

Personal API key memberikan akses penuh ke akun. Jangan pernah menampilkannya di kode sisi klien. Gunakan Project API Key (token) untuk endpoint publik seperti penangkapan event dan evaluasi feature flag.

Konfigurasi

Penyiapan dasar

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 * * *" # Every 3 hours
event_filters:
- "$pageview"
- "purchase_completed"
- "signup_completed"
- "feature_used"
lists:
all_users: 25
active_users: 26
power_users: 27

Pemetaan field

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

Endpoint API

EndpointMetodeDeskripsi
{host}/api/projects/{id}/persons/GETMenampilkan daftar person
{host}/api/projects/{id}/events/GETMenampilkan daftar event
{host}/api/projects/{id}/cohorts/GETMenampilkan daftar cohort
{host}/api/projects/{id}/feature_flags/GETMenampilkan daftar feature flag
{host}/api/projects/{id}/feature_flags/evaluation/POSTMengevaluasi flag
{host}/api/projects/{id}/insights/GETMenampilkan daftar insight tersimpan
{host}/api/projects/{id}/query/POSTMenjalankan kueri HogQL
{host}/i/v0/ePOSTMenangkap event (publik)
{host}/decide/?v=3POSTKeputusan feature flag (publik)

Contoh kode

Inisialisasi konektor

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

Sinkronkan person ke Brevo

// Paginate through PostHog persons
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;
}

Sinkronkan cohort sebagai list Brevo

// Get PostHog cohorts and sync members to Brevo lists
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) {
// Get persons in this cohort
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
}
});
}
}
}

Jalankan kueri HogQL untuk analytics

// Use HogQL to query analytics data
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]
}
});
}

Batas rate

Kategori endpointBatasCatatan
Endpoint analytics240/menit, 1.200/jamGET persons, events, insights
Endpoint query2.400/jamKueri HogQL dan kueri kustom
Evaluasi feature flag600/menitEndpoint evaluasi lokal
Endpoint CRUD480/menit, 4.800/jamOperasi create, update, delete
Endpoint publik (capture)Tanpa batasPenangkapan event, keputusan flag

Batch export

Untuk ekspor data event berskala besar, gunakan fitur batch export PostHog, bukan API. Batch export mendukung S3, BigQuery, Snowflake, dan destinasi lainnya.

Pemecahan masalah

MasalahPenyebabSolusi
401 UnauthorizedAPI key tidak validPeriksa Personal API Key di pengaturan
400 Invalid projectProject ID salahPeriksa project ID pada URL PostHog
Daftar person kosongTidak ada pengguna teridentifikasiPastikan posthog.identify() dipanggil
Properti tidak munculProperti belum disetelPeriksa pemanggilan $set di SDK klien
Rate limit 429Terlalu banyak permintaanTerapkan backoff, periksa header rate limit

Mode debug

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

Praktik terbaik

  1. Identifikasi pengguna - Selalu panggil posthog.identify() dengan email agar sinkronisasi person berjalan
  2. Gunakan cohort untuk segmentasi - Manfaatkan cohort perilaku PostHog untuk list Brevo
  3. Kelompokkan permintaan API - Gunakan paginasi dan pemrosesan batch untuk dataset besar
  4. Gunakan HogQL untuk kueri kompleks - Tarik analytics kustom dengan kueri bergaya SQL
  5. Siapkan batch export - Untuk volume data besar, pilih batch export daripada polling API
  6. Saring event yang relevan - Sinkronkan hanya event yang relevan bagi pemasaran untuk menekan noise

Keamanan

  • Personal API Key - Autentikasi bearer token dengan scope terbatas
  • Project token - Token publik, hanya untuk operasi sisi klien
  • HTTPS saja - Semua endpoint mewajibkan enkripsi TLS
  • Allowlist IP - Tersedia untuk instance self-hosted
  • Pembatasan scope key - Buat API key dengan scope izin yang spesifik
  • Secret scanning GitHub - PostHog bermitra dengan GitHub untuk mendeteksi key yang bocor

Sumber daya terkait

Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

deteksi otomatis
Asisten AI

Halo! Tanyakan apa saja tentang dokumentasi.