PostHog конектор
Свържи PostHog с Brevo през Tajo, за да синхронизираш данни от продуктова аналитика, събития за поведение на потребителите и членства в кохорти за маркетингови кампании, задвижвани от данни, и персонализирано ангажиране на клиентите.
Преглед
| Свойство | Стойност |
|---|---|
| Платформа | PostHog |
| Категория | Продуктова аналитика (персонализирана) |
| Сложност на настройка | Средна |
| Официална интеграция | Не |
| Синхронизирани данни | Събития, лица, feature flags, кохорти |
| Метод на автентикация | Personal API Key / Project Token |
Функции
- Синхронизация на събития – Препращай аналитични събития от PostHog към Brevo за поведенческо таргетиране
- Синхронизация на профили на лица – Синхронизирай свойства на лица от PostHog към атрибути на контактите в Brevo
- Сегментация на базата на кохорти – Мапвай кохорти от PostHog към списъци с контакти в Brevo
- Синхронизация на feature flags – Сегментирай контактите по активирани feature flags
- Данни за фунии – Използвай данни от конверсионни фунии за таргетирано re-engagement
- Метаданни от session replay – Обогати контактите с метрики за ангажираност в сесията
Предварителни условия
Преди да започнеш, увери се, че имаш:
- Акаунт в PostHog (Cloud или self-hosted)
- Personal API Key от PostHog Settings
- Твоя Project API Key (token) от Project Settings
- Акаунт в Brevo с API достъп
- Акаунт в Tajo с разрешения за конектори
Автентикация
Personal API Key (частни крайни точки)
# Generate at https://app.posthog.com/settings/user-api-keysexport POSTHOG_PERSONAL_API_KEY=phx_your_personal_api_keyexport POSTHOG_PROJECT_TOKEN=phc_your_project_tokenexport POSTHOG_HOST=https://us.posthog.com # or https://eu.posthog.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Private API endpoints use Bearer authenticationconst headers = { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`, 'Content-Type': 'application/json'};
// Public endpoints use the project tokenconst publicHeaders = { 'Content-Type': 'application/json'};// Token is passed in the request body for public endpointsСигурност на API ключа
Personal API keys предоставят пълен достъп до акаунта. Никога не ги излагай в client-side код. Използвай Project API Key (token) за публични крайни точки като event capture и оценка на feature flags.
Конфигурация
Основна настройка
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Мапване на полета
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_COHORTSAPI крайни точки
| Крайна точка | Метод | Описание |
|---|---|---|
{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 | Списък с feature flags |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Оценка на flags |
{host}/api/projects/{id}/insights/ | GET | Списък с запазени insights |
{host}/api/projects/{id}/query/ | POST | Изпълнение на HogQL заявки |
{host}/i/v0/e | POST | Capture на събития (публичен) |
{host}/decide/?v=3 | POST | Решения за feature flag (публичен) |
Примери с код
Инициализация на конектора
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
// Paginate through PostHog personslet 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
// Get PostHog cohorts and sync members to Brevo listsconst 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 } }); } }}Изпълнение на HogQL заявки за аналитика
// Use HogQL to query analytics dataconst 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 |
| Query крайна точка | 2 400/ч | HogQL и персонализирани заявки |
| Оценка на feature flag | 600/мин | Крайна точка за локална оценка |
| CRUD крайни точки | 480/мин, 4 800/ч | Операции за създаване, обновяване, изтриване |
| Публични крайни точки (capture) | Без ограничение | Event capture, flag решения |
Пакетни експорти
За широкомащабни експорти на данни за събития използвай функцията batch exports на PostHog вместо API. Batch exports поддържа S3, BigQuery, Snowflake и други дестинации.
Отстраняване на проблеми
| Проблем | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Невалиден API ключ | Провери Personal API Key в настройките |
| 400 Invalid project | Грешен project ID | Провери project ID в URL-а на PostHog |
| Празен списък с лица | Няма идентифицирани потребители | Увери се, че posthog.identify() се извиква |
| Липсват свойства | Свойствата не са зададени | Провери извикванията на $set в client SDK |
| Rate limit 429 | Твърде много заявки | Внедри backoff, провери хедърите за rate limit |
Режим за дебъг
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueДобри практики
- Идентифицирай потребителите – Винаги извиквай
posthog.identify()с имейл, за да активираш синхронизацията на лица - Използвай кохорти за сегментация – Използвай поведенческите кохорти на PostHog за списъци в Brevo
- Пакетирай API заявките – Използвай пагинация и пакетна обработка за големи набори от данни
- Използвай HogQL за сложни заявки – Извличай персонализирана аналитика със SQL-подобни заявки
- Настрой batch exports – За големи обеми данни предпочитай batch exports пред API polling
- Филтрирай релевантни събития – Синхронизирай само маркетингово релевантни събития, за да намалиш шума
Сигурност
- Personal API Key – Scoped Bearer token автентикация
- Project token – Публичен token само за client-side операции
- Само HTTPS – Всички крайни точки изискват TLS криптиране
- IP allowlisting – Достъпно за self-hosted инстанции
- Scoping на ключове – Създавай API ключове със специфични обхвати на разрешения
- GitHub secret scanning – PostHog си партнира с GitHub за откриване на изтекли ключове