Conector Optimizely
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
Optimizely
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
Conectați Optimizely Feature Experimentation la Brevo prin Tajo pentru a sincroniza rezultatele experimentelor, a targeta campanii după segmentele de fanioane de funcționalități și a îmbogăți automatizările de marketing cu date din testele A/B și informații despre audiență.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | Optimizely |
| Categorie | Experimentare (Personalizat) |
| Complexitate configurare | Medie |
| Integrare oficială | Nu |
| Date sincronizate | Experimente, Audiențe, Evenimente, Fanioane de funcționalități |
| Metodă de autentificare | Token de acces personal / OAuth 2.0 |
Funcționalități
- Sincronizare experimente - Transmiteți atribuirile variațiilor testelor A/B la atributele de contact Brevo
- Targetare audiență - Utilizați audiențele Optimizely pentru segmentarea campaniilor Brevo
- Urmărire conversii - Urmăriți evenimentele Optimizely și mapați-le la urmărirea evenimentelor Brevo
- Sincronizare fanioane funcționalități - Segmentați contactele după fanioanele de funcționalități activate
- Raportare rezultate - Sincronizați rezultatele experimentelor pentru campanii de marketing post-analiză
- Suport multi-proiect - Conectați mai multe proiecte Optimizely la o singură instanță Tajo
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un cont Optimizely Feature Experimentation
- Un Token de acces personal din Optimizely App Settings
- O cheie SDK pentru mediul Optimizely
- Un cont Brevo cu acces API
- Un cont Tajo cu permisiuni de conector
Autentificare
Token de acces personal
# 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'};Autentificare 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();Configurare
Configurare de bază
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_SEGMENTSMapare câmpuri
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_DATEPuncte finale API
| Punct final | Metodă | Descriere |
|---|---|---|
https://api.optimizely.com/v2/projects | GET | Listează proiectele |
https://api.optimizely.com/v2/experiments | GET | Listează experimentele |
https://api.optimizely.com/v2/experiments/{id} | GET | Obține detalii experiment |
https://api.optimizely.com/v2/experiments/{id}/results | GET | Obține rezultatele experimentului |
https://api.optimizely.com/v2/features | GET | Listează fanioanele de funcționalități |
https://api.optimizely.com/v2/features/{id} | GET | Obține fanionul de funcționalitate |
https://api.optimizely.com/v2/audiences | GET | Listează audiențele |
https://api.optimizely.com/v2/events | GET | Listează evenimentele urmărite |
https://logx.optimizely.com/v1/events | POST | Urmărește evenimente (punct final SDK) |
Exemple de cod
Inițializare conector
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'});Sincronizare decizii experiment cu 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() } }); } } });Sincronizare rezultate experiment
// 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}`); }}Segmentare bazată pe fanioane de funcționalități
// 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() } });}Limite de rată
| Punct final | Limită | Note |
|---|---|---|
| REST API | 50 cereri/min | Per token de acces personal |
| Results API | 10 cereri/min | Latență mai mare, interogări mai grele |
| Expediere evenimente SDK | 10.000 evenimente/lot | Prin procesorul de evenimente SDK |
| CDN fișier date | Nelimitat | Stocat în cache cu actualizări automate |
Latența Results API
Experiment Results API procesează seturi de date mari și poate dura 30+ secunde pentru a răspunde. Utilizați interogare asincronă sau stocare în cache pentru a evita blocarea aplicației.
Depanare
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Token expirat/invalid | Regenerați Tokenul de acces personal |
| SDK nepregatit | Fișier date neîncărcat | Așteptați rezolvarea promisiunii onReady() |
| Nicio decizie înregistrată | Notificare neînregistrată | Înregistrați listener înainte de a lua decizii |
| Fanioane de funcționalități deprecate | Cache fișier date | Setați updateInterval pentru reîmprospătare automată |
| Rezultate lipsă | Experimentul nu a început | Verificați că statusul experimentului este “running” |
Modul de depanare
connectors: optimizely: debug: true log_level: verbose log_decisions: true log_events: trueBune practici
- Utilizați SDK-ul pentru decizii - Utilizați SDK-ul pentru evaluarea fanionelor în timp real, REST API pentru management
- Implementați gruparea evenimentelor - Grupați evenimentele SDK pentru a reduce sarcina rețelei
- Stocați în cache fișierul date - Activați actualizarea automată cu intervale corespunzătoare
- Sincronizați variațiile câștigătoare - După finalizarea experimentelor, actualizați segmentele de contacte
- Utilizați atribute pentru targetare - Transmiteți e-mailul și atributele utilizatorului pentru potrivirea audiențelor
- Monitorizați statusul experimentului - Sincronizați date doar din experimentele în desfășurare sau finalizate
Securitate
- Tokeni de acces personal - Autentificare cu token Bearer pentru REST API
- Izolare cheie SDK - Chei SDK separate per mediu (dev, staging, prod)
- Evaluare pe server - Evaluați fanioanele de funcționalități pe server pentru a preveni expunerea
- Rotație token - Rotiți Tokenii de acces personal periodic
- Permisiuni minime - Utilizați tokeni read-only când accesul de scriere nu este necesar
- Transport criptat - TLS 1.2+ pentru toate comunicațiile API și SDK