PostHog konektor
Poveži PostHog sa Brevo putem Tajo za sinhronizaciju podataka analitike proizvoda, događaja ponašanja korisnika i članstava u kohortama za kampanje zasnovane na podacima i personalizovano angažovanje kupaca.
Pregled
| Svojstvo | Vrednost |
|---|---|
| Platforma | PostHog |
| Kategorija | Analitika proizvoda (Prilagođeno) |
| Složenost podešavanja | Srednje |
| Zvanična integracija | Ne |
| Sinhronizovani podaci | Događaji, Osobe, Feature Flags, Kohorte |
| Metod autentifikacije | Personal API Key / Project Token |
Karakteristike
- Sinhronizacija događaja - Prosleđivanje PostHog analitičkih događaja u Brevo za bihevioralno ciljanje
- Sinhronizacija profila osoba - Sinhronizacija PostHog svojstava osoba na Brevo atribute kontakta
- Segmentacija zasnovana na kohortama - Mapiranje PostHog kohorti na Brevo liste kontakata
- Sinhronizacija feature flag-ova - Segmentacija kontakata prema omogućenim feature flag-ovima
- Podaci levka - Korišćenje podataka o konverzijskom levku za ciljano ponovnog angažovanje
- Metapodaci reprodukcije sesije - Obogaćivanje kontakata metrikama angažovanja sesije
Preduslovi
Pre nego što započneš, proveri da imaš:
- PostHog nalog (Cloud ili self-hosted)
- Personal API Key iz PostHog Settings
- Project API Key (token) iz Project Settings
- Brevo nalog sa API pristupom
- Tajo nalog sa dozvolama konektora
Autentifikacija
Personal API Key (privatni endpointi)
# 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 endpointsBezbednost API ključa
Personal API ključevi pružaju pun pristup nalogu. Nikada ih ne izlažu u klijentskom kodu. Koristi Project API Key (token) za javne endpointe kao što su hvatanje događaja i evaluacija feature flag-ova.
Konfiguracija
Osnovno podešavanje
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: 27Mapiranje polja
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 endpointi
| Endpoint | Metoda | Opis |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Listanje osoba |
{host}/api/projects/{id}/events/ | GET | Listanje događaja |
{host}/api/projects/{id}/cohorts/ | GET | Listanje kohorti |
{host}/api/projects/{id}/feature_flags/ | GET | Listanje feature flag-ova |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Evaluacija flag-ova |
{host}/api/projects/{id}/insights/ | GET | Listanje sačuvanih uvida |
{host}/api/projects/{id}/query/ | POST | Pokretanje HogQL upita |
{host}/i/v0/e | POST | Hvatanje događaja (javno) |
{host}/decide/?v=3 | POST | Odluke o feature flag-ovima (javno) |
Primeri koda
Inicijalizacija 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'});Sinhronizacija osoba sa 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;}Sinhronizacija kohorti kao Brevo lista
// 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 } }); } }}Pokretanje HogQL upita za analitiku
// 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] } });}Ograničenja brzine
| Kategorija endpointa | Limit | Napomene |
|---|---|---|
| Analitički endpointi | 240/min, 1.200/sat | GET osobe, događaji, uvidi |
| Query endpoint | 2.400/sat | HogQL i prilagođeni upiti |
| Evaluacija feature flag-ova | 600/min | Lokalni endpoint evaluacije |
| CRUD endpointi | 480/min, 4.800/sat | Operacije kreiranja, ažuriranja, brisanja |
| Javni endpointi (hvatanje) | Neograničeno | Hvatanje događaja, odluke o flag-ovima |
Batch izvozi
Za izvoz podataka o događajima u velikim razmerama, koristi PostHog funkciju batch izvoza umesto API-ja. Batch izvozi podržavaju S3, BigQuery, Snowflake i druge destinacije.
Rešavanje problema
| Problem | Uzrok | Rešenje |
|---|---|---|
| 401 Unauthorized | Nevažeći API ključ | Proveri Personal API Key u podešavanjima |
| 400 Invalid project | Pogrešan ID projekta | Proveri ID projekta u PostHog URL-u |
| Prazna lista osoba | Nema identifikovanih korisnika | Proveri da se posthog.identify() poziva |
| Nedostaju svojstva | Svojstva nisu postavljena | Verifikuj $set pozive u klijentskom SDK-u |
| Limit 429 | Previše zahteva | Implementiraj usporavanje, proveri headere ograničenja |
Debug režim
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueNajbolje prakse
- Identifikuj korisnike - Uvek pozovi
posthog.identify()sa emailom da omogućiš sinhronizaciju osoba - Koristi kohorte za segmentaciju - Koristi PostHog bihevioralne kohorte za Brevo liste
- Grupišu API zahteve - Koristi paginaciju i grupnu obradu za velike skupove podataka
- Koristi HogQL za složene upite - Izvuci prilagođenu analitiku sa SQL-like upitima
- Postavi batch izvoz - Za velike obime podataka, preferiraj batch izvoz umesto API ispitivanja
- Filtriraj relevantne događaje - Sinhronizuj samo marketinški relevantne događaje da smanjiš šum
Bezbednost
- Personal API Key - Skopovana Bearer token autentifikacija
- Project token - Javni token samo za operacije na strani klijenta
- Samo HTTPS - Svi endpointi zahtevaju TLS enkripciju
- IP allowlisting - Dostupno za self-hosted instance
- Skopovanje ključa - Kreiraj API ključeve sa specifičnim skopovima dozvola
- GitHub skeniranje tajni - PostHog sarađuje sa GitHub-om za detekciju procurelih ključeva