Skip to content
6 changes: 6 additions & 0 deletions core-api/src/main/java/com/optimizely/ab/Optimizely.java
Original file line number Diff line number Diff line change
Expand Up @@ -1303,6 +1303,8 @@ private OptimizelyDecision createOptimizelyDecision(
ProjectConfig projectConfig
) {
String userId = user.getUserId();
String experimentId = null;
String variationId = null;

Boolean flagEnabled = false;
if (flagDecision.variation != null) {
Expand Down Expand Up @@ -1336,6 +1338,8 @@ private OptimizelyDecision createOptimizelyDecision(


Boolean decisionEventDispatched = false;
experimentId = flagDecision.experiment != null ? flagDecision.experiment.getId() : null;
variationId = flagDecision.variation != null ? flagDecision.variation.getId() : null;

Map<String, Object> attributes = user.getAttributes();
Map<String, ?> copiedAttributes = new HashMap<>(attributes);
Expand All @@ -1362,6 +1366,8 @@ private OptimizelyDecision createOptimizelyDecision(
.withRuleKey(ruleKey)
.withReasons(reasonsToReport)
.withDecisionEventDispatched(decisionEventDispatched)
.withExperimentId(experimentId)
.withVariationId(variationId)
.build();
notificationCenter.send(decisionNotification);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,8 @@ public static class FlagDecisionNotificationBuilder {
public final static String RULE_KEY = "ruleKey";
public final static String REASONS = "reasons";
public final static String DECISION_EVENT_DISPATCHED = "decisionEventDispatched";
public final static String EXPERIMENT_ID = "experimentId";
public final static String VARIATION_ID = "variationId";

private String flagKey;
private Boolean enabled;
Expand All @@ -374,6 +376,8 @@ public static class FlagDecisionNotificationBuilder {
private String ruleKey;
private List<String> reasons;
private Boolean decisionEventDispatched;
private String experimentId;
private String variationId;

private Map<String, Object> decisionInfo;

Expand Down Expand Up @@ -422,6 +426,16 @@ public FlagDecisionNotificationBuilder withDecisionEventDispatched(Boolean dispa
return this;
}

public FlagDecisionNotificationBuilder withExperimentId(String experimentId) {
this.experimentId = experimentId;
return this;
}

public FlagDecisionNotificationBuilder withVariationId(String variationId) {
this.variationId = variationId;
return this;
}

public DecisionNotification build() {
if (flagKey == null) {
throw new OptimizelyRuntimeException("flagKey not set");
Expand All @@ -439,6 +453,8 @@ public DecisionNotification build() {
put(RULE_KEY, ruleKey);
put(REASONS, reasons);
put(DECISION_EVENT_DISPATCHED, decisionEventDispatched);
put(EXPERIMENT_ID, experimentId);
put(VARIATION_ID, variationId);
}};

return new DecisionNotification(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,8 @@ public void decisionNotification() {
OptimizelyJSON variables = optimizely.getAllFeatureVariables(flagKey, userId);
String ruleKey = "exp_no_audience";
List<String> reasons = Collections.emptyList();
String experimentId = "10420810910";
String variationId = "10418551353";

final Map<String, Object> testDecisionInfoMap = new HashMap<>();
testDecisionInfoMap.put(FLAG_KEY, flagKey);
Expand All @@ -715,6 +717,8 @@ public void decisionNotification() {
testDecisionInfoMap.put(VARIABLES, variables.toMap());
testDecisionInfoMap.put(RULE_KEY, ruleKey);
testDecisionInfoMap.put(REASONS, reasons);
testDecisionInfoMap.put(EXPERIMENT_ID, experimentId);
testDecisionInfoMap.put(VARIATION_ID, variationId);

Map<String, Object> attributes = Collections.singletonMap("gender", "f");
OptimizelyUserContext user = optimizely.createUserContext(userId, attributes);
Expand Down
Loading