Konektor PostHog
Połącz PostHog z Brevo przez Tajo, aby synchronizować dane analityki produktowej, zdarzenia behawioralne użytkowników i przynależności do kohort dla kampanii marketingowych opartych na danych i spersonalizowanego zaangażowania klientów.
Przegląd
| Właściwość | Wartość |
|---|---|
| Platforma | PostHog |
| Kategoria | Analityka produktowa (Niestandardowa) |
| Poziom konfiguracji | Średni |
| Integracja oficjalna | Nie |
| Synchronizowane dane | Zdarzenia, Osoby, Flagi funkcji, Kohorty |
| Metoda uwierzytelniania | Personal API Key / Project Token |
Funkcje
- Synchronizacja zdarzeń - Przekazuj zdarzenia analityczne PostHog do Brevo dla targetowania behawioralnego
- Synchronizacja profili osób - Synchronizuj właściwości osób PostHog z atrybutami kontaktów Brevo
- Segmentacja oparta na kohortach - Mapuj kohorty PostHog na listy kontaktów Brevo
- Synchronizacja flag funkcji - Segmentuj kontakty według włączonych flag funkcji
- Dane lejka - Używaj danych konwersji lejka dla ukierunkowanego ponownego zaangażowania
- Metadane odtwarzania sesji - Wzbogacaj kontakty metrykami zaangażowania sesji
Wymagania wstępne
Zanim zaczniesz, upewnij się, że masz:
- Konto PostHog (Cloud lub self-hosted)
- Personal API Key z PostHog Settings
- Project API Key (token) z Project Settings
- Konto Brevo z dostępem do API
- Konto Tajo z uprawnieniami konektora
Uwierzytelnianie
Personal API Key (prywatne endpointy)
# 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 endpointsBezpieczeństwo klucza API
Personal API keys zapewniają pełny dostęp do konta. Nigdy nie ujawniaj ich w kodzie po stronie klienta. Używaj Project API Key (tokenu) dla publicznych endpointów, takich jak przechwytywanie zdarzeń i ocena flag funkcji.
Konfiguracja
Podstawowa konfiguracja
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: 27Mapowanie pól
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_COHORTSEndpointy API
| Endpoint | Metoda | Opis |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Lista osób |
{host}/api/projects/{id}/events/ | GET | Lista zdarzeń |
{host}/api/projects/{id}/cohorts/ | GET | Lista kohort |
{host}/api/projects/{id}/feature_flags/ | GET | Lista flag funkcji |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Oceń flagi |
{host}/api/projects/{id}/insights/ | GET | Lista zapisanych wglądów |
{host}/api/projects/{id}/query/ | POST | Uruchom zapytania HogQL |
{host}/i/v0/e | POST | Przechwytuj zdarzenia (publiczny) |
{host}/decide/?v=3 | POST | Decyzje o flagach funkcji (publiczny) |
Przykłady kodu
Inicjalizacja konektora
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'});Synchronizuj osoby z 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;}Synchronizuj kohorty jako listy 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 } }); } }}Uruchamiaj zapytania HogQL dla analityki
// 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] } });}Limity API
| Kategoria endpointu | Limit | Uwagi |
|---|---|---|
| Endpointy analityczne | 240/min, 1 200/godz | GET persons, events, insights |
| Endpoint zapytań | 2 400/godz | HogQL i niestandardowe zapytania |
| Ocena flag funkcji | 600/min | Lokalny endpoint oceny |
| Endpointy CRUD | 480/min, 4 800/godz | Operacje tworzenia, aktualizacji, usuwania |
| Publiczne endpointy (przechwytywanie) | Nieograniczone | Przechwytywanie zdarzeń, decyzje o flagach |
Eksporty wsadowe
Dla eksportów danych zdarzeń na dużą skalę używaj funkcji eksportów wsadowych PostHog zamiast API. Eksporty wsadowe obsługują S3, BigQuery, Snowflake i inne miejsca docelowe.
Rozwiązywanie problemów
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
| 401 Unauthorized | Nieprawidłowy klucz API | Zweryfikuj Personal API Key w ustawieniach |
| 400 Invalid project | Błędne ID projektu | Sprawdź ID projektu w URL PostHog |
| Pusta lista osób | Brak zidentyfikowanych użytkowników | Upewnij się, że posthog.identify() jest wywoływana |
| Brakujące właściwości | Właściwości nie ustawione | Zweryfikuj wywołania $set w kliencie SDK |
| Limit 429 | Za dużo żądań | Wdrożyj wycofanie, sprawdź nagłówki limitów |
Tryb debug
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueNajlepsze praktyki
- Identyfikuj użytkowników - Zawsze wywołuj
posthog.identify()z e-mailem, aby umożliwić synchronizację osób - Używaj kohort do segmentacji - Korzystaj z behawioralnych kohort PostHog dla list Brevo
- Wsadowe żądania API - Używaj paginacji i przetwarzania wsadowego dla dużych zestawów danych
- Używaj HogQL dla złożonych zapytań - Wyodrębniaj niestandardową analitykę za pomocą zapytań podobnych do SQL
- Konfiguruj eksporty wsadowe - Dla dużych wolumenów danych preferuj eksporty wsadowe nad odpytywaniem API
- Filtruj istotne zdarzenia - Synchronizuj tylko zdarzenia istotne dla marketingu, aby zmniejszyć szum
Bezpieczeństwo
- Personal API Key - Uwierzytelnianie tokenem Bearer z zakresem
- Token projektu - Publiczny token tylko dla operacji po stronie klienta
- Tylko HTTPS - Wszystkie endpointy wymagają szyfrowania TLS
- Allowlisting IP - Dostępne dla instancji self-hosted
- Zakres kluczy - Twórz klucze API z określonymi zakresami uprawnień
- Skanowanie sekretów GitHub - PostHog współpracuje z GitHub w zakresie wykrywania wycieków kluczy