Optimizely Connector
Stanje konektorja: Načrtovano Še ni izdelano. Tajo danes ne poganja tega konektorja.
Ponazoritev · vzorčni podatki
Primer sinhronizacije
Vir
Optimizely
Stanje konektorja: Načrtovano
Cilj
Vaše drugo orodje
Stanje konektorja: Orodje po meri
Preslikava polj
| Izvorno polje | Ciljno polje | Vzorčna vrednost |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Osnutek
- Preglejte en zapis
- Odobrite to različico
Stanja veljajo za posamezne konektorje in ne zagotavljajo, da je ta sinhronizacija pripravljena. Polja so ponazoritvena. Pred zagonom sinhronizacije preverite dejansko shemo in dovoljenja.
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
| Lastnost | Vrednost |
|---|---|
| Platforma | Optimizely |
| Kategorija | Eksperimentiranje (po meri) |
| Zahtevnost nastavitve | Srednja |
| Uradna integracija | Ne |
| Sinhronizirani podatki | Eksperimenti, občinstvo, dogodki, zastavice funkcij |
| Metoda avtentikacije | Personal 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š:
- Račun Optimizely Feature Experimentation
- Personal Access Token iz Nastavitev aplikacije Optimizely
- SDK ključ za okolje Optimizely
- Brevo račun z dostopom do API
- Tajo račun z dovoljenji za konektorje
Avtentikacija
Personal Access Token
# Generate at https://app.optimizely.com/v2/accountsettings/tokensexport OPTIMIZELY_ACCESS_TOKEN=your_personal_access_tokenexport OPTIMIZELY_SDK_KEY=your_sdk_keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// All REST API requests use Bearer token authconst headers = { 'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`, 'Content-Type': 'application/json'};Avtentikacija SDK
// For feature flag evaluation, use the SDKconst 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_SEGMENTSPreslikava 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_DATEKončne točke API
| Končna točka | Metoda | Opis |
|---|---|---|
https://api.optimizely.com/v2/projects | GET | Seznam projektov |
https://api.optimizely.com/v2/experiments | GET | Seznam eksperimentov |
https://api.optimizely.com/v2/experiments/{id} | GET | Pridobi podrobnosti eksperimenta |
https://api.optimizely.com/v2/experiments/{id}/results | GET | Pridobi rezultate eksperimenta |
https://api.optimizely.com/v2/features | GET | Seznam zastavic funkcij |
https://api.optimizely.com/v2/features/{id} | GET | Pridobi zastavico funkcije |
https://api.optimizely.com/v2/audiences | GET | Seznam občinstev |
https://api.optimizely.com/v2/events | GET | Seznam sledenih événements |
https://logx.optimizely.com/v1/events | POST | Sledi é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 Brevoconst optimizelyClient = optimizelySDK.createInstance({ sdkKey: process.env.OPTIMIZELY_SDK_KEY});
await optimizelyClient.onReady();
// Register a decision notification listeneroptimizelyClient.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 segmentsconst 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 segmentsfor (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 segmentationasync 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čka | Omejitev | Opombe |
|---|---|---|
| REST API | 50 zahtevkov/min | Na Personal Access Token |
| Results API | 10 zahtevkov/min | Višja zakasnitev, zahtevnejše poizvedbe |
| Pošiljanje événements SDK | 10.000 événements/paket | Prek procesorja événements SDK |
| Datafile CDN | Neomejeno | Predpomnjeno 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žava | Vzrok | Rešitev |
|---|---|---|
| 401 Unauthorized | Žeton potekel/neveljaven | Obnovi Personal Access Token |
| SDK ni pripravljen | Datafile ni naložen | Počakaj, da se reši obljuba onReady() |
| Odločitve niso zabeležene | Poslušalec ni registriran | Registriraj poslušalca pred sprejemanjem odločitev |
| Zastarele zastavice funkcij | Predpomnilnik datafile | Nastavi updateInterval za samodejno osvežitev |
| Manjkajo rezultati | Eksperiment ni zagnan | Preveri, ali je status eksperimenta “running” |
Način odpravljanja napak
connectors: optimizely: debug: true log_level: verbose log_decisions: true log_events: trueNajboljše prakse
- Uporabi SDK za odločitve – za ocenjevanje zastavic v realnem času SDK, REST API za upravljanje
- Implementiraj paketiranje événements – paketni événements SDK za zmanjšanje omrežnih stroškov
- Predpomni datafile – omogoči samodejno posodabljanje z ustreznimi intervali
- Sinhronizacija zmagovalnih variant – po zaključku eksperimentov posodobi segmente stikov
- Za ciljanje uporabi atribute – za ujemanje občinstva posreduj e-mail in atribute uporabnika
- 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