Connecteur PostHog
Connectez PostHog à Brevo via Tajo pour synchroniser les données d’analyse produit, les événements de comportement utilisateur et les appartenances aux cohortes afin de piloter des campagnes marketing data-driven et d’engager les clients de manière personnalisée.
Vue d’ensemble
| Propriété | Valeur |
|---|---|
| Plateforme | PostHog |
| Catégorie | Product Analytics (Custom) |
| Complexité d’installation | Moyenne |
| Intégration officielle | Non |
| Données synchronisées | Événements, personnes, feature flags, cohortes |
| Méthode d’authentification | Personal API Key / Project Token |
Fonctionnalités
- Synchronisation d’événements, Transférez les événements analytiques PostHog vers Brevo pour le ciblage comportemental
- Synchronisation des profils de personnes, Synchronisez les propriétés des personnes PostHog vers les attributs de contact Brevo
- Segmentation basée sur les cohortes, Mappez les cohortes PostHog vers des listes de contacts Brevo
- Synchronisation des feature flags, Segmentez les contacts par feature flags activés
- Données d’entonnoir, Utilisez les données d’entonnoir de conversion pour un réengagement ciblé
- Métadonnées de session replay, Enrichissez les contacts avec des métriques d’engagement de session
Prérequis
Avant de commencer, assurez-vous de disposer de :
- Un compte PostHog (Cloud ou self-hosted)
- Une Personal API Key depuis PostHog Settings
- Votre Project API Key (token) depuis les paramètres du projet
- Un compte Brevo avec accès API
- Un compte Tajo avec les permissions connecteur
Authentification
Personal API Key (endpoints privés)
# Générez-la sur 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 # ou https://eu.posthog.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// Les endpoints API privés utilisent l'authentification Bearerconst headers = { 'Authorization': `Bearer ${process.env.POSTHOG_PERSONAL_API_KEY}`, 'Content-Type': 'application/json'};
// Les endpoints publics utilisent le project tokenconst publicHeaders = { 'Content-Type': 'application/json'};// Le token est passé dans le corps de la requête pour les endpoints publicsSécurité des clés API
Les Personal API keys donnent un accès complet au compte. Ne les exposez jamais dans du code côté client. Utilisez la Project API Key (token) pour les endpoints publics comme la capture d’événements et l’évaluation de feature flags.
Configuration
Configuration de base
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 * * *" # Toutes les 3 heures
event_filters: - "$pageview" - "purchase_completed" - "signup_completed" - "feature_used"
lists: all_users: 25 active_users: 26 power_users: 27Mappage des champs
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_COHORTSEndpoints API
| Endpoint | Méthode | Description |
|---|---|---|
{host}/api/projects/{id}/persons/ | GET | Lister les personnes |
{host}/api/projects/{id}/events/ | GET | Lister les événements |
{host}/api/projects/{id}/cohorts/ | GET | Lister les cohortes |
{host}/api/projects/{id}/feature_flags/ | GET | Lister les feature flags |
{host}/api/projects/{id}/feature_flags/evaluation/ | POST | Évaluer les flags |
{host}/api/projects/{id}/insights/ | GET | Lister les insights sauvegardés |
{host}/api/projects/{id}/query/ | POST | Exécuter des requêtes HogQL |
{host}/i/v0/e | POST | Capturer des événements (public) |
{host}/decide/?v=3 | POST | Décisions de feature flags (public) |
Exemples de code
Initialiser le connecteur
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'});Synchroniser les personnes vers Brevo
// Paginer les personnes PostHoglet 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;}Synchroniser les cohortes en tant que listes Brevo
// Obtenir les cohortes PostHog et synchroniser les membres vers des listes Brevoconst 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) { // Obtenir les personnes de cette cohorte 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 } }); } }}Exécuter des requêtes HogQL pour l’analytique
// Utiliser HogQL pour interroger les données analytiquesconst 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] } });}Limites de débit
| Catégorie d’endpoint | Limite | Notes |
|---|---|---|
| Endpoints analytiques | 240/min, 1 200/h | GET persons, events, insights |
| Endpoint query | 2 400/h | HogQL et requêtes personnalisées |
| Évaluation de feature flags | 600/min | Endpoint d’évaluation locale |
| Endpoints CRUD | 480/min, 4 800/h | Opérations create, update, delete |
| Endpoints publics (capture) | Illimité | Capture d’événements, décisions de flags |
Batch exports
Pour les exports d’événements à grande échelle, utilisez la fonctionnalité batch exports de PostHog plutôt que l’API. Les batch exports prennent en charge S3, BigQuery, Snowflake et d’autres destinations.
Dépannage
| Problème | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Clé API invalide | Vérifiez la Personal API Key dans les paramètres |
| 400 Invalid project | Mauvais project ID | Vérifiez le project ID dans l’URL PostHog |
| Liste de personnes vide | Aucun utilisateur identifié | Assurez-vous que posthog.identify() est appelé |
| Propriétés manquantes | Propriétés non définies | Vérifiez les appels $set dans le SDK client |
| Limite de débit 429 | Trop de requêtes | Implémentez un backoff, vérifiez les en-têtes de limite |
Mode debug
connectors: posthog: debug: true log_level: verbose log_queries: true log_sync: trueBonnes pratiques
- Identifiez les utilisateurs, Appelez toujours
posthog.identify()avec l’e-mail pour permettre la synchronisation des personnes - Utilisez les cohortes pour la segmentation, Exploitez les cohortes comportementales de PostHog pour les listes Brevo
- Groupez les requêtes API, Utilisez la pagination et le traitement par lots pour les grands ensembles de données
- Utilisez HogQL pour les requêtes complexes, Extrayez des analytiques personnalisées avec des requêtes SQL-like
- Mettez en place des batch exports, Pour de gros volumes de données, préférez les batch exports au polling API
- Filtrez les événements pertinents, Ne synchronisez que les événements pertinents pour le marketing pour réduire le bruit
Sécurité
- Personal API Key, Authentification par Bearer token à portée limitée
- Project token, Token public pour les opérations côté client uniquement
- HTTPS uniquement, Tous les endpoints nécessitent un chiffrement TLS
- Allowlist d’IP, Disponible pour les instances self-hosted
- Portée des clés, Créez des clés API avec des scopes de permission spécifiques
- Scanning des secrets GitHub, PostHog s’associe à GitHub pour la détection des clés fuitées