PostHog-kobling
Koble PostHog til Brevo gjennom Tajo for å synkronisere produktanalysedata, brukeratferdshendelser og kohortmedlemskap for datadrevne markedsføringskampanjer og personalisert kundeengasjement.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | PostHog |
| Kategori | Produktanalyse (Custom) |
| Oppsettskompleksitet | Moderat |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Hendelser, personer, feature flags, kohorter |
| Autentiseringsmetode | Personlig API-nøkkel / Project Token |
Funksjoner
- Hendelsessynkronisering - Videresend PostHog-analysehendelser til Brevo for atferdsmålretting
- Synkronisering av personprofiler - Synkroniser PostHog-personegenskaper til Brevo-kontaktattributter
- Kohortbasert segmentering - Mapp PostHog-kohorter til Brevo-kontaktlister
- Feature flag-synkronisering - Segmenter kontakter etter aktiverte feature flags
- Trakt-data - Bruk konverteringstraktdata for målrettet re-engasjement
- Metadata for økt-replay - Berik kontakter med metrikker for øktengasjement
Forutsetninger
Før du begynner, sørg for at du har:
- En PostHog-konto (Cloud eller selvhostet)
- En personlig API-nøkkel fra PostHog Settings
- Din Project API Key (token) fra Project Settings
- En Brevo-konto med API-tilgang
- En Tajo-konto med konnektor-rettigheter
Autentisering
Personlig API-nøkkel (private endepunkter)
# Generer på 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 # eller https://eu.posthog.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Private API-endepunkter bruker Bearer-autentiseringconst headers = { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`, 'Content-Type': 'application/json'};
// Offentlige endepunkter bruker Project Tokenconst publicHeaders = { 'Content-Type': 'application/json'};// Tokenet sendes i forespørselsbody for offentlige endepunkterAPI-nøkkelsikkerhet
Personlige API-nøkler gir full kontotilgang. Eksponer dem aldri i klientside-kode. Bruk Project API Key (token) for offentlige endepunkter som hendelsesfangst og feature flag-evaluering.
Konfigurasjon
Grunnleggende oppsett
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 * * *" # Hver 3. time
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-endepunkter
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | List personer |
{host}/api/projects/{id}/events/ | GET | List hendelser |
{host}/api/projects/{id}/cohorts/ | GET | List kohorter |
{host}/api/projects/{id}/feature_flags/ | GET | List feature flags |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Evaluer flags |
{host}/api/projects/{id}/insights/ | GET | List lagrede insights |
{host}/api/projects/{id}/query/ | POST | Kjør HogQL-spørringer |
{host}/i/v0/e | POST | Fang opp hendelser (offentlig) |
{host}/decide/?v=3 | POST | Feature flag-beslutninger (offentlig) |
Kodeeksempler
Initialiser kobling
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'});Synkroniser personer til Brevo
// Paginer gjennom PostHog-personerlet 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;}Synkroniser kohorter som Brevo-lister
// Hent PostHog-kohorter og synkroniser medlemmer til Brevo-listerconst 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) { // Hent personer i denne kohorten 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 } }); } }}Kjør HogQL-spørringer for analyse
// Bruk HogQL for å spørre om analysedataconst 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] } });}Ratebegrensninger
| Endepunktskategori | Grense | Merknader |
|---|---|---|
| Analyseendepunkter | 240/min, 1 200/time | GET personer, hendelser, insights |
| Query-endepunkt | 2 400/time | HogQL og egendefinerte spørringer |
| Feature flag-evaluering | 600/min | Lokalt evalueringsendepunkt |
| CRUD-endepunkter | 480/min, 4 800/time | Opprett, oppdater, slett-operasjoner |
| Offentlige endepunkter (capture) | Ubegrenset | Hendelsesfangst, flag-beslutninger |
Batch-eksport
For storskala eksport av hendelsesdata, bruk PostHogs batch export-funksjon i stedet for API-et. Batch-eksport støtter S3, BigQuery, Snowflake og andre destinasjoner.
Feilsøking
| Problem | Årsak | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig API-nøkkel | Verifiser personlig API-nøkkel i innstillinger |
| 400 Invalid project | Feil prosjekt-ID | Sjekk prosjekt-ID i PostHog-URL |
| Tom personliste | Ingen identifiserte brukere | Sørg for at posthog.identify() kalles |
| Manglende egenskaper | Egenskaper ikke satt | Verifiser $set-kall i klient-SDK |
| Ratebegrensning 429 | For mange forespørsler | Implementer backoff, sjekk ratebegrensningsheadere |
Feilsøkingsmodus
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueBeste praksis
- Identifiser brukere - Kall alltid
posthog.identify()med e-post for å muliggjøre personsynkronisering - Bruk kohorter for segmentering - Utnytt PostHogs atferdskohorter for Brevo-lister
- Batch API-forespørsler - Bruk paginering og batch-prosessering for store datasett
- Bruk HogQL for komplekse spørringer - Trekk ut egendefinert analyse med SQL-lignende spørringer
- Sett opp batch-eksport - For store datavolumer, foretrekk batch-eksport fremfor API-polling
- Filtrer relevante hendelser - Synkroniser kun markedsføringsrelevante hendelser for å redusere støy
Sikkerhet
- Personlig API-nøkkel - Avgrenset Bearer-tokenautentisering
- Project token - Offentlig token kun for klientside-operasjoner
- Kun HTTPS - Alle endepunkter krever TLS-kryptering
- IP-hviteliste - Tilgjengelig for selvhostede instanser
- Nøkkelscoping - Opprett API-nøkler med spesifikke rettighetsscoper
- GitHub-hemmelighetsskanning - PostHog samarbeider med GitHub for deteksjon av lekkede nøkler