在網頁SDK中管理顯示事件

顯示事件可告訴個人化或分析服務,已向使用者顯示特定的個人化內容。 傳送顯示事件可協助下游系統區分​ 已要求 ​的內容與​ 實際顯示 ​的內容,以改善報表的正確性。

自動傳送顯示事件

自動顯示事件通常是最簡單的選項。 它們會在Web SDK從sendEvent回應中完成轉譯合格內容後立即傳送,這可改善報表準確性。

若要自動傳送顯示事件,請使用將sendEvent設為renderDecisions並將true設為personalization.sendDisplayEventtrue呼叫(或省略,因為true為預設值):

alloy("sendEvent", {
  renderDecisions: true,
  personalization: { }, // sendDisplayEvent defaults to true
  xdm: {
    web: {
      webPageDetails: {
        name: "home"
      }
    }
  }
});
NOTE
自動顯示事件取決於SDK管理的轉譯。 如果您手動轉譯內容(包括使用applyPropositions),您必須使用sendEvent明確傳送顯示事件。

在後續sendEvent呼叫中傳送顯示事件

當您想要附加在要求個人化時無法使用的其他頁面載入資料時,在稍後的sendEvent呼叫中包含顯示事件會很有用。 常用於實作頂端和底部頁面事件。 以這種方式正確實作顯示事件有助於避免Adobe Analytics中的跳出率問題。

  1. 在初始sendEvent呼叫(通常在頁面頂端)上,要求及轉譯內容,但透過將renderDecisions設定為true並將personalization.sendDisplayEvent設定為false來隱藏自動顯示事件:

    code language-js
    alloy("sendEvent", {
      renderDecisions: true,
      personalization: { sendDisplayEvent: false },
      xdm: {
        web: {
          webPageDetails: {
             name: "home"
          }
        }
      }
    });
    
  2. 稍後(通常在頁面底部),使用XDM裝載呼叫sendEvent,該裝載包含自上次要求以來透過將personalization.includeRenderedPropositions設定為true所轉譯之主張的顯示事件:

    code language-js
    alloy("sendEvent", {
      personalization: { includeRenderedPropositions: true },
      xdm: {
        // Add any additional page load telemetry you want to send here
        web: {
          webPageDetails: {
            name: "home"
          }
        }
      }
    });
    
NOTE
使用includeRenderedPropositions時,只會包含已隱藏顯示的自動演算主張。

傳送手動呈現主張的顯示事件

如果您自行轉譯內容(完全手動轉譯或使用applyPropositions),您必須使用sendEvent命令明確傳送顯示事件。 使用包含下列屬性的XDM裝載呼叫sendEvent

  • 包含演算後主張' _experience.decisioning.propositionsidscopescopeDetails
  • _experience.decisioning.propositionEventType.display已設定為1

以下兩個範例使用此協助程式函式來建置顯示事件XDM裝載:

function buildDisplayEventXdm(renderedPropositions) {
  return {
    eventType: "decisioning.propositionDisplay",
    _experience: {
      decisioning: {
        propositions: renderedPropositions.map(({ id, scope, scopeDetails }) => ({
          id,
          scope,
          scopeDetails
        })),
        propositionEventType: { display: 1 }
      }
    }
  };
}

下列範例使用顯示事件的手動呈現:

function renderExample(propositions) {
  // Your custom logic here. Return ONLY the propositions that were actually rendered.
  // For example: return [propositions[0]];
  return [];
}

alloy("sendEvent", {
  personalization: { decisionScopes: ["discount"] },
  xdm: { }
}).then(({ propositions = [] }) => {
  const renderedPropositions = renderExample(propositions);
  if (!renderedPropositions.length) { return; }
  return alloy("sendEvent", { xdm: buildDisplayEventXdm(renderedPropositions) });
});

下列範例使用具有顯示事件的applyPropositions命令。 它將sendEventapplyPropositions然後另一個sendEvent連結在一起:

alloy("sendEvent", {
  personalization: { decisionScopes: ["discount", "salutation"] },
  xdm: { }
}).then(({ propositions = [] }) => {
  return alloy("applyPropositions", {
    propositions,
    metadata: {
      salutation: { selector: "#salutation", actionType: "setHtml" },
      discount: { selector: "#daily-special", actionType: "replaceHtml" }
    }
  });
}).then(({ propositions: renderedPropositions = [] }) => {
  if (!renderedPropositions.length) { return; }
  return alloy("sendEvent", { xdm: buildDisplayEventXdm(renderedPropositions) });
});

要避免的常見錯誤

  • 在轉譯完成前傳送顯示事件:在自動轉譯完成之後、applyPropositions解析之後,或手動轉譯邏輯完成之後,傳送顯示事件。
  • 傳送您未呈現之主張的顯示事件:僅包含實際顯示給使用者的主張。
  • 正在卸除scopeDetails:傳送顯示事件時從主張物件包含scopeDetails
recommendation-more-help
1ae86b30-e55e-49c1-ab11-9d0356a5f3e1