Optimizely Connector

Poveži Optimizely Feature Experimentation z Brevo prek Tajo za sinhronizacijo rezultatov eksperimentov, ciljanje kampanj po segmentih zastavic funkcij in obogatitev marketinških avtomatizacij s podatki A/B testov in vpogledi v občinstvo.

Pregled

LastnostVrednost
PlatformaOptimizely
KategorijaEksperimentiranje (po meri)
Zahtevnost nastavitveSrednja
Uradna integracijaNe
Sinhronizirani podatkiEksperimenti, občinstvo, dogodki, zastavice funkcij
Metoda avtentikacijePersonal Access Token / OAuth 2.0

Funkcionalnosti

  • Sinhronizacija eksperimentov – potiski dodelitev variant A/B testov v atribute stikov Brevo
  • Ciljanje občinstva – za segmentacijo kampanj Brevo uporabi občinstvo Optimizely
  • Sledenje konverzijam – sledi événementom Optimizely in jih preslikaj na sledenje dogodkov Brevo
  • Sinhronizacija zastavic funkcij – segmentiraj stike glede na omogočene zastavice funkcij
  • Poročanje o rezultatih – sinhronizacija rezultatov eksperimentov za marketinške kampanje po analizi
  • Podpora za več projektov – poveži več projektov Optimizely z eno instanco Tajo

Predpogoji

Preden začneš, se prepričaj, da imaš:

  1. Račun Optimizely Feature Experimentation
  2. Personal Access Token iz Nastavitev aplikacije Optimizely
  3. SDK ključ za okolje Optimizely
  4. Brevo račun z dostopom do API
  5. Tajo račun z dovoljenji za konektorje

Avtentikacija

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

Avtentikacija 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();

Konfiguracija

Osnovna nastavitev

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

Preslikava polj

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

Končne točke API

Končna točkaMetodaOpis
https://api.optimizely.com/v2/projectsGETSeznam projektov
https://api.optimizely.com/v2/experimentsGETSeznam eksperimentov
https://api.optimizely.com/v2/experiments/{id}GETPridobi podrobnosti eksperimenta
https://api.optimizely.com/v2/experiments/{id}/resultsGETPridobi rezultate eksperimenta
https://api.optimizely.com/v2/featuresGETSeznam zastavic funkcij
https://api.optimizely.com/v2/features/{id}GETPridobi zastavico funkcije
https://api.optimizely.com/v2/audiencesGETSeznam občinstev
https://api.optimizely.com/v2/eventsGETSeznam sledenih événements
https://logx.optimizely.com/v1/eventsPOSTSledi événementom (končna točka SDK)

Primeri kode

Inicializacija konektorja

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

Sinhronizacija odločitev eksperimentov z 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()
}
});
}
}
}
);

Sinhronizacija rezultatov eksperimentov

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

Segmentacija na osnovi zastavic funkcij

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

Omejitve hitrosti

Končna točkaOmejitevOpombe
REST API50 zahtevkov/minNa Personal Access Token
Results API10 zahtevkov/minVišja zakasnitev, zahtevnejše poizvedbe
Pošiljanje événements SDK10.000 événements/paketPrek procesorja événements SDK
Datafile CDNNeomejenoPredpomnjeno s samodejnimi posodobitvami

Zakasnitev Results API

Experiment Results API obdeluje velike nabore podatkov in se lahko odzove po 30+ sekundah. Za izogibanje blokiranju aplikacije uporabi asinhrono anketiranje ali predpomnjenje.

Odpravljanje težav

TežavaVzrokRešitev
401 UnauthorizedŽeton potekel/neveljavenObnovi Personal Access Token
SDK ni pripravljenDatafile ni naloženPočakaj, da se reši obljuba onReady()
Odločitve niso zabeleženePoslušalec ni registriranRegistriraj poslušalca pred sprejemanjem odločitev
Zastarele zastavice funkcijPredpomnilnik datafileNastavi updateInterval za samodejno osvežitev
Manjkajo rezultatiEksperiment ni zagnanPreveri, ali je status eksperimenta “running”

Način odpravljanja napak

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

Najboljše prakse

  1. Uporabi SDK za odločitve – za ocenjevanje zastavic v realnem času SDK, REST API za upravljanje
  2. Implementiraj paketiranje événements – paketni événements SDK za zmanjšanje omrežnih stroškov
  3. Predpomni datafile – omogoči samodejno posodabljanje z ustreznimi intervali
  4. Sinhronizacija zmagovalnih variant – po zaključku eksperimentov posodobi segmente stikov
  5. Za ciljanje uporabi atribute – za ujemanje občinstva posreduj e-mail in atribute uporabnika
  6. Spremljaj status eksperimentov – sinhronizacija podatkov samo iz tekočih ali zaključenih eksperimentov

Varnost

  • Personal Access Tokens – avtentikacija z žetonom prinosnika za REST API
  • Izolacija SDK ključev – ločeni SDK ključi na okolje (razvoj, testno, produkcijsko)
  • Ocenjevanje na strani strežnika – ocenjuj zastavice funkcij na strani strežnika, da preprečiš izpostavljenost
  • Rotacija žetonov – periodično menjaj Personal Access Tokens
  • Minimalna dovoljenja – kadar pisni dostop ni potreben, uporabi žetone samo za branje
  • Šifrirani prenos – TLS 1.2+ za vse komunikacije API in SDK

Povezani viri

Subscribe to updates

developer-docs

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

auto-detect
AI pomočnik

Živjo! Vprašajte me o dokumentaciji.