Optimizely konnektor
Csatlakoztasd az Optimizely Feature Experimentationt a Brevóhoz a Tajo segítségével, hogy szinkronizáld a kísérlet-eredményeket, funkciójelző szegmensek szerint célozz kampányokat, és gazdagítsd a marketingautomatizálásokat A/B teszt adatokkal és közönséginsightokkal.
Áttekintés
| Tulajdonság | Érték |
|---|---|
| Platform | Optimizely |
| Kategória | Kísérletezés (Egyéni) |
| Telepítés bonyolultsága | Közepes |
| Hivatalos integráció | Nem |
| Szinkronizált adatok | Kísérletek, Közönségek, Események, Funkciójelzők |
| Hitelesítési módszer | Személyes hozzáférési token / OAuth 2.0 |
Funkciók
- Kísérlet-szinkronizáció – A/B teszt variáció-hozzárendelések küldése Brevo kapcsolat-attribútumokhoz
- Közönség-célzás – Optimizely közönségek használata Brevo kampány-szegmentáláshoz
- Konverziókövetés – Optimizely események követése és leképezése Brevo eseménykövetésre
- Funkciójelző-szinkronizáció – Kapcsolatok szegmentálása engedélyezett funkciójelzők alapján
- Eredmény-riportolás – Kísérlet-eredmények szinkronizálása elemzés utáni marketingkampányokhoz
- Több projekt támogatása – Több Optimizely projekt csatlakoztatása egyetlen Tajo példányhoz
Előfeltételek
Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel:
- Egy Optimizely Feature Experimentation fiókkal
- Egy személyes hozzáférési tokennel az Optimizely App Beállításokból
- Egy SDK kulccsal az Optimizely környezetedhez
- Egy Brevo fiókkal API-hozzáféréssel
- Egy Tajo fiókkal konnektor engedélyekkel
Hitelesítés
Személyes hozzáférési 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'};SDK hitelesítés
// 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();Konfiguráció
Alapbeállítás
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_SEGMENTSMezőleképezés
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_DATEAPI végpontok
| Végpont | Módszer | Leírás |
|---|---|---|
https://api.optimizely.com/v2/projects | GET | Projektek listázása |
https://api.optimizely.com/v2/experiments | GET | Kísérletek listázása |
https://api.optimizely.com/v2/experiments/{id} | GET | Kísérlet részletek lekérése |
https://api.optimizely.com/v2/experiments/{id}/results | GET | Kísérlet-eredmények lekérése |
https://api.optimizely.com/v2/features | GET | Funkciójelzők listázása |
https://api.optimizely.com/v2/features/{id} | GET | Funkciójelző lekérése |
https://api.optimizely.com/v2/audiences | GET | Közönségek listázása |
https://api.optimizely.com/v2/events | GET | Követett események listázása |
https://logx.optimizely.com/v1/events | POST | Események követése (SDK végpont) |
Kódpéldák
A konnektor inicializálása
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'});Kísérlet-döntések szinkronizálása a Brevóba
// 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() } }); } } });Kísérlet-eredmények szinkronizálása
// 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}`); }}Funkciójelző alapú szegmentálás
// 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() } });}Ráta-korlátok
| Végpont | Korlát | Megjegyzések |
|---|---|---|
| REST API | 50 kérés/perc | Személyes hozzáférési tokenenkénti |
| Results API | 10 kérés/perc | Nagyobb késleltetés, nehezebb lekérdezések |
| SDK esemény-kézbesítés | 10 000 esemény/köteg | SDK eseményfeldolgozón keresztül |
| Adatfájl CDN | Korlátlan | Gyorsítótárazva automatikus frissítéssel |
Results API késleltetés
A Kísérlet-eredmények API nagy adatkészleteket dolgoz fel és 30+ másodpercig is tarthat a válasz. Használj aszinkron lekérdezést vagy gyorsítótárazást az alkalmazás blokkolásának elkerüléséhez.
Hibaelhárítás
| Probléma | Ok | Megoldás |
|---|---|---|
| 401 Unauthorized | Token lejárt/érvénytelen | Generáld újra a személyes hozzáférési tokent |
| SDK nem kész | Adatfájl nem töltődött be | Várj az onReady() ígéret teljesítéséig |
| Nincsenek naplózott döntések | Az értesítés nincs regisztrálva | Regisztráld a figyelőt a döntések meghozatala előtt |
| Elavult funkciójelzők | Adatfájl gyorsítótár | Állíts be updateInterval-t az automatikus frissítéshez |
| Hiányzó eredmények | Kísérlet nem indult el | Ellenőrizd, hogy a kísérlet státusza “running” |
Hibakeresési mód
connectors: optimizely: debug: true log_level: verbose log_decisions: true log_events: trueLegjobb gyakorlatok
- SDK-t használj döntésekhez – A valós idejű jelző-kiértékeléshez az SDK-t, kezeléshez a REST API-t használd
- Implementálj esemény-kötegezést – Kötegelj SDK eseményeket a hálózati terhelés csökkentéséhez
- Gyorsítótárazd az adatfájlt – Engedélyezd az automatikus frissítést megfelelő intervallumokkal
- Szinkronizálj nyerő variációkat – A kísérletek lezárása után frissítsd a kapcsolati szegmenseket
- Attribútumokat használj célzáshoz – Add át az e-mailt és felhasználói attribútumokat a közönség-egyeztetéshez
- Figyeld a kísérletek státuszát – Csak futó vagy befejezett kísérletekből szinkronizálj adatokat
Biztonság
- Személyes hozzáférési tokenek – Bearer token hitelesítés a REST API-hoz
- SDK kulcs izoláció – Külön SDK kulcsok környezetenként (fejlesztési, tesztelési, éles)
- Szerver oldali kiértékelés – Értékeld ki a funkciójelzőket szerver oldalon a kitettség megelőzéséhez
- Token rotáció – Forgasd rendszeresen a személyes hozzáférési tokeneket
- Minimális engedélyek – Használj csak olvasási tokeneket, ha nincs szükség írási hozzáférésre
- Titkosított átvitel – TLS 1.2+ minden API és SDK kommunikációhoz