响应令牌允许您自动输出特定于 Adobe Target 到您品牌的网页。 此信息可以包括有关活动、选件、体验、用户配置文件、地理信息等的详细信息。 这些详细信息提供了额外的响应数据,可用于与内部或第三方工具共享或用于调试。
响应令牌允许您选择要使用的变量(在键值对中),然后启用它们作为的一部分发送 Target 响应。 使用开关启用变量,该变量将发送给 Target 响应,这可以在网络调用中进行验证。 响应令牌也适用于 预览 模式。
插件和响应令牌之间的主要区别在于,插件可将JavaScript交付到在交付时执行的页面。 但是,响应令牌会传递一个对象,然后可以使用事件侦听器读取该对象并对其执行操作。 响应令牌方法更安全,并且允许更轻松地开发和维护第三方集成。
at.js版本1.1或更高版本中有响应令牌可用。
Target SDK | 建议的操作 |
---|---|
Adobe Experience Platform Web SDK | 确保您使用的是Platform Web SDK版本2.6.0或更高版本。 有关下载最新版Platform Web SDK的信息,请参阅 安装SDK 在 Platform Web SDK概述 指南。 有关Platform Web SDK各个版本中新增功能的信息,请参阅 发行说明 在 Platform Web SDK概述 指南。 |
at.js | 确保您使用的是 at.js 版本 1.1 或更高版本。有关下载最新版本at.js的信息,请参阅 下载at.js. For information about new functionality in each version of at.js, see at.js Version Details. 我们鼓励使用 at.js 的客户使用响应令牌而不是插件。某些插件依赖的内部方法在mbox.js中存在(现已弃用),但在at.js中不存在;这些插件虽然可以交付,但却会失败。 |
确保您使用的是Platform Web SDK版本2.6.0(或更高版本)或者at.js版本1.1(或更高版本)。
有关更多信息:
在 Target,单击 管理 > 响应令牌.
激活所需的响应令牌,例如 activity.id
和 offer.id
.
以下参数默认可用:
类型 | 参数 | 注释 |
---|---|---|
内置配置文件 | 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 |
请参阅地域以了解在活动中使用地域定位的详细信息。 |
流量分配方法 (适用于 自动定位 和 Automated Personalization 仅限活动。) |
experience.trafficAllocationId |
如果访客因处于“control”流量中而获得体验,则返回0;如果访客从“targeted”流量分配获得体验,则返回1。 |
experience.trafficAllocationType |
返回“control”或“targeted”。 |
用户配置文件属性和客户属性也会显示在列表中。
包含特殊字符的参数不会显示在列表中。只支持字母数字字符和下划线。
(视情况而定)使用配置文件参数作为响应令牌,但参数尚未通过 Target 请求,因此未加载到 Target UI,您可以使用 添加响应令牌 按钮以将配置文件添加到UI。
单击 添加响应令牌,提供令牌名称,然后单击 激活.
创建一个活动。
您用来侦听的进程 Target 根据您是否拥有 Platform Web SDK 或at.js实施。
使用Handle对象类,该类具有要侦听的元数据对象和数据对象 Target 响应并读取响应令牌。
以下响应示例添加了 Platform Web SDK 直接访问“HTML”页的自定义事件处理程序(该表说明了代码中使用的对象):
对象 | 信息 |
---|---|
类型 — Personalization.decision | 该决定是否由 Target 或Offer decisioning提供商。 |
DecisionProvider - TGT | TGT-Target. Target 为页面提供响应令牌元数据和值。 |
Meta | 传递到页面的元数据。 |
数据 | 传递到页面的元数据的值。 |
<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 自定义事件来监听 响应并读取响应令牌。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>
激活或停用响应令牌需要使用哪个角色?
响应令牌只能由具有以下特性的用户激活或停用: Target 管理员 角色。
如果我跑了怎么办 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如果删除或重命名属性, 只会从列表中删除已关闭的属性。
以下各节介绍如何发送 Target 数据到Google Analytics4. 由响应令牌发送的数据也可以发送到其他第三方集成。
通过在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>
通过在 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进行调试:
<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>
通过向 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自定义事件从共享配置文件信息 Target 到第三方系统。
Target管理 菜单 UI(以前的设置)经过重新设计,以提供更好的性能、减少发布新功能时所需的维护时间并改善整个产品的用户体验。以下视频中的信息正确;但是,选项的位置略有不同。
视频提及 option.name
和 option.id
,已替换为 offer.name
和 offer.id
、ID名称和ID名称等。