Коннектор PostHog

Подключите PostHog к Brevo через Tajo для синхронизации данных продуктовой аналитики, поведенческих событий пользователей и членства в когортах, для data-driven маркетинговых кампаний и персонализированного взаимодействия с клиентами.

Обзор

СвойствоЗначение
ПлатформаPostHog
КатегорияProduct Analytics (Custom)
Сложность настройкиСредняя
Официальная интеграцияНет
Синхронизируемые данныеСобытия, профили, флаги функций, когорты
Метод аутентификацииPersonal API Key / Project Token

Возможности

  • Синхронизация событий, пересылка аналитических событий PostHog в Brevo для поведенческого таргетинга
  • Синхронизация профилей пользователей, синхронизация свойств профилей PostHog с атрибутами контактов Brevo
  • Сегментация по когортам, сопоставление когорт PostHog с листами контактов Brevo
  • Синхронизация флагов функций, сегментация контактов по включённым флагам функций
  • Данные воронок, использование данных конверсионных воронок для целевого повторного вовлечения
  • Метаданные записей сессий, обогащение контактов показателями вовлечённости в сессии

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  1. Аккаунт PostHog (Cloud или self-hosted)
  2. Personal API Key из настроек PostHog
  3. Project API Key (токен) из настроек проекта
  4. Аккаунт Brevo с доступом к API
  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 Key

Personal API Keys предоставляют полный доступ к аккаунту. Никогда не раскрывайте их в клиентском коде. Используйте Project API Key (токен) для публичных эндпоинтов, таких как захват событий и оценка флагов функций.

Конфигурация

Базовая настройка

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/POSTВыполнение HogQL-запросов
{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 профилей, событий, инсайтов
Эндпоинт запросов2 400/часHogQL и пользовательские запросы
Оценка флагов функций600/минЭндпоинт локальной оценки
CRUD-эндпоинты480/мин, 4 800/часСоздание, обновление, удаление
Публичные эндпоинты (захват)Без ограниченийЗахват событий, решения по флагам

Пакетные экспорты

Для экспорта больших объёмов данных о событиях используйте функцию batch exports в PostHog вместо API. Пакетные экспорты поддерживают S3, BigQuery, Snowflake и другие назначения.

Устранение неполадок

ПроблемаПричинаРешение
401 UnauthorizedНедействительный API-ключПроверьте Personal API Key в настройках
400 Invalid projectНеверный ID проектаПроверьте ID проекта в URL PostHog
Пустой список профилейНет идентифицированных пользователейУбедитесь, что вызывается posthog.identify()
Отсутствующие свойстваСвойства не заданыПроверьте вызовы $set в клиентском SDK
Лимит 429Слишком много запросовРеализуйте задержку, проверьте заголовки лимитов

Режим отладки

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

Лучшие практики

  1. Идентифицируйте пользователей, всегда вызывайте posthog.identify() с email для синхронизации профилей
  2. Используйте когорты для сегментации, применяйте поведенческие когорты PostHog для листов Brevo
  3. Пакетные API-запросы, используйте пагинацию и пакетную обработку для больших наборов данных
  4. Используйте HogQL для сложных запросов, извлекайте пользовательскую аналитику с помощью SQL-подобных запросов
  5. Настройте пакетные экспорты, для больших объёмов данных предпочтительнее пакетные экспорты, а не опрос API
  6. Фильтруйте релевантные события, синхронизируйте только события, значимые для маркетинга, чтобы снизить шум

Безопасность

  • Personal API Key, аутентификация через Bearer token с ограниченными правами
  • Токен проекта, публичный токен только для клиентских операций
  • Только HTTPS, все эндпоинты требуют TLS-шифрования
  • IP-разрешение, доступно для self-hosted экземпляров
  • Ограничение прав ключей, создавайте 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-ассистент

Привет! Спрашивайте меня о документации.