PostHog-koppling

Anslut PostHog till Brevo via Tajo för att synka produktanalysdata, användarbeteendehändelser och kohortmedlemskap för datadrivna marknadsföringskampanjer och personligt anpassat kundengagemang.

Översikt

EgenskapVärde
PlattformPostHog
KategoriProduktanalys (Anpassad)
InstallationskomplexitetMedel
Officiell integrationNej
Data som synkasHändelser, personer, feature flags, kohorter
AutentiseringsmetodPersonal API Key / Project Token

Funktioner

  • Händelsesynkronisering - Vidarebefordra PostHog-analyshändelser till Brevo för beteendebaserad målning
  • Synk av personprofiler - Synka PostHog-personegenskaper till Brevo-kontaktattribut
  • Kohortbaserad segmentering - Mappa PostHog-kohorter till Brevo-kontaktlistor
  • Feature flag-synkronisering - Segmentera kontakter efter aktiverade feature flags
  • Trattdata - Använd konverteringsdata från trattar för riktad återengagering
  • Metadata för session replay - Berika kontakter med sessionsengagemangsmått

Förutsättningar

Innan du börjar, se till att du har:

  1. Ett PostHog-konto (Cloud eller självhostat)
  2. En Personal API Key från PostHog Settings
  3. Din Project API Key (token) från Project Settings
  4. Ett Brevo-konto med API-åtkomst
  5. Ett Tajo-konto med kopplingsbehörigheter

Autentisering

Personal API Key (privata endpoints)

Terminal window
# Generate at 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 # or https://eu.posthog.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// Private API endpoints use Bearer authentication
const headers = {
'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`,
'Content-Type': 'application/json'
};
// Public endpoints use the project token
const publicHeaders = {
'Content-Type': 'application/json'
};
// Token is passed in the request body for public endpoints

Säkerhet för API-nyckel

Personal API-nycklar ger full kontoåtkomst. Exponera dem aldrig i klientsidekod. Använd Project API Key (token) för publika endpoints som händelseinsamling och feature flag-utvärdering.

Konfiguration

Grundinställning

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: 27

Fältmappning

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-endpoints

EndpointMetodBeskrivning
{host}/api/projects/{id}/persons/GETLista personer
{host}/api/projects/{id}/events/GETLista händelser
{host}/api/projects/{id}/cohorts/GETLista kohorter
{host}/api/projects/{id}/feature_flags/GETLista feature flags
{host}/api/projects/{id}/feature_flags/evaluation/POSTUtvärdera flags
{host}/api/projects/{id}/insights/GETLista sparade insikter
{host}/api/projects/{id}/query/POSTKör HogQL-frågor
{host}/i/v0/ePOSTFånga händelser (publik)
{host}/decide/?v=3POSTFeature flag-beslut (publik)

Kodexempel

Initiera kopplingen

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'
});

Synka personer till Brevo

// Paginate through PostHog persons
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;
}

Synka kohorter som Brevo-listor

// Get PostHog cohorts and sync members to Brevo lists
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) {
// 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-frågor för analys

// Use HogQL to query analytics data
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]
}
});
}

Hastighetsbegränsningar

Endpoint-kategoriGränsAnteckningar
Analys-endpoints240/min, 1 200/timmeGET personer, händelser, insikter
Query-endpoint2 400/timmeHogQL och anpassade frågor
Feature flag-utvärdering600/minEndpoint för lokal utvärdering
CRUD-endpoints480/min, 4 800/timmeSkapa, uppdatera, radera-operationer
Publika endpoints (capture)ObegränsatHändelseinsamling, flag-beslut

Batchexporter

För storskaliga exporter av händelsedata, använd PostHogs batch exports-funktion istället för API:et. Batchexporter stöder S3, BigQuery, Snowflake och andra destinationer.

Felsökning

ProblemOrsakLösning
401 UnauthorizedOgiltig API-nyckelVerifiera Personal API Key i inställningar
400 Invalid projectFel projekt-IDKontrollera projekt-ID i PostHog-URL
Tom personlistaInga identifierade användareSäkerställ att posthog.identify() anropas
Saknade egenskaperEgenskaper ej sattaVerifiera $set-anrop i klient-SDK
Hastighetsbegränsning 429För många förfrågningarImplementera backoff, kontrollera headrar för hastighetsbegränsning

Felsökningsläge

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

Bästa praxis

  1. Identifiera användare - Anropa alltid posthog.identify() med e-post för att möjliggöra personsynk
  2. Använd kohorter för segmentering - Utnyttja PostHogs beteendekohorter för Brevo-listor
  3. Batcha API-förfrågningar - Använd sidindelning och batchbehandling för stora dataset
  4. Använd HogQL för komplexa frågor - Extrahera anpassad analys med SQL-liknande frågor
  5. Sätt upp batchexporter - För stora datavolymer, föredra batchexporter framför API-polling
  6. Filtrera relevanta händelser - Synka endast marknadsföringsrelevanta händelser för att minska brus

Säkerhet

  • Personal API Key - Scoped Bearer-tokenautentisering
  • Projekttoken - Publik token endast för klientoperationer
  • Endast HTTPS - Alla endpoints kräver TLS-kryptering
  • IP-allowlisting - Tillgängligt för självhostade instanser
  • Nyckel-scoping - Skapa API-nycklar med specifika behörighets-scopes
  • GitHub secret scanning - PostHog samarbetar med GitHub för upptäckt av läckta nycklar

Relaterade resurser

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI-assistent

Hej! Fråga mig om dokumentationen.