Skip to content

Commit 653f446

Browse files
Fix/optimizely personalization campaign (#1463)
1 parent 16e01ee commit 653f446

3 files changed

Lines changed: 91 additions & 15 deletions

File tree

plugins/browser-plugin-optimizely-x/pnpm-lock.yaml

Lines changed: 67 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/browser-plugin-optimizely-x/src/contexts.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@
3232
* Schema for an Optimizely X summary context
3333
*/
3434
export interface OptimizelyxSummary {
35+
campaignId?: number | null; // added: captures the Personalization campaign layerId
3536
experimentId?: number | null;
3637
variationName?: string | null;
3738
variation?: number | null;
3839
visitorId?: string | null;
3940
[key: string]: unknown;
40-
}
41+
}

plugins/browser-plugin-optimizely-x/src/index.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ declare global {
4848
}
4949

5050
/**
51-
* Adds Opimizely X context to events
51+
* Adds Optimizely X context to events
5252
*/
5353
export function OptimizelyXPlugin(): BrowserPlugin {
5454
/**
@@ -66,24 +66,32 @@ export function OptimizelyXPlugin(): BrowserPlugin {
6666
}
6767

6868
/**
69-
* Get data for OptimizelyX contexts - active experiments on current page
69+
* Get data for OptimizelyX contexts - active campaigns on current page.
70+
* Uses getCampaignStates() instead of getActiveExperimentIds() to correctly
71+
* capture campaignId (layerId) for both Web Experimentation and Personalization
72+
* campaigns. For Personalization campaigns, experimentId will reflect the
73+
* experience ID (the sub-unit within the campaign).
7074
*
71-
* @returns Array content of lite optimizely lite context
75+
* @returns Array content of optimizely summary context
7276
*/
7377
function getOptimizelyXSummary(): OptimizelyxSummary[] {
7478
const state = getOptimizelyXData('state');
7579
if (state == null) return [];
76-
var experiment_ids = state.getActiveExperimentIds() || [];
77-
var variationMap = state.getVariationMap();
78-
var visitor = getOptimizelyXData('visitor');
7980

80-
return experiment_ids.map((activeExperiment: string) => {
81-
var variation = variationMap[activeExperiment];
82-
var variationName = (variation && variation.name && variation.name.toString()) || null;
83-
var variationId = variation && variation.id;
84-
var visitorId = (visitor && visitor.visitorId && visitor.visitorId.toString()) || null;
81+
const campaignStates = state.getCampaignStates({ isActive: true }) || {};
82+
const visitor = getOptimizelyXData('visitor');
83+
const visitorId = (visitor && visitor.visitorId && visitor.visitorId.toString()) || null;
84+
85+
return Object.keys(campaignStates).map((campaignId: string) => {
86+
const campaign = campaignStates[campaignId];
87+
const experimentId = campaign.experiment && campaign.experiment.id;
88+
const variationId = campaign.variation && campaign.variation.id;
89+
const variationName =
90+
(campaign.variation && campaign.variation.name && campaign.variation.name.toString()) || null;
91+
8592
return {
86-
experimentId: parseAndValidateInt(activeExperiment) || null,
93+
campaignId: parseAndValidateInt(campaignId) || null,
94+
experimentId: parseAndValidateInt(experimentId) || null,
8795
variationName: variationName,
8896
variation: parseAndValidateInt(variationId) || null,
8997
visitorId: visitorId,
@@ -100,7 +108,7 @@ export function OptimizelyXPlugin(): BrowserPlugin {
100108
function getOptimizelyXSummaryContexts() {
101109
return getOptimizelyXSummary().map(function (experiment) {
102110
return {
103-
schema: 'iglu:com.optimizely.optimizelyx/summary/jsonschema/1-0-0',
111+
schema: 'iglu:com.optimizely.optimizelyx/summary/jsonschema/1-1-0',
104112
data: experiment,
105113
};
106114
});
@@ -116,4 +124,4 @@ export function OptimizelyXPlugin(): BrowserPlugin {
116124
return [];
117125
},
118126
};
119-
}
127+
}

0 commit comments

Comments
 (0)