PostHog Connector
Forbind PostHog til Brevo via Tajo for at synkronisere produktanalysedata, brugeradfærdshændelser og kohortemedlemskaber til datadrevne marketingkampagner og personaliseret kundeengagement.
Oversigt
| Egenskab | Værdi |
|---|---|
| Platform | PostHog |
| Kategori | Produktanalyse (brugerdefineret) |
| Opsætningskompleksitet | Mellem |
| Officiel integration | Nej |
| Synkroniserede data | Hændelser, personer, feature flags, kohorter |
| Autentifikationsmetode | Personal API Key / Project Token |
Funktioner
- Hændelsessynkronisering - Videresend PostHog-analysehændelser til Brevo til adfærdsmålretning
- Personprofil-synkronisering - Synkronisér PostHog-personegenskaber til Brevo-kontaktattributter
- Kohortebaseret segmentering - Knyt PostHog-kohorter til Brevo-kontaktlister
- Feature flag-synkronisering - Segmentér kontakter efter aktiverede feature flags
- Funnel-data - Brug konverteringsfunneldata til målrettet genengagement
- Session replay-metadata - Berig kontakter med engagementmetrikker fra sessioner
Forudsætninger
Før du begynder, skal du sikre dig, at du har:
- En PostHog-konto (Cloud eller selvhostet)
- En Personal API Key fra PostHog-indstillinger
- Din Project API Key (token) fra projektindstillinger
- En Brevo-konto med API-adgang
- En Tajo-konto med konnektorrettigheder
Autentifikation
Personal API Key (private endpoints)
# 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 endpointsSikkerhed for API-nøgler
Personal API Keys giver fuld kontoadgang. Eksponér dem aldrig i klientside-kode. Brug Project API Key (token) til offentlige endpoints som hændelsesopfangning og evaluering af feature flags.
Konfiguration
Grundlæggende opsætning
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: 27Feltmapping
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-endpoints
| Endpoint | Metode | Beskrivelse |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Vis personer |
{host}/api/projects/{id}/events/ | GET | Vis hændelser |
{host}/api/projects/{id}/cohorts/ | GET | Vis kohorter |
{host}/api/projects/{id}/feature_flags/ | GET | Vis feature flags |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Evaluér flags |
{host}/api/projects/{id}/insights/ | GET | Vis gemte indsigter |
{host}/api/projects/{id}/query/ | POST | Kør HogQL-forespørgsler |
{host}/i/v0/e | POST | Opfang hændelser (offentlig) |
{host}/decide/?v=3 | POST | Feature flag-beslutninger (offentlig) |
Kodeeksempler
Initialisér konnektor
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'});Synkronisér personer til 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;}Synkronisér kohorter som Brevo-lister
// 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 } }); } }}Kør HogQL-forespørgsler til analyse
// 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] } });}Ratebegrænsninger
| Endpointkategori | Grænse | Noter |
|---|---|---|
| Analyse-endpoints | 240/min, 1.200/t | GET af personer, hændelser, indsigter |
| Query-endpoint | 2.400/t | HogQL og brugerdefinerede forespørgsler |
| Feature flag-evaluering | 600/min | Lokalt evalueringsendpoint |
| CRUD-endpoints | 480/min, 4.800/t | Opret, opdater, slet |
| Offentlige endpoints (capture) | Ubegrænset | Hændelsesopfangning, flag-beslutninger |
Batch-eksport
Til eksport af hændelsesdata i stor skala bør du bruge PostHogs batch exports-funktion i stedet for API’et. Batch exports understøtter S3, BigQuery, Snowflake og andre destinationer.
Fejlfinding
| Problem | Årsag | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig API-nøgle | Verificér Personal API Key i indstillingerne |
| 400 Invalid project | Forkert projekt-id | Tjek projekt-id i PostHog-URL’en |
| Tom personliste | Ingen identificerede brugere | Sørg for, at posthog.identify() kaldes |
| Manglende egenskaber | Egenskaber er ikke sat | Verificér $set-kald i klient-SDK |
| Ratebegrænsning 429 | For mange forespørgsler | Implementér backoff, tjek rate limit-headere |
Fejlfindingstilstand
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueBest practices
- Identificér brugere - Kald altid
posthog.identify()med e-mail for at muliggøre personsynkronisering - Brug kohorter til segmentering - Udnyt PostHogs adfærdskohorter til Brevo-lister
- Batch API-forespørgsler - Brug paginering og batchbehandling til store datasæt
- Brug HogQL til komplekse forespørgsler - Udtræk brugerdefinerede analyser med SQL-lignende forespørgsler
- Opsæt batch exports - Til store datamængder foretræk batch exports frem for API-polling
- Filtrér relevante hændelser - Synkronisér kun marketingrelevante hændelser for at reducere støj
Sikkerhed
- Personal API Key - Scoped Bearer-token-autentifikation
- Project token - Offentlig token kun til klientside-operationer
- Kun HTTPS - Alle endpoints kræver TLS-kryptering
- IP-allowlisting - Tilgængelig for selvhostede instanser
- Nøglescoping - Opret API-nøgler med specifikke rettighedsscopes
- GitHub secret scanning - PostHog samarbejder med GitHub om detektion af lækkede nøgler