Connecteur Optimizely

Connectez Optimizely Feature Experimentation à Brevo via Tajo pour synchroniser les résultats d’expérimentation, cibler les campagnes par segments de feature flags et enrichir les automatisations marketing avec les données de tests A/B et les insights d’audience.

Vue d’ensemble

PropriétéValeur
PlateformeOptimizely
CatégorieExpérimentation (Custom)
Complexité d’installationMoyenne
Intégration officielleNon
Données synchroniséesExpériences, audiences, événements, feature flags
Méthode d’authentificationPersonal Access Token / OAuth 2.0

Fonctionnalités

  • Synchronisation des expériences, Poussez les attributions de variations de tests A/B vers les attributs de contact Brevo
  • Ciblage d’audience, Utilisez les audiences Optimizely pour la segmentation de campagnes Brevo
  • Suivi des conversions, Suivez les événements Optimizely et mappez-les vers le tracking d’événements Brevo
  • Synchronisation des feature flags, Segmentez les contacts par feature flags activés
  • Reporting des résultats, Synchronisez les résultats d’expérimentation pour des campagnes marketing post-analyse
  • Support multi-projets, Connectez plusieurs projets Optimizely à une instance Tajo unique

Prérequis

Avant de commencer, assurez-vous de disposer de :

  1. Un compte Optimizely Feature Experimentation
  2. Un Personal Access Token depuis Optimizely App Settings
  3. Une SDK key pour votre environnement Optimizely
  4. Un compte Brevo avec accès API
  5. Un compte Tajo avec les permissions connecteur

Authentification

Personal Access Token

Terminal window
# Générez-le sur https://app.optimizely.com/v2/accountsettings/tokens
export OPTIMIZELY_ACCESS_TOKEN=your_personal_access_token
export OPTIMIZELY_SDK_KEY=your_sdk_key
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// Toutes les requêtes de l'API REST utilisent l'auth par Bearer token
const headers = {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
};

Authentification SDK

// Pour l'évaluation de feature flags, utilisez le SDK
const optimizelySDK = require('@optimizely/optimizely-sdk');
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY,
datafileOptions: {
autoUpdate: true,
updateInterval: 60000 // 1 minute
}
});
await optimizelyClient.onReady();

Configuration

Configuration de base

connectors:
optimizely:
enabled: true
access_token: "${OPTIMIZELY_ACCESS_TOKEN}"
sdk_key: "${OPTIMIZELY_SDK_KEY}"
project_id: "12345678"
sync:
experiments: true
audiences: true
events: true
feature_flags: true
schedule: "0 */2 * * *" # Toutes les 2 heures
mapping:
experiment_variation: EXPERIMENT_VARIATION
feature_flags: ENABLED_FEATURES
audience_segments: OPT_SEGMENTS

Mappage des champs

field_mapping:
user_id: email
experiment_key: EXPERIMENT_NAME
variation_key: VARIATION_NAME
feature_key: FEATURE_FLAG
enabled: FEATURE_ENABLED
audience_name: AUDIENCE_SEGMENT
decision_timestamp: EXPERIMENT_DATE

Endpoints API

EndpointMéthodeDescription
https://api.optimizely.com/v2/projectsGETLister les projets
https://api.optimizely.com/v2/experimentsGETLister les expériences
https://api.optimizely.com/v2/experiments/{id}GETObtenir les détails d’une expérience
https://api.optimizely.com/v2/experiments/{id}/resultsGETObtenir les résultats d’une expérience
https://api.optimizely.com/v2/featuresGETLister les feature flags
https://api.optimizely.com/v2/features/{id}GETObtenir un feature flag
https://api.optimizely.com/v2/audiencesGETLister les audiences
https://api.optimizely.com/v2/eventsGETLister les événements suivis
https://logx.optimizely.com/v1/eventsPOSTTracker des événements (endpoint SDK)

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('optimizely', {
accessToken: process.env.OPTIMIZELY_ACCESS_TOKEN,
sdkKey: process.env.OPTIMIZELY_SDK_KEY,
projectId: '12345678'
});

Synchroniser les décisions d’expérimentation vers Brevo

// Tracker les décisions d'expérimentation et synchroniser vers Brevo
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY
});
await optimizelyClient.onReady();
// Enregistrer un listener de notification de décision
optimizelyClient.notificationCenter.addNotificationListener(
optimizelySDK.enums.NOTIFICATION_TYPES.DECISION,
async (decisionObject) => {
const { type, userId, attributes, decisionInfo } = decisionObject;
if (type === 'feature' || type === 'ab-test') {
const email = attributes.email;
if (email) {
await tajo.contacts.update(email, {
attributes: {
EXPERIMENT_NAME: decisionInfo.experimentKey || decisionInfo.featureKey,
VARIATION_NAME: decisionInfo.variationKey,
FEATURE_ENABLED: decisionInfo.featureEnabled || false,
EXPERIMENT_DATE: new Date().toISOString()
}
});
}
}
}
);

Synchroniser les résultats d’expérimentation

// Récupérer les résultats d'expérimentation et synchroniser les segments gagnants
const resultsResponse = await fetch(
`https://api.optimizely.com/v2/experiments/${experimentId}/results`,
{
headers: {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`
}
}
);
const results = await resultsResponse.json();
// Traiter les variations et mettre à jour les segments de contact
for (const variation of results.metrics) {
const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) {
// Créer un segment Brevo pour les utilisateurs de la variation gagnante
console.log(`Winning variation: ${variation.variation_name}`);
}
}

Segmentation basée sur les feature flags

// Évaluer les feature flags pour la segmentation utilisateur
async function syncFeatureFlags(userEmail, userId) {
const features = ['new_checkout', 'loyalty_program', 'ai_recommendations'];
const enabledFeatures = [];
for (const feature of features) {
const user = optimizelyClient.createUserContext(userId, {
email: userEmail
});
const decision = user.decide(feature);
if (decision.enabled) {
enabledFeatures.push(feature);
}
}
await tajo.contacts.update(userEmail, {
attributes: {
ENABLED_FEATURES: enabledFeatures.join(', '),
FEATURE_FLAGS_SYNCED: new Date().toISOString()
}
});
}

Limites de débit

EndpointLimiteNotes
REST API50 req/minPar Personal Access Token
Results API10 req/minLatence plus élevée, requêtes plus lourdes
SDK Event Dispatch10 000 événements/lotVia le processeur d’événements du SDK
Datafile CDNIllimitéMis en cache avec mises à jour automatiques

Latence de l'API de résultats

L’API Experiment Results traite de grands ensembles de données et peut prendre plus de 30 secondes à répondre. Utilisez un polling asynchrone ou un cache pour éviter de bloquer votre application.

Dépannage

ProblèmeCauseSolution
401 UnauthorizedToken expiré/invalideRégénérez le Personal Access Token
SDK pas prêtDatafile non chargéAttendez que la promesse onReady() se résolve
Aucune décision enregistréeNotification non enregistréeEnregistrez le listener avant de prendre des décisions
Feature flags périmésCache du datafileDéfinissez updateInterval pour un auto-refresh
Résultats manquantsExpérimentation non démarréeVérifiez que le statut de l’expérimentation est « running »

Mode debug

connectors:
optimizely:
debug: true
log_level: verbose
log_decisions: true
log_events: true

Bonnes pratiques

  1. Utilisez le SDK pour les décisions, Utilisez le SDK pour l’évaluation de flags en temps réel, l’API REST pour la gestion
  2. Implémentez le batching d’événements, Groupez les événements du SDK pour réduire la charge réseau
  3. Mettez en cache le datafile, Activez l’auto-update avec des intervalles appropriés
  4. Synchronisez les variations gagnantes, Après la conclusion d’une expérimentation, mettez à jour les segments de contacts
  5. Utilisez les attributs pour le ciblage, Passez l’e-mail et les attributs utilisateur pour le matching d’audience
  6. Surveillez le statut des expérimentations, Ne synchronisez que les données d’expérimentations en cours ou terminées

Sécurité

  • Personal Access Tokens, Authentification par Bearer token pour l’API REST
  • Isolation des SDK keys, SDK keys séparées par environnement (dev, staging, prod)
  • Évaluation côté serveur, Évaluez les feature flags côté serveur pour éviter l’exposition
  • Rotation des tokens, Faites tourner les Personal Access Tokens périodiquement
  • Permissions minimales, Utilisez des tokens en lecture seule lorsque l’accès en écriture n’est pas nécessaire
  • Transport chiffré, TLS 1.2+ pour toutes les communications API et SDK

Ressources associées

Subscribe to updates

developer-docs

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

auto-detect
Assistant AI

Bonjour ! Posez-moi vos questions sur la documentation.