事件類型
本頁說明Adobe Experience Platform Web SDK標籤擴充功能提供的Adobe Experience Platform事件型別。 這些是用於建置規則,不應該與xdm
物件中的eventType
欄位混淆。
傳送事件完成
通常您的屬性會有一或多個規則使用傳送事件動作將事件傳送至Adobe Experience PlatformEdge Network。 每次將事件傳送至Edge Network時,系統都會將回應傳回至瀏覽器,其中包含有用的資料。 如果沒有傳送事件完成事件型別,您將無法存取此傳回的資料。
若要存取傳回的資料,請建立個別規則,然後新增傳送事件完成事件至規則。 每次因傳送事件動作而從伺服器收到成功回應時,就會觸發此規則。
當傳送事件完成事件觸發規則時,它會提供伺服器傳回的有助於完成特定工作的資料。 通常,您會將自訂程式碼動作(來自核心擴充功能)新增至包含傳送事件完成事件的相同規則。 在自訂程式碼動作中,您的自訂程式碼將可存取名為event
的變數。 此event
變數將包含伺服器傳回的資料。
您用於處理從Edge Network傳回之資料的規則可能如下所示:
以下是如何使用此規則中的自訂程式碼動作執行某些工作的範例。
手動呈現個人化內容
在自訂程式碼動作中(位於處理回應資料的規則中),您可以存取從伺服器傳回的個人化主張。 若要這麼做,您應輸入下列自訂程式碼:
var propositions = event.propositions;
如果event.propositions
存在,則為包含個人化主張物件的陣列。 陣列中包含的建議很大程度上是由事件傳送至伺服器的方式所決定。
對於第一個案例,假設您尚未核取轉譯決定核取方塊,且未在負責傳送事件的傳送事件動作中提供任何決定範圍。
在此範例中,propositions
陣列僅包含與事件相關的主張,這些主張符合自動轉譯的條件。
propositions
陣列可能類似於以下範例:
[
{
"id": "AT:eyJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ9",
"scope": "__view__",
"items": [
{
"id": "11223344",
"schema": "https://ns.adobe.com/personalization/dom-action",
"data": {
"content": "<h2 style=\"color: yellow\">An HTML proposition.</h2>",
"selector": "#hero",
"type": "setHtml"
},
"meta": {}
}
],
"renderAttempted": false
},
{
"id": "AT:PyJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ8",
"scope": "__view__",
"items": [
{
"id": "11223345",
"schema": "https://ns.adobe.com/personalization/dom-action",
"data": {
"content": "<h2 style=\"color: yellow\">Another HTML proposition.</h2>",
"selector": "#sidebar",
"type": "setHtml"
},
"meta": {}
}
],
"renderAttempted": false
}
]
傳送事件時,未勾選轉譯決策核取方塊,因此SDK不會嘗試自動轉譯任何內容。 不過,SDK仍會自動擷取符合自動轉譯資格的內容,並會在您想要時提供給您手動轉譯。 請注意,每個主張物件的renderAttempted
屬性都設定為false
。
如果您在傳送事件時改為勾選轉譯決定核取方塊,SDK就會嘗試轉譯任何符合自動轉譯資格的建議。 因此,每個主張物件都會將其renderAttempted
屬性設定為true
。 在此情況下,不需要手動轉譯這些主張。
到目前為止,您只檢視了符合自動轉譯資格的個人化內容(例如,在Adobe Target的視覺化體驗撰寫器中建立的任何內容)。 若要擷取任何符合自動轉譯資格的個人化內容__,請使用傳送事件動作中的決定範圍欄位,提供決定範圍來要求內容。 範圍是字串,可識別您要從伺服器擷取的特定主張。
傳送事件動作如下所示:
在此範例中,如果在符合salutation
或discount
範圍的伺服器上找到主張,則會傳回它們並包含在propositions
陣列中。 請注意,無論您在傳送事件動作中如何設定轉譯決定或決定範圍欄位,符合自動轉譯資格的主張將繼續包含在propositions
陣列中。 在此案例中,propositions
陣列看起來與此範例類似:
[
{
"id": "AT:cZJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ2",
"scope": "salutation",
"items": [
{
"schema": "https://ns.adobe.com/personalization/json-content-item",
"data": {
"id": "4433221",
"content": {
"salutation": "Welcome, esteemed visitor!"
}
},
"meta": {}
}
],
"renderAttempted": false
},
{
"id": "AT:FZJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ0",
"scope": "discount",
"items": [
{
"schema": "https://ns.adobe.com/personalization/html-content-item",
"data": {
"id": "4433222",
"content": "<div>50% off your order!</div>",
"format": "text/html"
},
"meta": {}
}
],
"renderAttempted": false
},
{
"id": "AT:eyJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ9",
"scope": "__view__",
"items": [
{
"id": "11223344",
"schema": "https://ns.adobe.com/personalization/dom-action",
"data": {
"content": "<h2 style=\"color: yellow\">An HTML proposition.</h2>",
"selector": "#hero",
"type": "setHtml"
},
"meta": {}
}
],
"renderAttempted": false
},
{
"id": "AT:PyJhY3Rpdml0eUlkIjoiMTI3MDE5IiwiZXhwZXJpZW5jZUlkIjoiMCJ8",
"scope": "__view__",
"items": [
{
"id": "11223345",
"schema": "https://ns.adobe.com/personalization/dom-action",
"data": {
"content": "<h2 style=\"color: yellow\">Another HTML proposition.</h2>",
"selector": "#sidebar",
"type": "setHtml"
},
"meta": {}
}
],
"renderAttempted": false
}
]
此時,您可以視需要演算主張內容。 在此範例中,符合discount
範圍的主張是使用Adobe Target的表單式體驗撰寫器建立的HTML主張。 假設您的頁面上有ID為daily-special
的元素,且想要將內容從discount
主張轉譯為daily-special
元素。 請執行下列動作:
- 從
event
物件擷取主張。 - 重複每個主張,尋找範圍為
discount
的主張。 - 如果您找到主張,會在主張中的每個專案中進行回圈,尋找是HTML內容的專案。 (檢查勝於假設)。
- 如果您找到包含HTML內容的專案,請在頁面上找到
daily-special
元素,並以個人化內容取代其HTML。
您在自訂程式碼動作中的自訂程式碼可能會顯示如下:
var propositions = event.propositions;
var discountProposition;
if (propositions) {
// Find the discount proposition, if it exists.
for (var i = 0; i < propositions.length; i++) {
var proposition = propositions[i];
if (proposition.scope === "discount") {
discountProposition = proposition;
break;
}
}
}
var discountHtml;
if (discountProposition) {
// Find the item from proposition that should be rendered.
// Rather than assuming there a single item that has HTML
// content, find the first item whose schema indicates
// it contains HTML content.
for (var j = 0; j < discountProposition.items.length; j++) {
var discountPropositionItem = discountProposition.items[i];
if (discountPropositionItem.schema === "https://ns.adobe.com/personalization/html-content-item") {
discountHtml = discountPropositionItem.data.content;
break;
}
}
}
if (discountHtml) {
// Discount HTML exists. Time to render it.
var dailySpecialElement = document.getElementById("daily-special");
dailySpecialElement.innerHTML = discountHtml;
}
存取Adobe Target回應Token
從Adobe Target傳回的Personalization內容包含回應Token,其為有關活動、選件、體驗、使用者設定檔、地理資訊等的詳細資料。 這些詳細資料可與協力廠商工具共用或用於偵錯。 回應Token可在Adobe Target使用者介面中設定。
在自訂程式碼動作中(位於處理回應資料的規則中),您可以存取從伺服器傳回的個人化主張。 若要這麼做,請輸入下列自訂程式碼:
var propositions = event.propositions;
如果event.propositions
存在,則為包含個人化主張物件的陣列。 如需有關result.propositions
內容的詳細資訊,請參閱手動轉譯個人化內容。
假設您想從Web SDK自動轉譯的所有主張中收集所有活動名稱,並將其推入單一陣列中。 然後,您可以將單一陣列傳送給第三方。 在這種情況下,請在自訂程式碼動作中寫入自訂程式碼至:
- 從
event
物件擷取主張。 - 在每個主張中重複執行。
- 判斷SDK是否轉譯了主張。
- 若是如此,會重複檢查主張中的每個專案。
- 從
meta
屬性(包含回應Token的物件)擷取活動名稱。 - 將活動名稱推送至陣列。
- 將活動名稱傳送給第三方。
var propositions = event.propositions;
if (propositions) {
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.
}