Конектор Optimizely

Свържете Optimizely Feature Experimentation с Brevo чрез Tajo, за да синхронизирате резултати от експерименти, да насочвате кампании по сегменти с feature flags и да обогатявате маркетинговите автоматизации с данни от A/B тестове и инсайти за аудитории.

Преглед

СвойствоСтойност
ПлатформаOptimizely
КатегорияЕкспериментиране (Персонализирана)
Сложност на настройкаСредна
Официална интеграцияНе
Синхронизирани данниЕксперименти, Аудитории, Събития, Feature Flags
Метод на автентикацияPersonal Access Token / OAuth 2.0

Функции

  • Синхронизация на експерименти – Изпращайте разпределения на A/B тест вариации към атрибутите на контактите в Brevo
  • Таргетиране по аудитория – Използвайте аудитории на Optimizely за сегментиране на кампании в Brevo
  • Проследяване на конверсии – Проследявайте събития на Optimizely и ги мапвайте към проследяване на събития в Brevo
  • Синхронизация на feature flags – Сегментирайте контакти по активирани feature flags
  • Отчети с резултати – Синхронизирайте резултати от експерименти за маркетингови кампании след анализа
  • Поддръжка на множество проекти – Свържете множество проекти на Optimizely към една Tajo инстанция

Предварителни условия

Преди да започнете, уверете се, че имате:

  1. Акаунт в Optimizely Feature Experimentation
  2. Personal Access Token от Optimizely App Settings
  3. SDK ключ за вашата среда в Optimizely
  4. Акаунт в Brevo с API достъп
  5. Акаунт в Tajo с конекторни права

Автентикация

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

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

Конфигурация

Основна настройка

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

Мапване на полета

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 крайни точки

EndpointMethodОписание
https://api.optimizely.com/v2/projectsGETСписък на проектите
https://api.optimizely.com/v2/experimentsGETСписък на експериментите
https://api.optimizely.com/v2/experiments/{id}GETВземане на детайли за експеримент
https://api.optimizely.com/v2/experiments/{id}/resultsGETВземане на резултати от експеримент
https://api.optimizely.com/v2/featuresGETСписък на feature flags
https://api.optimizely.com/v2/features/{id}GETВземане на feature flag
https://api.optimizely.com/v2/audiencesGETСписък на аудиториите
https://api.optimizely.com/v2/eventsGETСписък на проследяваните събития
https://logx.optimizely.com/v1/eventsPOSTПроследяване на събития (SDK endpoint)

Примери за код

Инициализация на конектора

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

Синхронизация на решенията от експерименти към 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()
}
});
}
}
}
);

Синхронизация на резултати от експерименти

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

Сегментиране на базата на feature flag

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

Лимити на заявки

EndpointЛимитБележки
REST API50 req/minЗа personal access token
Results API10 req/minПо-висока латентност, по-тежки заявки
SDK Event Dispatch10,000 събития/batchЧрез SDK event processor
Datafile CDNНеограниченоКеширано с автоматични обновления

Латентност на Results API

Experiment Results API обработва големи набори от данни и може да отнеме 30+ секунди, за да отговори. Използвайте асинхронно допитване или кеширане, за да избегнете блокиране на вашето приложение.

Отстраняване на проблеми

ПроблемПричинаРешение
401 UnauthorizedИзтекъл/невалиден токенГенерирайте нов Personal Access Token
SDK не е готовDatafile не е зареденИзчакайте промисът onReady() да се резолвне
Няма логнати решенияНотификация не е регистриранаРегистрирайте listener преди вземане на решения
Остарели feature flagsКеширан datafileЗадайте updateInterval за автоматично обновяване
Липсващи резултатиЕкспериментът не е стартиранПроверете дали статусът на експеримента е “running”

Debug режим

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

Най-добри практики

  1. Използвайте SDK за решения – Използвайте SDK за оценка на flags в реално време, REST API за управление
  2. Внедрете batching на събития – Групирайте SDK събития, за да намалите мрежовото натоварване
  3. Кеширайте datafile – Активирайте автоматично обновяване с подходящи интервали
  4. Синхронизирайте печелившите вариации – След приключване на експерименти, обновете сегментите на контактите
  5. Използвайте атрибути за таргетиране – Предавайте email и потребителски атрибути за съответствие с аудиториите
  6. Следете статуса на експеримента – Синхронизирайте данни само от текущи или приключени експерименти

Сигурност

  • Personal Access Tokens – Bearer token автентикация за REST API
  • Изолация на SDK ключ – Отделни SDK ключове за среда (dev, staging, prod)
  • Server-side оценка – Оценявайте feature flags от сървъра, за да предотвратите излагане
  • Ротация на токени – Ротирайте Personal Access Tokens периодично
  • Минимални права – Използвайте read-only токени, когато не е нужен write достъп
  • Криптиран транспорт – TLS 1.2+ за всички API и SDK комуникации

Свързани ресурси

Subscribe to updates

developer-docs

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

auto-detect
AI асистент

Здравейте! Попитайте ме за документацията.