Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

Optimizely Connector

Forbind Optimizely Feature Experimentation med Brevo via Tajo for at synkronisere eksperimentresultater, målrette kampagner efter feature flag-segmenter og berige marketingautomatiseringer med A/B-testdata og målgruppeindsigter.

Oversigt

EgenskabVærdi
PlatformOptimizely
KategoriEksperimentering (brugerdefineret)
OpsætningskompleksitetMellem
Officiel integrationNej
Synkroniserede dataEksperimenter, målgrupper, hændelser, feature flags
AutentifikationsmetodePersonal Access Token / OAuth 2.0

Funktioner

  • Eksperimentsynkronisering - Push A/B-testvariationstildelinger til Brevo-kontaktattributter
  • Målgruppemålretning - Brug Optimizely-målgrupper til segmentering af Brevo-kampagner
  • Konverteringsssporing - Spor Optimizely-hændelser, og kortlæg dem til Brevo-hændelsessporing
  • Feature flag-synkronisering - Segmentér kontakter efter aktiverede feature flags
  • Resultatrapportering - Synkronisér eksperimentresultater til marketingkampagner efter analyse
  • Multi-projekt-understøttelse - Forbind flere Optimizely-projekter til én Tajo-instans

Forudsætninger

Før du begynder, skal du sikre dig, at du har:

  1. En Optimizely Feature Experimentation-konto
  2. Et Personal Access Token fra Optimizely App Settings
  3. En SDK-nøgle til dit Optimizely-miljø
  4. En Brevo-konto med API-adgang
  5. En Tajo-konto med connector-tilladelser

Autentifikation

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-autentifikation

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

Konfiguration

Grundlæggende opsætning

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

Feltmapping

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-endpoints

EndpointMetodeBeskrivelse
https://api.optimizely.com/v2/projectsGETVis projekter
https://api.optimizely.com/v2/experimentsGETVis eksperimenter
https://api.optimizely.com/v2/experiments/{id}GETHent eksperimentdetaljer
https://api.optimizely.com/v2/experiments/{id}/resultsGETHent eksperimentresultater
https://api.optimizely.com/v2/featuresGETVis feature flags
https://api.optimizely.com/v2/features/{id}GETHent feature flag
https://api.optimizely.com/v2/audiencesGETVis målgrupper
https://api.optimizely.com/v2/eventsGETVis sporede hændelser
https://logx.optimizely.com/v1/eventsPOSTSpor hændelser (SDK-endpoint)

Kodeeksempler

Initialisér connector

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

Synkronisér eksperimentbeslutninger til 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()
}
});
}
}
}
);

Synkronisér eksperimentresultater

// 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-baseret segmentering

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

Rate limits

EndpointGrænseNoter
REST API50 req/min.Pr. personal access token
Results API10 req/min.Højere latens, tungere forespørgsler
SDK Event Dispatch10.000 hændelser/batchVia SDK event processor
Datafile CDNUbegrænsetCachet med auto-opdateringer

Latens for Results API

Experiment Results API behandler store datasæt og kan tage 30+ sekunder at svare. Brug asynkron polling eller caching for at undgå at blokere din applikation.

Fejlfinding

ProblemÅrsagLøsning
401 UnauthorizedToken udløbet/ugyldigtRegenerér Personal Access Token
SDK ikke klarDatafile ikke indlæstVent på, at onReady()-promise bliver resolved
Ingen beslutninger loggetNotifikation ikke registreretRegistrér listener, før du træffer beslutninger
Forældede feature flagsDatafile-cacheIndstil updateInterval for auto-opdatering
Manglende resultaterEksperiment ikke startetVerificér, at eksperimentstatus er “running”

Debug-tilstand

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

Bedste praksis

  1. Brug SDK’et til beslutninger - Brug SDK’et til realtidsflagevaluering, REST API til administration
  2. Implementér event-batching - Batch SDK-hændelser for at reducere netværksoverhead
  3. Cache datafilen - Aktivér auto-opdatering med passende intervaller
  4. Synkronisér vindende variationer - Når eksperimenter slutter, opdatér kontaktsegmenter
  5. Brug attributter til målretning - Pass e-mail og brugerattributter til målgruppematch
  6. Overvåg eksperimentstatus - Synkronisér kun data fra kørende eller afsluttede eksperimenter

Sikkerhed

  • Personal Access Tokens - Bearer-token-autentifikation til REST API
  • SDK-nøgleisolation - Separate SDK-nøgler pr. miljø (dev, staging, prod)
  • Server-side-evaluering - Evaluér feature flags server-side for at undgå eksponering
  • Tokenrotation - Rotér Personal Access Tokens regelmæssigt
  • Minimale tilladelser - Brug read-only-tokens, når skriveadgang ikke er nødvendig
  • Krypteret transport - TLS 1.2+ til al API- og SDK-kommunikation

Relaterede ressourcer

Bed om tidlig adgang til Tajo

Indtast dit fornavn og en e-mailadresse eller et telefonnummer. Vi kontakter dig med oplysninger om adgang til Tajo.

automatisk genkendelse
AI-assistent

Hej! Spørg mig om dokumentationen.