使用Web SDK和Edge Network Server API的混合個人化
概觀 overview
Hybdrid個人化說明使用 Edge Network伺服器API,並在使用者端轉譯,使用 Web SDK.
您可以將混合式個人化與Adobe Target、Adobe Journey Optimizer或Offer Decisioning等個人化解決方案搭配使用,不同之處在於 伺服器API 裝載。
先決條件 prerequisites
在Web屬性上實作混合個人化之前,請確定您符合下列條件:
- 您已決定要使用的個人化解決方案。 這會對「 」的內容造成影響 伺服器API 裝載。
- 您有應用程式伺服器的存取權,您可以使用它來進行 伺服器API 呼叫。
- 您有權存取 Edge Network伺服器API.
- 您已正確設定 已設定 並在您要個人化的頁面上部署Web SDK。
流程圖 flow-diagram
以下流程圖說明傳遞混合個人化所採取步驟的順序。
- 之前由瀏覽器儲存的任何現有Cookie,前置詞為
kndctr_
,已包含在瀏覽器請求中。 - 使用者端網頁瀏覽器會向應用程式伺服器要求網頁。
- 應用程式伺服器收到頁面請求時,會發出
POST
要求給 伺服器API互動式資料收集端點 以擷取個人化內容。 此POST
請求包含event
和query
. 上個步驟的Cookie (若有)會包含在meta>state>entries
陣列。 - 伺服器API會將個人化內容傳回至您的應用程式伺服器。
- 應用程式伺服器傳回HTML回應給使用者端瀏覽器,其中包含 身分和叢集Cookie.
- 在使用者端頁面上, Web SDK
applyResponse
呼叫命令,傳入標題和內文的 伺服器API 上一步驟的回應。 - 此 Web SDK 轉譯Target Visual Experience Composer (VEC) 選件和Journey Optimizer Web Channel專案會自動執行,因為
renderDecisions
旗標已設定為true
. - Target表單式 HTML/JSON 選件和Journey Optimizer程式碼型體驗可透過以下方式手動套用:
applyProposition
方法,以更新 DOM 根據主張中的個人化內容。 - 針對Target表單式 HTML/JSON 選件和Journey Optimizer程式碼型體驗的顯示事件必須手動傳送,以指出已顯示傳回內容的時間。 這可透過以下方式完成
sendEvent
命令。
Cookie cookies
Cookie可用來儲存使用者身分和叢集資訊。 使用混合實作時,Web應用程式伺服器會在請求生命週期期間處理這些Cookie的儲存和傳送。
kndctr_AdobeOrg_identity
kndctr_AdobeOrg_cluster
請求刊登 request-placement
需要伺服器API要求才能取得主張並傳送顯示通知。 使用混合實作時,應用程式伺服器會向伺服器API提出這些要求。
分析影響 analytics
實施混合個人化時,您必須特別注意,才不會在Analytics中多次計算頁面點選。
當您 設定資料串流 對於Analytics,會自動轉送事件,以便擷取頁面點選。
此實作的範例使用兩個不同的資料串流:
- 為Analytics設定的資料串流。 此資料流用於Web SDK互動。
- 沒有Analytics設定的第二個資料串流。 此資料流用於伺服器API請求。 您必須使用與您為Analytics設定的資料流相同的目的地設定來設定此資料流。
如此一來,伺服器端要求不會註冊任何Analytics事件,但使用者端要求會註冊。 如此一來,Analytics請求就會被精確計算。
伺服器端要求 server-side-request
以下範例請求說明您的應用程式伺服器可用來擷取個人化內容的伺服器API請求。
API格式
POST /ee/v2/interact
請求 request
curl -X POST "https://edge.adobedc.net/ee/v2/interact?dataStreamId={DATASTREAM_ID}"
-H "Content-Type: text/plain"
-d '{
"event":{
"xdm":{
"web":{
"webPageDetails":{
"URL":"http://localhost/"
},
"webReferrer":{
"URL":""
}
},
"identityMap":{
"FPID":[
{
"id":"xyz",
"authenticatedState":"ambiguous",
"primary":true
}
]
},
"timestamp":"2022-06-23T22:21:00.878Z"
},
"data":{
}
},
"query":{
"identity":{
"fetch":[
"ECID"
]
},
"personalization":{
"schemas":[
"https://ns.adobe.com/personalization/default-content-item",
"https://ns.adobe.com/personalization/html-content-item",
"https://ns.adobe.com/personalization/json-content-item",
"https://ns.adobe.com/personalization/redirect-item",
"https://ns.adobe.com/personalization/dom-action"
],
"decisionScopes":[
"__view__",
"sample-json-offer"
]
}
},
"meta":{
"state":{
"domain":"localhost",
"cookiesEnabled":true,
"entries":[
{
"key":"kndctr_XXX_AdobeOrg_identity",
"value":"abc123"
},
{
"key":"kndctr_XXX_AdobeOrg_cluster",
"value":"or2"
}
]
}
}
}'
requestId
String
伺服器端回應 server-response
以下範例回應顯示伺服器API回應的外觀。
{
"requestId":"5c539bd0-33bf-43b6-a054-2924ac58038b",
"handle":[
{
"payload":[
{
"id":"XXX",
"namespace":{
"code":"ECID"
}
}
],
"type":"identity:result"
},
{
"payload":[
{
"..."
},
{
"..."
}
],
"type":"personalization:decisions",
"eventIndex":0
}
]
}
使用者端請求 client-request
在使用者端頁面上, Web SDK applyResponse
會呼叫命令,傳入伺服器端回應的標題和內文。
alloy("applyResponse", {
"renderDecisions": true,
"responseHeaders": {
"cache-control": "no-cache, no-store, max-age=0, no-transform, private",
"connection": "close",
"content-encoding": "deflate",
"content-type": "application/json;charset=utf-8",
"date": "Mon, 11 Jul 2022 19:42:01 GMT",
"server": "jag",
"strict-transport-security": "max-age=31536000; includeSubDomains",
"transfer-encoding": "chunked",
"vary": "Origin",
"x-adobe-edge": "OR2;9",
"x-content-type-options": "nosniff",
"x-konductor": "22.6.78-BLACKOUTSERVERDOMAINS:7fa23f82",
"x-rate-limit-remaining": "599",
"x-request-id": "5c539bd0-33bf-43b6-a054-2924ac58038b",
"x-xss-protection": "1; mode=block"
},
"responseBody": {
"requestId": "5c539bd0-33bf-43b6-a054-2924ac58038b",
"handle": [
{
"payload": [
{
"id": "XXX",
"namespace": {
"code": "ECID"
}
}
],
"type": "identity:result"
},
{
"payload": [
{...},
{...}
],
"type": "personalization:decisions",
"eventIndex": 0
}
]
}
}
).then(applyPersonalization("sample-json-offer"));
表單式 JSON 優惠方案是透過以下方式手動套用: applyPersonalization
方法,以更新 DOM 根據個人化選件。 針對表單式活動,必須手動傳送顯示事件,以指出何時已顯示選件。 這可透過以下方式完成 sendEvent
命令。
function sendDisplayEvent(decision) {
const { id, scope, scopeDetails = {} } = decision;
alloy("sendEvent", {
xdm: {
eventType: "decisioning.propositionDisplay",
_experience: {
decisioning: {
propositions: [
{
id: id,
scope: scope,
scopeDetails: scopeDetails,
},
],
},
},
},
});
}
範例應用程式 sample-app
為協助您實驗並深入瞭解這類個人化,我們提供範例應用程式,供您下載及用於測試。 您可以從這裡下載應用程式,以及有關如何使用的詳細說明 GitHub存放庫.