Optimizely konektor

Prepoj Optimizely Feature Experimentation s Brevo cez Tajo na synchronizáciu výsledkov experimentov, cielenie kampaní podľa segmentov feature flags a obohacovanie marketingových automatizácií o dáta A/B testov a poznatky o publikách.

Prehľad

VlastnosťHodnota
PlatformaOptimizely
KategóriaExperimentovanie (Vlastná)
Zložitosť nastaveniaStredná
Oficiálna integráciaNie
Synchronizované dátaExperimenty, Publiká, Udalosti, Feature Flags
Metóda autentifikáciePersonal Access Token / OAuth 2.0

Funkcie

  • Synchronizácia experimentov - Odosielaj priradenia variantov A/B testov do atribútov kontaktov Brevo
  • Cielenie publík - Použi publiká Optimizely pre segmentáciu kampaní Brevo
  • Sledovanie konverzií - Sleduj udalosti Optimizely a namapuj na sledovanie udalostí Brevo
  • Synchronizácia feature flags - Segmentuj kontakty podľa povolených feature flags
  • Reportovanie výsledkov - Synchronizuj výsledky experimentov pre post-analytické marketingové kampane
  • Podpora viacerých projektov - Prepoj viacero projektov Optimizely s jednou inštanciou Tajo

Predpoklady

Predtým, než začneš, uisti sa, že máš:

  1. Účet Optimizely Feature Experimentation
  2. Personal Access Token z Optimizely App Settings
  3. SDK kľúč pre tvoje Optimizely prostredie
  4. Brevo účet s API prístupom
  5. Tajo účet s oprávneniami pre konektory

Autentifikácia

Personal Access Token

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

Autentifikácia 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();

Konfigurácia

Základné nastavenie

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

Mapovanie polí

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

API endpointy

EndpointMetódaPopis
https://api.optimizely.com/v2/projectsGETZoznam projektov
https://api.optimizely.com/v2/experimentsGETZoznam experimentov
https://api.optimizely.com/v2/experiments/{id}GETDetaily experimentu
https://api.optimizely.com/v2/experiments/{id}/resultsGETVýsledky experimentu
https://api.optimizely.com/v2/featuresGETZoznam feature flags
https://api.optimizely.com/v2/features/{id}GETDetaily feature flag
https://api.optimizely.com/v2/audiencesGETZoznam publík
https://api.optimizely.com/v2/eventsGETZoznam sledovaných udalostí
https://logx.optimizely.com/v1/eventsPOSTSledovanie udalostí (SDK endpoint)

Ukážky kódu

Inicializácia konektora

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

Synchronizácia rozhodnutí experimentov do 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()
}
});
}
}
}
);

Synchronizácia výsledkov experimentov

// 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}`);
}
}

Segmentácia na základe feature flags

// 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()
}
});
}

Obmedzenia rýchlosti

EndpointLimitPoznámky
REST API50 požiadaviek/minNa personal access token
Results API10 požiadaviek/minVyššia latencia, ťažšie dopyty
SDK Event Dispatch10 000 udalostí/dávkaCez SDK event processor
Datafile CDNNeobmedzeneKešovaný s automatickými aktualizáciami

Latencia Results API

Experiment Results API spracúva veľké datasety a môže trvať 30+ sekúnd na odpoveď. Použi asynchrónny polling alebo kešovanie na vyhnutie sa blokovaniu aplikácie.

Riešenie problémov

ProblémPríčinaRiešenie
401 UnauthorizedToken vypršal/neplatnýZnovu vygeneruj Personal Access Token
SDK nie je pripravenýDatafile nie je načítanýPočkaj na vyriešenie prísľubu onReady()
Žiadne zaznamenané rozhodnutiaListener nie je zaregistrovanýZaregistruj listener pred vykonávaním rozhodnutí
Zastarané feature flagsKeš datafileNastav updateInterval pre automatickú obnovu
Chýbajúce výsledkyExperiment nie je spustenýOverte, že stav experimentu je “running”

Debug režim

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

Odporúčané postupy

  1. Použi SDK pre rozhodnutia - Použi SDK pre vyhodnotenie flags v reálnom čase, REST API pre správu
  2. Implementuj dávkovanie udalostí - Dávkuj SDK udalosti na zníženie sieťovej réžie
  3. Kešuj datafile - Povol automatickú aktualizáciu s príslušnými intervalmi
  4. Synchronizuj víťazné varianty - Po ukončení experimentov aktualizuj segmenty kontaktov
  5. Použi atribúty pre cielenie - Odovzdávaj e-mail a atribúty používateľa pre zhodu s publikom
  6. Sleduj stav experimentu - Synchronizuj iba dáta z bežiacich alebo ukončených experimentov

Bezpečnosť

  • Personal Access Tokens - Bearer token autentifikácia pre REST API
  • Izolácia SDK kľúčov - Samostatné SDK kľúče na prostredie (dev, staging, prod)
  • Vyhodnotenie na strane servera - Vyhodnocuj feature flags na strane servera na predchádzanie expozícii
  • Rotácia tokenov - Pravidelne rotuj Personal Access Tokens
  • Minimálne oprávnenia - Použi read-only tokeny, keď write prístup nie je potrebný
  • Šifrovaný transport - TLS 1.2+ pre všetku API a SDK komunikáciu

Súvisiace zdroje

Subscribe to updates

developer-docs

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

auto-detect
AI asistent

Ahoj! Opýtajte sa ma na dokumentáciu.