Optimizely-kobling
Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.
Illustrasjon · eksempeldata
Eksempel på synkronisering
Kilde
Optimizely
Koblingsstatus: Planlagt
Mål
Det andre verktøyet ditt
Koblingsstatus: Eget verktøy
Feltkobling
| Kildefelt | Målfelt | Eksempelverdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Se gjennom én oppføring
- Godkjenn denne versjonen
Status gjelder hver enkelt kobling og garanterer ikke at denne synkroniseringen er klar. Feltene er illustrative. Kontroller faktisk skjema og tillatelser før synkroniseringen kjører.
Koble Optimizely Feature Experimentation til Brevo gjennom Tajo for å synkronisere eksperimentresultater, målrette kampanjer etter feature flag-segmenter og berike markedsføringsautomatiseringer med A/B-testdata og målgruppeinnsikt.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | Optimizely |
| Kategori | Eksperimentering (Custom) |
| Oppsettskompleksitet | Moderat |
| Offisiell integrasjon | Nei |
| Synkroniserte data | Eksperimenter, målgrupper, hendelser, feature flags |
| Autentiseringsmetode | Personlig tilgangstoken / OAuth 2.0 |
Funksjoner
- Eksperimentsynkronisering - Push A/B-testvariantstildelinger til Brevo-kontaktattributter
- Målgruppemålretting - Bruk Optimizely-målgrupper til segmentering av Brevo-kampanjer
- Konverteringssporing - Spor Optimizely-hendelser og mapp til Brevo-hendelsessporing
- Feature flag-synkronisering - Segmenter kontakter etter aktiverte feature flags
- Resultatrapportering - Synkroniser eksperimentresultater for etteranalyse av markedsføringskampanjer
- Støtte for flere prosjekter - Koble flere Optimizely-prosjekter til én enkelt Tajo-instans
Forutsetninger
Før du begynner, sørg for at du har:
- En Optimizely Feature Experimentation-konto
- Et personlig tilgangstoken fra Optimizely App Settings
- En SDK-nøkkel for ditt Optimizely-miljø
- En Brevo-konto med API-tilgang
- En Tajo-konto med konnektor-rettigheter
Autentisering
Personlig tilgangstoken
# Generer på 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// Alle REST API-forespørsler bruker Bearer-tokenautentiseringconst headers = { 'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`, 'Content-Type': 'application/json'};SDK-autentisering
// For evaluering av feature flags, bruk SDK-etconst optimizelySDK = require('@optimizely/optimizely-sdk');
const optimizelyClient = optimizelySDK.createInstance({ sdkKey: process.env.OPTIMIZELY_SDK_KEY, datafileOptions: { autoUpdate: true, updateInterval: 60000 // 1 minutt }});
await optimizelyClient.onReady();Konfigurasjon
Grunnleggende oppsett
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 * * *" # Hver 2. time
mapping: experiment_variation: EXPERIMENT_VARIATION feature_flags: ENABLED_FEATURES audience_segments: OPT_SEGMENTSFeltmapping
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-endepunkter
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
https://api.optimizely.com/v2/projects | GET | List prosjekter |
https://api.optimizely.com/v2/experiments | GET | List eksperimenter |
https://api.optimizely.com/v2/experiments/{id} | GET | Hent eksperimentdetaljer |
https://api.optimizely.com/v2/experiments/{id}/results | GET | Hent eksperimentresultater |
https://api.optimizely.com/v2/features | GET | List feature flags |
https://api.optimizely.com/v2/features/{id} | GET | Hent feature flag |
https://api.optimizely.com/v2/audiences | GET | List målgrupper |
https://api.optimizely.com/v2/events | GET | List sporede hendelser |
https://logx.optimizely.com/v1/events | POST | Spor hendelser (SDK-endepunkt) |
Kodeeksempler
Initialiser kobling
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'});Synkroniser eksperimentbeslutninger til Brevo
// Spor eksperimentbeslutninger og synkroniser til Brevoconst optimizelyClient = optimizelySDK.createInstance({ sdkKey: process.env.OPTIMIZELY_SDK_KEY});
await optimizelyClient.onReady();
// Registrer en lytter for beslutningsvarsleroptimizelyClient.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() } }); } } });Synkroniser eksperimentresultater
// Hent eksperimentresultater og synkroniser vinnende segmenterconst resultsResponse = await fetch( `https://api.optimizely.com/v2/experiments/${experimentId}/results`, { headers: { 'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}` } });
const results = await resultsResponse.json();
// Behandle varianter og oppdater kontaktsegmenterfor (const variation of results.metrics) { const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) { // Opprett et Brevo-segment for brukere i den vinnende varianten console.log(`Winning variation: ${variation.variation_name}`); }}Feature flag-basert segmentering
// Evaluer feature flags for brukersegmenteringasync 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() } });}Ratebegrensninger
| Endepunkt | Grense | Merknader |
|---|---|---|
| REST API | 50 forespørsler/min | Per personlig tilgangstoken |
| Results API | 10 forespørsler/min | Høyere latens, tyngre spørringer |
| SDK Event Dispatch | 10 000 hendelser/batch | Via SDK-hendelsesprosessor |
| Datafile CDN | Ubegrenset | Mellomlagret med automatisk oppdatering |
Results API-latens
Experiment Results API behandler store datasett og kan ta 30+ sekunder å svare. Bruk asynkron polling eller mellomlagring for å unngå å blokkere applikasjonen din.
Feilsøking
| Problem | Årsak | Løsning |
|---|---|---|
| 401 Unauthorized | Token utløpt/ugyldig | Regenerer personlig tilgangstoken |
| SDK ikke klar | Datafile ikke lastet | Vent på at onReady()-promise skal løses |
| Ingen beslutninger loggført | Varsler ikke registrert | Registrer lytter før beslutninger tas |
| Utdaterte feature flags | Datafile-cache | Sett updateInterval for automatisk oppdatering |
| Manglende resultater | Eksperiment ikke startet | Verifiser at eksperimentstatus er “running” |
Feilsøkingsmodus
connectors: optimizely: debug: true log_level: verbose log_decisions: true log_events: trueBeste praksis
- Bruk SDK-et for beslutninger - Bruk SDK-et for sanntidsevaluering av flags, REST API for administrasjon
- Implementer hendelsesbatching - Batch SDK-hendelser for å redusere nettverkstrafikk
- Mellomlagre datafile - Aktiver auto-oppdatering med passende intervaller
- Synkroniser vinnende varianter - Etter at eksperimenter er avsluttet, oppdater kontaktsegmenter
- Bruk attributter for målretting - Send e-post og brukerattributter for målgruppetreff
- Overvåk eksperimentstatus - Synkroniser kun data fra pågående eller avsluttede eksperimenter
Sikkerhet
- Personlige tilgangstokens - Bearer-tokenautentisering for REST API
- SDK-nøkkelisolering - Separate SDK-nøkler per miljø (dev, staging, prod)
- Tjenersideevaluering - Evaluer feature flags på tjenersiden for å hindre eksponering
- Tokenrotasjon - Roter personlige tilgangstokens regelmessig
- Minimale rettigheter - Bruk kun lese-tokens når skrivetilgang ikke er nødvendig
- Kryptert transport - TLS 1.2+ for all API- og SDK-kommunikasjon