在網頁SDK中管理顯示事件
顯示事件可告訴個人化或分析服務,已向使用者顯示特定的個人化內容。 傳送顯示事件可協助下游系統區分 已要求 的內容與 實際顯示 的內容,以改善報表的正確性。
自動傳送顯示事件
自動顯示事件通常是最簡單的選項。 它們會在Web SDK從sendEvent回應中完成轉譯合格內容後立即傳送,這可改善報表準確性。
若要自動傳送顯示事件,請使用將sendEvent設為renderDecisions並將true設為personalization.sendDisplayEvent的true呼叫(或省略,因為true為預設值):
alloy("sendEvent", {
renderDecisions: true,
personalization: { }, // sendDisplayEvent defaults to true
xdm: {
web: {
webPageDetails: {
name: "home"
}
}
}
});
applyPropositions),您必須使用sendEvent明確傳送顯示事件。在後續sendEvent呼叫中傳送顯示事件
當您想要附加在要求個人化時無法使用的其他頁面載入資料時,在稍後的sendEvent呼叫中包含顯示事件會很有用。 常用於實作頂端和底部頁面事件。 以這種方式正確實作顯示事件有助於避免Adobe Analytics中的跳出率問題。
-
在初始
sendEvent呼叫(通常在頁面頂端)上,要求及轉譯內容,但透過將renderDecisions設定為true並將personalization.sendDisplayEvent設定為false來隱藏自動顯示事件:code language-js alloy("sendEvent", { renderDecisions: true, personalization: { sendDisplayEvent: false }, xdm: { web: { webPageDetails: { name: "home" } } } }); -
稍後(通常在頁面底部),使用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" } } } });
includeRenderedPropositions時,只會包含已隱藏顯示的自動演算主張。傳送手動呈現主張的顯示事件
如果您自行轉譯內容(完全手動轉譯或使用applyPropositions),您必須使用sendEvent命令明確傳送顯示事件。 使用包含下列屬性的XDM裝載呼叫sendEvent:
- 包含演算後主張'
_experience.decisioning.propositions、id和scope的scopeDetails _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命令。 它將sendEvent、applyPropositions然後另一個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。