事件類型

本頁說明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存在,則為包含個人化主張物件的陣列。 陣列中包含的建議很大程度上是由事件傳送至伺服器的方式所決定。

對於第一個案例,假設您尚未核取轉譯決定核取方塊,且未在負責傳送事件的傳送事件動作中提供任何決定範圍。

img.png

在此範例中,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的視覺化體驗撰寫器中建立的任何內容)。 若要擷取任何符合自動轉譯資格的個人化內容​__,請使用傳送事件動作中的決定範圍欄位,提供決定範圍來要求內容。 範圍是字串,可識別您要從伺服器擷取的特定主張。

傳送事件動作如下所示:

img.png

在此範例中,如果在符合salutationdiscount範圍的伺服器上找到主張,則會傳回它們並包含在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元素。 請執行下列動作:

  1. event物件擷取主張。
  2. 重複每個主張,尋找範圍為discount的主張。
  3. 如果您找到主張,會在主張中的每個專案中進行回圈,尋找是HTML內容的專案。 (檢查勝於假設)。
  4. 如果您找到包含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自動轉譯的所有主張中收集所有活動名稱,並將其推入單一陣列中。 然後,您可以將單一陣列傳送給第三方。 在這種情況下,請在自訂程式碼動作中寫入自訂程式碼至:

  1. event物件擷取主張。
  2. 在每個主張中重複執行。
  3. 判斷SDK是否轉譯了主張。
  4. 若是如此,會重複檢查主張中的每個專案。
  5. meta屬性(包含回應Token的物件)擷取活動名稱。
  6. 將活動名稱推送至陣列。
  7. 將活動名稱傳送給第三方。
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.
}
recommendation-more-help
12b4e4a9-5028-4d88-8ce6-64a580811743