响应令牌
响应令牌允许您自动将特定于Adobe Target的信息输出到品牌网页。 此信息可以包括有关活动、选件、体验、用户配置文件、地理信息等的详细信息。 这些详细信息提供了额外的响应数据,可用于与内部或第三方工具共享或用于调试。
响应令牌允许您选择要使用的变量(在键值对中),然后启用它们作为Target响应的一部分发送。 您使用开关启用一个变量,该变量将随Target响应一起发送,这可以在网络调用中验证。 响应令牌也可在Preview模式下使用。
插件和响应令牌之间的主要区别在于,插件可以将JavaScript交付到在交付时执行的页面。 但是,响应令牌会传递一个对象,然后可以使用事件侦听器读取该对象并对其执行操作。 响应令牌方法更安全,并且允许更轻松地开发和维护第三方集成。
我们鼓励使用 at.js 的客户使用响应令牌而不是插件。某些插件依赖的内部方法在mbox.js中存在(现已弃用),但在at.js中不存在;这些插件虽然可以交付,但却会失败。
使用响应令牌 section_A9E141DDCBA84308926E68D05FD2AC62
-
确保您使用的是Platform Web SDK版本2.6.0(或更高版本)或者at.js版本1.1(或更高版本)。
有关更多信息:
-
在Target中,单击 Administration > Response Tokens。
-
激活所需的响应令牌,如
activity.id
和offer.id
。以下参数默认可用:
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 7-row-3 8-row-3 9-row-3 10-row-3 11-row-3 12-row-3 13-row-3 类型 参数 注释 内置配置文件 profile.activeActivities
返回该访客符合条件的 activityIds
数组。它会随着符合条件的用户数量的增加而递增。例如,在包含两个交付两个不同活动的Target请求的页面上,第二个请求包含这两个活动。profile.isFirstSession
返回“true”或“false”。 profile.isNewSession
返回“true”或“false”。 profile.daysSinceLastVisit
返回自该访客上次访问后已过的天数。 profile.tntId
返回访客的 tntID profile.marketingCloudVisitorId
返回访客的 Experience Cloud 访客 ID。 profile.thirdPartyId
返回访客的第三方 ID。 profile.categoryAffinity
返回访客最喜欢的类别。 profile.categoryAffinities
将该访客排名前 5 的类别的数组作为字符串返回。 活动 activity.name
activity.id
experience.name
experience.id
offer.name
offer.id
当前活动的详细信息。
请注意,优惠参数的值是在体验级别上评估的。地域 geo.country
geo.state
geo.city
geo.zip
geo.dma
geo.domainName
geo.ispName
geo.connectionSpeed
geo.mobileCarrier
请参阅地域以了解在活动中使用地域定位的详细信息。 流量分配方法
(仅适用于Auto-Target和Automated Personalization活动。)experience.trafficAllocationId
如果访客因处于“control”流量中而获得体验,则返回0;如果访客从“targeted”流量分配获得体验,则返回1。 experience.trafficAllocationType
返回“control”或“targeted”。 用户配置文件属性和客户属性也会显示在列表中。
note note NOTE 包含特殊字符的参数不会显示在列表中。只支持字母数字字符和下划线。 -
(视情况而定)要将配置文件参数用作响应令牌,但该参数尚未通过Target请求传递,因此尚未加载到Target UI中,您可以使用Add Response Token按钮将该配置文件添加到UI。
单击 Add Response Token,提供令牌名称,然后单击 Activate。
-
创建一个活动。
侦听响应并读取响应令牌
根据您是Platform Web SDK还是at.js实施,用于侦听Target响应和读取响应令牌的进程会有所不同。
使用Handle对象类的 Platform Web SDK platform-web-sdk
使用Handle对象类,该对象类具有元数据对象和数据对象,用于侦听Target响应并读取响应令牌。
以下响应示例将Platform Web SDK自定义事件处理程序直接添加到HTML页面(该表说明了代码中使用的对象):
<html>
<head>
...
<script src="alloy.js"></script>
<script>
{
"requestId": "4d0a7cfd-952c-408c-b3b8-438edc38250a",
"handle": [{
"type": "personalization:decisions",
"payload": [{
"id": "....",
"scope": "__view__",
"scopeDetails": {
"decisionProvider": "TGT",
"activity": {
"id": "..."
},
"experience": {
"id": "...."
}
},
"items": [{
"id": "123",
"schema": "https://ns.adobe.com/personalization/dom-action",
"meta": {
"activity.id": "...",
"activity.name": "...",
"profile.foo": "...",
"profile.bar": "..."
},
"data": {
"id": "123",
"type": "setHtml",
"selector": "#foo",
"prehidingSelector": "#foo",
"content": "<div>Hello world</div>"
}
}]
}]
}]
}
});
</script>
</head>
<body>
...
</body>
</html>
使用自定义事件的 at.js
使用at.js自定义事件监听Target响应并读取响应令牌。
以下代码示例可将一个 at.js 自定义事件处理程序直接添加到 HTML 页面:
<html>
<head>
....
<script src="at.js"></script>
<script>
document.addEventListener(adobe.target.event.REQUEST_SUCCEEDED, function(e) {
console.log("Request succeeded", e.detail);
});
</script>
<head>
<body>
...
</body>
</html>
响应令牌常见问题解答 section_3DD5F32C668246289CDF9B4CDE1F536D
激活或停用响应令牌需要使用哪个角色?
响应令牌只能由具有Target Administrator角色的用户激活或停用。
如果我运行的是Platform Web SDK 2.6.0(或更早版本),会发生什么情况?
您无权访问响应令牌。
如果我运行的是at.js 1.0(或更早版本),会发生什么情况?
您可以看到响应令牌,但at.js不能使用它们。
我是否可以同时使Target Classic插件和响应令牌处于活动状态?
插件和响应令牌可并行使用;但是,未来将弃用插件。
响应令牌是通过所有Target响应还是仅通过Target响应交付活动?
响应令牌仅通过交付活动的Target响应来交付。
我的Target Classic插件包含JavaScript。 如何使用响应令牌复制其功能?
迁移到响应令牌时,必须将此类型的JavaScript保留在代码库或标签管理解决方案中。 您可以使用Platform Web SDK或at.js自定义事件触发此代码,并将响应令牌值传递给您的JavaScript函数。
为什么我的配置文件/客户属性参数不会显示在响应令牌列表中?
Target通常每15分钟刷新一次参数。 此刷新取决于用户操作,仅当查看响应令牌页面时才刷新数据。 如果您的参数未显示在响应令牌列表中,Target尚未刷新数据。
此外,如果参数包含非字母数字字符或下划线以外的任何符号,则该参数不会出现在列表中。 目前,仅支持字母数字和下划线字符。
如果响应令牌使用已删除的配置文件脚本或配置文件参数,它是否仍会交付内容?
响应令牌从用户配置文件中提取信息,然后交付该信息。如果删除配置文件脚本或参数,并不意味着该信息已从用户配置文件中删除。用户配置文件仍然具有与配置文件脚本对应的数据。 响应令牌将继续交付内容。 对于未在配置文件中保存该信息的用户或者新访客,不会交付该令牌,因为数据不存在于其配置文件中。
Target不会自动关闭令牌。 如果您要删除配置文件脚本并且不再希望交付该令牌,则必须自行关闭该令牌。
我重命名了我的配置文件脚本,但为什么使用该脚本的令牌仍使用旧名称?
如上所述,响应令牌处理的是为用户保存的配置文件信息。即使您重命名了配置文件脚本,但访问过您网站的用户会在其配置文件中保存旧的配置文件脚本值。 令牌会继续选取已保存在用户配置文件中的旧值。 如果您现在想要以新名称交付内容,则必须关闭以前的令牌,然后打开新令牌。
如果我的属性已更改,何时将其从列表中移除?
Target定期执行属性刷新。 任何未切换的属性将在下次刷新时删除。 但是,如果您具有已打开并已删除的属性,则在将其关闭之前,不会将该脚本从属性列表中删除。 例如,您删除了用作令牌的配置文件脚本。 删除或重命名Target时,只从列表中删除已切换的属性。
向Google Analytics发送数据
以下各节介绍如何将Target数据发送到Google Analytics4。 由响应令牌发送的数据也可以发送到其他第三方集成。
通过Platform Web SDK向Google Analytics发送数据
通过在HTML页面中添加以下代码,可以通过Platform Web SDK版本2.6.0(或更高版本)发送Google Analytics数据。
alloy("sendEvent"
对象下。<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script type="text/javascript">
alloy("sendEvent", {
})
.then(({ renderedPropositions, nonRenderedPropositions }) => {
// concatenate all the propositions
const propositions = [...renderedPropositions, ...nonRenderedPropositions];
// extractResponseTokens() extract the meta from item -> meta
const tokens = extractResponseTokens(propositions);
const activityNames = [];
const experienceNames = [];
const uniqueTokens = distinct(tokens);
uniqueTokens.forEach(token => {
activityNames.push(token["activity.name"]);
experienceNames.push(token["experience.name"]);
});
gtag('config', 'TAG_ID');
gtag('event', 'action_name', {'eventCategory': 'target',
'eventAction': experienceNames, 'eventLabel': activityNames
});
});
</script>
通过at.js向Google Analytics发送数据 section_04AA830826D94D4EBEC741B7C4F86156
通过在 HTML 页面中添加以下代码,即可通过 at.js 向 Google Analytics 发送数据:
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script type="text/javascript">
document.addEventListener(adobe.target.event.REQUEST_SUCCEEDED, function(e) {
var tokens = e.detail.responseTokens;
if (isEmpty(tokens)) {
return;
}
var activityNames = [];
var experienceNames = [];
var uniqueTokens = distinct(tokens);
uniqueTokens.forEach(function(token) {
activityNames.push(token["activity.name"]);
experienceNames.push(token["experience.name"]);
});
gtag('config', 'TAG_ID');
gtag('event', 'action_name', {'eventCategory': 'target',
'eventAction': experienceNames, 'eventLabel': activityNames
});
});
function isEmpty(val) {
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
function key(obj) {
return Object.keys(obj)
.map(function(k) { return k + "" + obj[k]; })
.join("");
}
function distinct(arr) {
var result = arr.reduce(function(acc, e) {
acc[key(e)] = e;
return acc;
}, {});
return Object.keys(result)
.map(function(k) { return result[k]; });
}
</script>
调试
以下部分提供了有关调试响应令牌的信息:
Google Analytics和调试
以下代码允许您使用Google Analytics进行调试:
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script type="text/javascript">
document.addEventListener(adobe.target.event.REQUEST_SUCCEEDED, function(e) {
var tokens = e.detail.responseTokens;
if (isEmpty(tokens)) {
return;
}
var activityNames = [];
var experienceNames = [];
var uniqueTokens = distinct(tokens);
uniqueTokens.forEach(function(token) {
activityNames.push(token["activity.name"]);
experienceNames.push(token["experience.name"]);
});
gtag('config', 'TAG_ID');
gtag('event', 'action_name', {'eventCategory': 'target',
'eventAction': experienceNames, 'eventLabel': activityNames
});
});
function isEmpty(val) {
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
function key(obj) {
return Object.keys(obj)
.map(function(k) { return k + "" + obj[k]; })
.join("");
}
function distinct(arr) {
var result = arr.reduce(function(acc, e) {
acc[key(e)] = e;
return acc;
}, {});
return Object.keys(result)
.map(function(k) { return result[k]; });
}
</script>
使用ttMeta插件的等效插件进行调试
通过向 HTML 页面添加以下代码,可以创建与 ttMeta 插件等效的调试工具:
<script type="text/javascript" >
document.addEventListener(adobe.target.event.REQUEST_SUCCEEDED, function (e) {
window.ttMETA= typeof(window.ttMETA)!="undefined" ? window.ttMETA : [];
var tokens=e.detail.responseTokens;
if (isEmpty(tokens)) {
return;
}
var uniqueTokens = distinct(tokens);
uniqueTokens.forEach(function(token) {
window.ttMETA.push({
'CampaignName': token["activity.name"],
'CampaignId' : token["activity.id"],
'RecipeName': token["experience.name"],
'RecipeId': token["experience.id"],
'OfferId': token["offer.id"],
'OfferName': token["offer.name"],
'MboxName': e.detail.mbox});
console.log(ttMETA);
});
});
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
function key(obj) {
return Object.keys(obj)
.map(function(k) { return k + "" + obj[k]; })
.join("");
}
function distinct(arr) {
var result = arr.reduce(function(acc, e) {
acc[key(e)] = e;
return acc;
}, {});
return Object.keys(result)
.map(function(k) { return result[k]; });
}
</script>
培训视频:响应令牌和at.js自定义事件 section_3AA0A6C8DBD94A528337A2525E3E05D5
以下视频介绍如何使用响应令牌和at.js自定义事件将Target中的配置文件信息共享到第三方系统。
option.name
和option.id
,它们已分别替换为offer.name
和offer.id
。