Optimizely Konektor

Povežite Optimizely Feature Experimentation s Brevom putem Taja kako biste sinkronizirali rezultate eksperimenata, ciljali kampanje prema segmentima feature zastavica i obogatili marketinške automatizacije s A/B test podacima i uvidima publike.

Pregled

SvojstvoVrijednost
PlatformaOptimizely
KategorijaEksperimentiranje (Prilagođeno)
Složenost postavljanjaSrednje
Službena integracijaNe
Sinkronizirani podaciEksperimenti, Publike, Događaji, Feature zastavice
Metoda autentifikacijePersonal Access Token / OAuth 2.0

Značajke

  • Sinkronizacija eksperimenata - Guranje dodjela varijanti A/B testova na Brevo atribute kontakata
  • Ciljanje publike - Koristite Optimizely publike za Brevo segmentaciju kampanja
  • Praćenje konverzija - Pratite Optimizely događaje i mapirajte na Brevo praćenje događaja
  • Sinkronizacija feature zastavica - Segmentirajte kontakte prema omogućenim feature zastavicama
  • Izvješćivanje o rezultatima - Sinkronizirajte rezultate eksperimenata za post-analitičke marketinške kampanje
  • Podrška za više projekata - Povežite više Optimizely projekata s jednom Tajo instancom

Preduvjeti

Prije nego što počnete, osigurajte da imate:

  1. Optimizely Feature Experimentation račun
  2. Personal Access Token iz Optimizely App Postavke
  3. SDK ključ za vaše Optimizely okruženje
  4. Brevo račun s API pristupom
  5. Tajo račun s dozvolama konektora

Autentifikacija

Personal Access Token

Terminal window
# Generirajte na 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
// Svi REST API zahtjevi koriste Bearer token autentifikaciju
const headers = {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
};

SDK autentifikacija

// Za evaluaciju feature zastavica, koristite SDK
const optimizelySDK = require('@optimizely/optimizely-sdk');
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY,
datafileOptions: {
autoUpdate: true,
updateInterval: 60000 // 1 minuta
}
});
await optimizelyClient.onReady();

Konfiguracija

Osnovna konfiguracija

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

Mapiranje polja

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 krajnje točke

Krajnja točkaMetodaOpis
https://api.optimizely.com/v2/projectsGETPopis projekata
https://api.optimizely.com/v2/experimentsGETPopis eksperimenata
https://api.optimizely.com/v2/experiments/{id}GETDetalji eksperimenta
https://api.optimizely.com/v2/experiments/{id}/resultsGETRezultati eksperimenta
https://api.optimizely.com/v2/featuresGETPopis feature zastavica
https://api.optimizely.com/v2/features/{id}GETDetalji feature zastavice
https://api.optimizely.com/v2/audiencesGETPopis publike
https://api.optimizely.com/v2/eventsGETPopis praćenih događaja
https://logx.optimizely.com/v1/eventsPOSTPraćenje događaja (SDK krajnja točka)

Primjeri koda

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

Sinkronizacija odluka eksperimenta s Brevom

// Praćenje odluka eksperimenta i sinkronizacija s Brevom
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY
});
await optimizelyClient.onReady();
// Registracija slušatelja obavijesti o odlukama
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()
}
});
}
}
}
);

Sinkronizacija rezultata eksperimenta

// Dohvaćanje rezultata eksperimenta i sinkronizacija pobjedničkih segmenata
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();
// Obrada varijanti i ažuriranje segmenata kontakata
for (const variation of results.metrics) {
const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) {
// Stvaranje Brevo segmenta za korisnike u pobjedničkoj varijanti
console.log(`Pobjednička varijanta: ${variation.variation_name}`);
}
}

Segmentacija temeljena na feature zastavicama

// Evaluacija feature zastavica za korisničku segmentaciju
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()
}
});
}

Ograničenja brzine

Krajnja točkaOgraničenjeNapomene
REST API50 zah./minPo personal access tokenu
Results API10 zah./minVeća latencija, teži upiti
SDK isporuka događaja10.000 događaja/serijaPutem SDK procesora događaja
Datafile CDNNeograničenoPredmemorirano s automatskim ažuriranjima

Latencija Results API-ja

Experiment Results API obrađuje velike skupove podataka i može trebati 30+ sekundi za odgovor. Koristite asinkrono anketiranje ili predmemoriranje kako biste izbjegli blokiranje vaše aplikacije.

Rješavanje problema

ProblemUzrokRješenje
401 UnauthorizedToken istekao/nevažećiRegenerirajte Personal Access Token
SDK nije spremanDatafile nije učitanPričekajte da se razriješi obećanje onReady()
Nisu zabilježene odlukeObavijest nije registriranaRegistrirajte slušatelja prije donošenja odluka
Zastarjele feature zastavicePredmemorija datafile-aPostavite updateInterval za automatsko osvježavanje
Nedostaju rezultatiEksperiment nije pokrenutProvjerite je li status eksperimenta “running”

Način otklanjanja grešaka

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

Preporučene prakse

  1. Koristite SDK za odluke - Koristite SDK za evaluaciju zastavica u stvarnom vremenu, REST API za upravljanje
  2. Implementirajte skupno slanje događaja - Skupni SDK događaji za smanjenje mrežnog opterećenja
  3. Predmemorirajte datafile - Omogućite automatsko ažuriranje s odgovarajućim intervalima
  4. Sinkronizirajte pobjedničke varijante - Nakon zaključivanja eksperimenata, ažurirajte segmente kontakata
  5. Koristite atribute za ciljanje - Proslijedite e-mail i korisničke atribute za podudaranje publike
  6. Pratite status eksperimenta - Sinkronizirajte samo podatke iz pokrenutih ili zaključenih eksperimenata

Sigurnost

  • Personal Access Tokeni - Bearer token autentifikacija za REST API
  • Izolacija SDK ključa - Zasebni SDK ključevi po okruženju (razvoj, testiranje, produkcija)
  • Evaluacija na strani servera - Evaluirajte feature zastavice na strani servera kako biste spriječili izlaganje
  • Rotacija tokena - Periodično rotirajte Personal Access Tokene
  • Minimalne dozvole - Koristite tokene samo za čitanje kada write pristup nije potreban
  • Šifrirani transport - TLS 1.2+ za sve API i SDK komunikacije

Povezani resursi

Subscribe to updates

developer-docs

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

auto-detect
AI asistent

Bok! Pitajte me o dokumentaciji.