Konektor Optimizely

Propojte Optimizely Feature Experimentation s Brevo přes Tajo pro synchronizaci výsledků experimentů, cílení kampaní podle segmentů příznaků funkcí a obohacení marketingových automatizací o data A/B testů a poznatky o publiku.

Přehled

VlastnostHodnota
PlatformaOptimizely
KategorieExperimentování (Vlastní)
Složitost nastaveníStřední
Oficiální integraceNe
Synchronizovaná dataExperimenty, Publika, Události, Příznaky funkcí
Metoda ověřeníOsobní přístupový token / OAuth 2.0

Funkce

  • Synchronizace experimentů – Odesílejte přiřazení variací A/B testů do atributů kontaktů Brevo
  • Cílení publika – Používejte publika Optimizely pro segmentaci kampaní Brevo
  • Sledování konverzí – Sledujte události Optimizely a mapujte je na sledování událostí Brevo
  • Synchronizace příznaků funkcí – Segmentujte kontakty podle povolených příznaků funkcí
  • Reporting výsledků – Synchronizujte výsledky experimentů pro marketingové kampaně po analýze
  • Podpora více projektů – Propojte více projektů Optimizely s jednou instancí Tajo

Předpoklady

Než začnete, ujistěte se, že máte:

  1. Účet Optimizely Feature Experimentation
  2. Osobní přístupový token z Nastavení aplikace Optimizely
  3. SDK klíč pro vaše prostředí Optimizely
  4. Účet Brevo s přístupem k API
  5. Účet Tajo s oprávněními ke konektoru

Ověření

Osobní přístupový token

Terminal window
# Vygenerujte 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
// Všechny požadavky REST API používají ověření Bearer tokenem
const headers = {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
};

Ověření SDK

// Pro vyhodnocení příznaků funkcí použijte 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();

Konfigurace

Základní nastavení

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 * * *" # Každé 2 hodiny
mapping:
experiment_variation: EXPERIMENT_VARIATION
feature_flags: ENABLED_FEATURES
audience_segments: OPT_SEGMENTS

Mapování polí

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

Koncové body API

Koncový bodMetodaPopis
https://api.optimizely.com/v2/projectsGETVýpis projektů
https://api.optimizely.com/v2/experimentsGETVýpis experimentů
https://api.optimizely.com/v2/experiments/{id}GETZískání podrobností experimentu
https://api.optimizely.com/v2/experiments/{id}/resultsGETZískání výsledků experimentu
https://api.optimizely.com/v2/featuresGETVýpis příznaků funkcí
https://api.optimizely.com/v2/features/{id}GETZískání příznaku funkce
https://api.optimizely.com/v2/audiencesGETVýpis publik
https://api.optimizely.com/v2/eventsGETVýpis sledovaných událostí
https://logx.optimizely.com/v1/eventsPOSTSledování událostí (koncový bod SDK)

Příklady kódu

Inicializace konektoru

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

Synchronizace rozhodnutí experimentu do Brevo

// Sledování rozhodnutí experimentu a synchronizace do Brevo
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY
});
await optimizelyClient.onReady();
// Registrace naslouchátka notifikace rozhodnutí
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()
}
});
}
}
}
);

Synchronizace výsledků experimentu

// Načtení výsledků experimentu a synchronizace vítězných segmentů
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();
// Zpracování variací a aktualizace segmentů kontaktů
for (const variation of results.metrics) {
const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) {
// Vytvoření segmentu Brevo pro uživatele ve vítězné variaci
console.log(`Vítězná variace: ${variation.variation_name}`);
}
}

Segmentace na základě příznaků funkcí

// Vyhodnocení příznaků funkcí pro segmentaci uživatelů
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()
}
});
}

Omezení rychlosti

Koncový bodLimitPoznámky
REST API50 požadavků/minNa osobní přístupový token
Results API10 požadavků/minVyšší latence, náročnější dotazy
Odesílání událostí SDK10 000 událostí/dávkaPřes procesor událostí SDK
Datafile CDNNeomezenoUkládáno do mezipaměti s automatickými aktualizacemi

Latence Results API

Results API experimentů zpracovává velké datové sady a může trvat 30+ sekund, než odpoví. Používejte asynchronní polling nebo ukládání do mezipaměti, abyste neblokovali svou aplikaci.

Řešení problémů

ProblémPříčinaŘešení
401 UnauthorizedToken vypršel/neplatnýObnovte osobní přístupový token
SDK není připravenDatový soubor není načtenPočkejte na vyřešení příslibu onReady()
Žádná zalogovaná rozhodnutíNaslouchátko není registrovánoRegistrujte naslouchátko před přijímáním rozhodnutí
Zastaralé příznaky funkcíMezipaměť datového souboruNastavte updateInterval pro automatické obnovování
Chybějící výsledkyExperiment nezačalOvěřte, zda je stav experimentu “running”

Režim ladění

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

Osvědčené postupy

  1. Používejte SDK pro rozhodnutí – Používejte SDK pro vyhodnocení příznaků v reálném čase, REST API pro správu
  2. Implementujte dávkování událostí – Dávkujte události SDK pro snížení síťové zátěže
  3. Ukládejte datový soubor do mezipaměti – Povolte automatické aktualizace s vhodnými intervaly
  4. Synchronizujte vítězné variace – Po ukončení experimentů aktualizujte segmenty kontaktů
  5. Používejte atributy pro cílení – Předávejte e-mail a uživatelské atributy pro porovnávání publik
  6. Monitorujte stav experimentu – Synchronizujte pouze data z běžících nebo ukončených experimentů

Zabezpečení

  • Osobní přístupové tokeny – Ověřování Bearer tokenem pro REST API
  • Izolace SDK klíčů – Samostatné SDK klíče pro každé prostředí (dev, staging, prod)
  • Vyhodnocení na straně serveru – Vyhodnocujte příznaky funkcí na straně serveru, aby nedošlo k jejich odhalení
  • Rotace tokenů – Pravidelně rotujte osobní přístupové tokeny
  • Minimální oprávnění – Používejte tokeny jen pro čtení, když není potřeba přístup pro zápis
  • Šifrovaný přenos – TLS 1.2+ pro veškerou komunikaci API a SDK

Související zdroje

Subscribe to updates

developer-docs

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

auto-detect
AI asistent

Ahoj! Zeptejte se mě na dokumentaci.