本页介绍了Server SDK sendEvent方法中的personalization。 对于Web SDK,请参阅personalization.
sendEvent的personalization对象从Adobe Target、Adobe Journey Optimizer和Offer Decisioning请求个性化决策,也称为建议。 服务器SDK在sendEvent的结果中返回建议,以便您的服务器可以使用这些建议或将它们传递给浏览器。
const { propositions = [] } = await visitor.sendEvent({
xdm: {
eventType: "decisioning.propositionFetch",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
},
personalization: {
decisionScopes: ["hero-banner"],
surfaces: ["web://example.com/home"]
}
});
仅当实例包含createInstance默认包含的Personalization组件时,此选项才可用。
personalization.decisionScopes
decisionScopes属性是一个字符串数组。 每个项目都标识您希望个性化内容所在的位置、上下文或版面。 在Adobe Target中,每个决策范围都映射到mbox。 在Adobe Journey Optimizer和Offer Decisioning中,每个决策范围都映射到一个基于决策的投放位置。
personalization: {
decisionScopes: ["hero-banner", "cart-offer"]
}
personalization.surfaces
surfaces属性是表面URI字符串的数组。 每个表面都标识了您希望为其提供基于代码的Adobe Journey Optimizer体验的渠道、页面或组件,例如web://example.com/home或web://example.com/home#hero。
personalization: {
surfaces: ["web://example.com/home", "web://example.com/home#hero"]
}
在浏览器中,Web SDK自动请求当前页面的界面。 服务器没有当前页面,因此服务器SDK仅请求您列出的表面。 同样,SDK在呈现页面时,不会自动请求Web SDK请求的页面范围决策范围。
顶级decisionScopes top-level-decision-scopes
您还可以在personalization对象外的sendEvent选项的顶级的decisionScopes数组中传递决策范围。 SDK将两个数组组合在一起,并删除重复项。
await visitor.sendEvent({
xdm: {
eventType: "decisioning.propositionFetch",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
},
decisionScopes: ["hero-banner"]
});
结果中的建议 result
当您请求个性化时,sendEvent的结果包含propositions数组。 每个建议都包含一个id、scope、scopeDetails和一个items数组。 每个项目都有一个描述其内容的schema,例如HTML、JSON或DOM操作。
SDK不呈现建议,也不会记录这些建议是否显示。 通过以下方式之一使用它们:
- 在浏览器中渲染它们。 在服务器返回的页面中包含建议,然后将它们传递给Web SDK
applyPropositions命令以呈现这些建议。 然后记录哪些建议与显示事件一起显示。 请参阅混合个性化。 - 在服务器上渲染它们。 使用每个项目的内容构建您的响应。 然后,通过发送显示事件来记录您显示的建议:
await visitor.sendEvent({
xdm: {
eventType: "decisioning.propositionDisplay",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
},
_experience: {
decisioning: {
propositions: renderedPropositions.map(({ id, scope, scopeDetails }) => ({
id,
scope,
scopeDetails
})),
propositionEventType: { display: 1 }
}
}
}
});
对服务器没有影响的选项 no-effect
SDK接受以下属性,以便您可以在浏览器实现中共享代码,但会忽略这些属性:
personalization.sendDisplayEventpersonalization.includeRenderedPropositionspersonalization.defaultPersonalizationEnabledpersonalization.decisionContext
sendEvent的renderDecisions选项也无效,因为SDK从不呈现内容。