レスポンストークン
応答トークンを使用すると、Adobe Targetに固有の情報をブランドのweb ページに自動的に出力できます。 この情報には、アクティビティ、オファー、エクスペリエンス、ユーザープロファイル、位置情報などの詳細が含まれます。 これらの詳細は、内部またはサードパーティのツールと共有したり、デバッグに使用したりするための追加の応答データを提供します。
応答トークンを使用すると、(キー値のペアで)使用する変数を選択し、Target応答の一部として送信できるようにできます。 スイッチを使用して変数を有効にすると、変数はTarget応答で送信され、ネットワーク呼び出しで検証できます。 応答トークンは プレビュー モードでも機能します。
プラグインと応答トークンの重要な違いは、プラグインがJavaScriptを配信時に実行されるページに配信することです。 ただし、応答トークンは、イベントリスナーを使用して読み取りおよびアクションを実行できるオブジェクトを配信します。 応答トークンのアプローチはより安全で、サードパーティ統合の開発とメンテナンスが簡単になります。
at.jsを使用しているお客様は、応答トークンを使用し、プラグインから移動することをお勧めします。 mbox.js (現在は非推奨)に存在していたものの、at.jsには存在しない内部メソッドに依存する一部のプラグインは、配信されますが、失敗します。
応答トークンの使用 section_A9E141DDCBA84308926E68D05FD2AC62
-
Platform Web SDK バージョン 2.6.0 (またはそれ以降)またはat.js バージョン 1.1 (またはそれ以降)を使用していることを確認します。
詳細:
- Platform Web SDK: Platform Web SDKの概要 ガイドのSDKのインストール を参照してください。
- at.js: at.jsのダウンロードを参照してください。
-
Targetで、管理 > 応答トークンをクリックします。
-
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の配列を返します。 ユーザーが該当するたびに増分されます。 例えば、2つの異なるアクティビティを配信する2つのTarget リクエストを含むページでは、2番目のリクエストには両方のアクティビティが含まれます。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.nameactivity.idexperience.nameexperience.idoffer.nameoffer.id現在のアクティビティの詳細。
オファーパラメーターの値は、エクスペリエンスレベルで評価されます。地域 geo.countrygeo.countryCodegeo.stategeo.citygeo.zipgeo.dmageo.domainNamegeo.ispNamegeo.connectionSpeedgeo.mobileCarrierアクティビティでの地域ターゲティングについて詳しくは、地域を参照してください。 Traffic Allocation Method
(自動ターゲット およびAutomated Personalization アクティビティにのみ適用されます)experience.trafficAllocationId訪問者が「対象」トラフィックからエクスペリエンスを受け取った場合は0を返し、訪問者が「対象」トラフィック分布からエクスペリエンスを受け取った場合は1を返します。 experience.trafficAllocationType「control」または「targeted」を返します。 ユーザープロファイル属性と顧客属性もリストに表示されます。
note NOTE 特殊文字を含むパラメーターはリストに表示されません。 英数字とアンダースコアのみサポートされます。 -
(条件付き)プロファイルパラメーターを応答トークンとして使用しますが、パラメーターがTarget リクエストを通じて渡されていないため、Target UIに読み込まれていません。応答トークンを追加 ボタンを使用して、プロファイルをUIに追加できます。
「応答トークンを追加」をクリックし、トークン名を入力してから「アクティブ化」をクリックします。
-
アクティビティを作成します。
応答をリッスンし、応答トークンを読み取る
Target応答をリッスンし、応答トークンを読み取るために使用するプロセスは、Platform Web SDK実装とat.js実装のどちらを使用しているかによって異なります。
Handle オブジェクトクラスを使用する
Platform Web SDK platform-web-sdk
Target件の応答をリッスンして応答トークンを読み取るには、メタデータオブジェクトとデータオブジェクトを持つHandle オブジェクトクラスを使用します。
次のレスポンスの例では、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>
応答トークンに関するFAQ section_3DD5F32C668246289CDF9B4CDE1F536D
レスポンストークンを有効または無効にするには、どの役割が必要ですか?
応答トークンは、Target 管理者の役割を持つユーザーのみがアクティブ化または非アクティブ化できます。
2.6.0 (またはそれ以前)を実行している場合はどうなりますか?Platform Web SDK
応答トークンへのアクセス権がありません。
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は、トークンを自動的にオフにしません。 プロファイルスクリプトを削除し、このトークンの配信が不要になった場合は、手動でトークンを無効にする必要があります。
プロファイルスクリプトの名前を変更しましたが、そのスクリプトを使用しているトークンが変更前の名前のままで引き続き有効なのはなぜですか?
前述したように、レスポンストークンはユーザーの保存済みのプロファイル情報を基に機能します。 プロファイルスクリプトの名前を変更しても、web サイトを訪問したユーザーには、プロファイルに古いプロファイルスクリプトの値が保存されます。 トークンは、ユーザープロファイルにすでに保存されている古い値を引き続き取得します。 新しい名前でコンテンツを配信したい場合は、以前のトークンを無効にし、新しいトークンを有効にする必要があります。
属性が変更された場合、いつリストから削除されますか?
Targetは、属性の更新を定期的に実行します。 切り替えられていない属性は、次の更新時に削除されます。 ただし、オンに切り替えられ、削除された属性がある場合は、オフに切り替えるまで、そのスクリプトは属性リストから削除されません。 例えば、トークンとして使用されたプロファイルスクリプトを削除しました。 Targetは、切り替えられた属性が削除または名前が変更された場合にのみ、リストから削除します。
Google Analyticsへのデータ送信
以下の節では、Target データをGoogle Analytics 4に送信する方法について説明します。 応答トークンによって送信されたデータは、他の3rd パーティ統合にも送信できます。
Platform Web SDKを介してGoogle Analyticsにデータを送信する
Google Analyticsは、HTML ページに次のコードを追加することで、Platform Web SDK バージョン 2.6.0以降を介してデータを送信できます。
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 ページに追加することで、Google Analytics に at.js を介してデータを送信できます。
<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 プラグインと同等のものを使用したデバッグ
ttMeta プラグインと同様のデバッグ機能は、HTML ページに次のコードを追加することで作成できます。
<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に置き換えられています。