Accessing response tokens
Personalization content returned from ÃÛ¶¹ÊÓƵ Target includes response tokens, which are details about the activity, offer, experience, user profile, geo information, and more. These details can be shared with third-party tools or used for debugging. Response tokens can be configured in the ÃÛ¶¹ÊÓƵ Target user interface.
To access any personalization content, provide a callback function when sending an event. This callback will be called after the SDK receives a successful response from the server. Your callback will be provided a result
object, which may contain a propositions
property containing any returned personalization content. Below is an example of providing a callback function.
alloy("sendEvent", {
renderDecisions: true,
xdm: {}
}).then(function(result) {
if (result.propositions) {
// Manually render propositions
}
});
In this example, result.propositions
, if it exists, is an array containing personalization propositions related to the event. Please see Rendering personalization content for more information on the content of result.propositions
.
Assume you want to gather all activity names from all propositions that were automatically rendered by the web SDK and push them into a single array. You could then send the single array to a third party. In this case:
- Extract propositions from the
result
object. - Loop through each proposition.
- Determine if the SDK rendered the proposition.
- If so, loop through each item in the proposition.
- Retrieve the activity name from the
meta
property, which is an object containing response tokens. - Push the activity name into an array.
- Send the activity names to a third party.
Your code would look as follows:
alloy("sendEvent", {
renderDecisions: true,
xdm: {}
}).then(function(result) {
var activityNames = [];
propositions.forEach(function(proposition) {
if (proposition.renderAttempted) {
proposition.items.forEach(function(item) {
if (item.meta) {
// item.meta contains the response tokens.
var activityName = item.meta["activity.name"];
// Ignore duplicates
if (activityNames.indexOf(activityName) === -1) {
activityNames.push(activityName);
}
}
});
}
});
// Now that activity names are in an array,
// you can send them to a third party or use
// them in some other way.
});