Conector Optimizely

Conectați Optimizely Feature Experimentation la Brevo prin Tajo pentru a sincroniza rezultatele experimentelor, a targeta campanii după segmentele de fanioane de funcționalități și a îmbogăți automatizările de marketing cu date din testele A/B și informații despre audiență.

Prezentare generală

ProprietateValoare
PlatformăOptimizely
CategorieExperimentare (Personalizat)
Complexitate configurareMedie
Integrare oficialăNu
Date sincronizateExperimente, Audiențe, Evenimente, Fanioane de funcționalități
Metodă de autentificareToken de acces personal / OAuth 2.0

Funcționalități

  • Sincronizare experimente - Transmiteți atribuirile variațiilor testelor A/B la atributele de contact Brevo
  • Targetare audiență - Utilizați audiențele Optimizely pentru segmentarea campaniilor Brevo
  • Urmărire conversii - Urmăriți evenimentele Optimizely și mapați-le la urmărirea evenimentelor Brevo
  • Sincronizare fanioane funcționalități - Segmentați contactele după fanioanele de funcționalități activate
  • Raportare rezultate - Sincronizați rezultatele experimentelor pentru campanii de marketing post-analiză
  • Suport multi-proiect - Conectați mai multe proiecte Optimizely la o singură instanță Tajo

Cerințe preliminare

Înainte de a începe, asigurați-vă că aveți:

  1. Un cont Optimizely Feature Experimentation
  2. Un Token de acces personal din Optimizely App Settings
  3. O cheie SDK pentru mediul Optimizely
  4. Un cont Brevo cu acces API
  5. Un cont Tajo cu permisiuni de conector

Autentificare

Token de acces personal

Terminal window
# Generate at 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
// All REST API requests use Bearer token auth
const headers = {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
};

Autentificare SDK

// For feature flag evaluation, use the 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();

Configurare

Configurare de bază

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 * * *" # Every 2 hours
mapping:
experiment_variation: EXPERIMENT_VARIATION
feature_flags: ENABLED_FEATURES
audience_segments: OPT_SEGMENTS

Mapare câmpuri

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

Puncte finale API

Punct finalMetodăDescriere
https://api.optimizely.com/v2/projectsGETListează proiectele
https://api.optimizely.com/v2/experimentsGETListează experimentele
https://api.optimizely.com/v2/experiments/{id}GETObține detalii experiment
https://api.optimizely.com/v2/experiments/{id}/resultsGETObține rezultatele experimentului
https://api.optimizely.com/v2/featuresGETListează fanioanele de funcționalități
https://api.optimizely.com/v2/features/{id}GETObține fanionul de funcționalitate
https://api.optimizely.com/v2/audiencesGETListează audiențele
https://api.optimizely.com/v2/eventsGETListează evenimentele urmărite
https://logx.optimizely.com/v1/eventsPOSTUrmărește evenimente (punct final SDK)

Exemple de cod

Inițializare conector

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

Sincronizare decizii experiment cu Brevo

// Track experiment decisions and sync to Brevo
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY
});
await optimizelyClient.onReady();
// Register a decision notification listener
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()
}
});
}
}
}
);

Sincronizare rezultate experiment

// Fetch experiment results and sync winning segments
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();
// Process variations and update contact segments
for (const variation of results.metrics) {
const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) {
// Create a Brevo segment for users in the winning variation
console.log(`Winning variation: ${variation.variation_name}`);
}
}

Segmentare bazată pe fanioane de funcționalități

// Evaluate feature flags for user segmentation
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()
}
});
}

Limite de rată

Punct finalLimităNote
REST API50 cereri/minPer token de acces personal
Results API10 cereri/minLatență mai mare, interogări mai grele
Expediere evenimente SDK10.000 evenimente/lotPrin procesorul de evenimente SDK
CDN fișier dateNelimitatStocat în cache cu actualizări automate

Latența Results API

Experiment Results API procesează seturi de date mari și poate dura 30+ secunde pentru a răspunde. Utilizați interogare asincronă sau stocare în cache pentru a evita blocarea aplicației.

Depanare

ProblemăCauzăSoluție
401 NeautorizatToken expirat/invalidRegenerați Tokenul de acces personal
SDK nepregatitFișier date neîncărcatAșteptați rezolvarea promisiunii onReady()
Nicio decizie înregistratăNotificare neînregistratăÎnregistrați listener înainte de a lua decizii
Fanioane de funcționalități deprecateCache fișier dateSetați updateInterval pentru reîmprospătare automată
Rezultate lipsăExperimentul nu a începutVerificați că statusul experimentului este “running”

Modul de depanare

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

Bune practici

  1. Utilizați SDK-ul pentru decizii - Utilizați SDK-ul pentru evaluarea fanionelor în timp real, REST API pentru management
  2. Implementați gruparea evenimentelor - Grupați evenimentele SDK pentru a reduce sarcina rețelei
  3. Stocați în cache fișierul date - Activați actualizarea automată cu intervale corespunzătoare
  4. Sincronizați variațiile câștigătoare - După finalizarea experimentelor, actualizați segmentele de contacte
  5. Utilizați atribute pentru targetare - Transmiteți e-mailul și atributele utilizatorului pentru potrivirea audiențelor
  6. Monitorizați statusul experimentului - Sincronizați date doar din experimentele în desfășurare sau finalizate

Securitate

  • Tokeni de acces personal - Autentificare cu token Bearer pentru REST API
  • Izolare cheie SDK - Chei SDK separate per mediu (dev, staging, prod)
  • Evaluare pe server - Evaluați fanioanele de funcționalități pe server pentru a preveni expunerea
  • Rotație token - Rotiți Tokenii de acces personal periodic
  • Permisiuni minime - Utilizați tokeni read-only când accesul de scriere nu este necesar
  • Transport criptat - TLS 1.2+ pentru toate comunicațiile API și SDK

Resurse conexe

Subscribe to updates

developer-docs

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

auto-detect
Asistent AI

Bună! Întreabă-mă orice despre documentație.