La personalizzazione ibrida descrive il processo di recupero del contenuto di personalizzazione lato server tramite l’ API server di rete Edge, e eseguirne il rendering lato client, utilizzando SDK per web.
Puoi utilizzare la personalizzazione ibrida con soluzioni di personalizzazione come Adobe Target o Offer Decisioning, con la differenza che i contenuti sono API server carico utile.
Prima di implementare la personalizzazione ibrida sulle proprietà web, assicurati di soddisfare le seguenti condizioni:
Il diagramma di flusso seguente descrive l’ordine dei passaggi effettuati per distribuire la personalizzazione ibrida.
kndctr_
, sono inclusi nella richiesta del browser.POST
richiesta al Endpoint di raccolta dati interattivi API server per recuperare il contenuto della personalizzazione. La POST
la richiesta contiene un event
e query
. I cookie del passaggio precedente, se disponibili, sono inclusi nella meta>state>entries
array.applyResponse
viene chiamato, passando le intestazioni e il corpo del API server risposta dal passaggio precedente.renderDecisions
flag impostato su true
.applyPersonalization
per aggiornare DOM in base all’offerta di personalizzazione.sendEvent
comando.I cookie vengono utilizzati per mantenere l'identità utente e le informazioni sui cluster. Quando si utilizza un'implementazione ibrida, il server dell'applicazione Web gestisce la memorizzazione e l'invio di questi cookie durante il ciclo di vita della richiesta.
Cookie | Finalità | Memorizzato da | Inviato da |
---|---|---|---|
kndctr_AdobeOrg_identity |
Contiene i dettagli dell’identità utente. | Server dell’applicazione | Server dell’applicazione |
kndctr_AdobeOrg_cluster |
Indica il cluster di rete Edge da utilizzare per soddisfare le richieste. | Server dell’applicazione | Server dell’applicazione |
Le richieste API del server sono necessarie per ottenere le proposte e inviare una notifica di visualizzazione. Quando si utilizza un'implementazione ibrida, il server applicazioni effettua queste richieste all'API server.
Richiesta | Realizzato da |
---|---|
Richiesta di interazione per recuperare le proposte | Server dell’applicazione |
Richiesta di interazione per inviare notifiche di visualizzazione | Server dell’applicazione |
Quando implementi la personalizzazione ibrida, devi prestare particolare attenzione affinché gli hit di pagina non vengano conteggiati più volte in Analytics.
Quando configurare un datastream per Analytics, gli eventi vengono inoltrati automaticamente in modo da acquisire gli hit di pagina.
L'esempio di questa implementazione utilizza due diversi datastreams:
In questo modo, la richiesta lato server non registra eventi di Analytics, ma le richieste lato client sì. Questo fa sì che le richieste di Analytics vengano conteggiate con precisione.
La richiesta di esempio riportata di seguito illustra una richiesta API server che il server applicazioni potrebbe utilizzare per recuperare il contenuto di personalizzazione.
Questa richiesta di esempio utilizza Adobe Target come soluzione di personalizzazione. La richiesta può variare a seconda della soluzione di personalizzazione scelta.
Formato API
POST /ee/v2/interact
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"
}
]
}
}
}'
Parametro | Tipo | Obbligatorio | Descrizione |
---|---|---|---|
dataStreamId |
String |
Sì. | ID del datastream utilizzato per passare le interazioni alla rete Edge. Consulta la sezione panoramica dei datastreams per scoprire come configurare un datastream. |
requestId |
String |
No | Un ID casuale per le richieste server interne correlate. Se non ne viene fornito nessuno, la rete Edge ne genererà uno e lo restituirà nella risposta. |
La risposta di esempio seguente mostra l'aspetto della risposta API server.
{
"requestId":"5c539bd0-33bf-43b6-a054-2924ac58038b",
"handle":[
{
"payload":[
{
"id":"XXX",
"namespace":{
"code":"ECID"
}
}
],
"type":"identity:result"
},
{
"payload":[
{
"..."
},
{
"..."
}
],
"type":"personalization:decisions",
"eventIndex":0
}
]
}
Nella pagina del client, il Web SDK applyResponse
viene chiamato , passando le intestazioni e il corpo della risposta lato server.
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"));
Basato su modulo JSON le offerte vengono applicate manualmente tramite applyPersonalization
per aggiornare DOM in base all’offerta di personalizzazione. Per le attività basate su moduli, è necessario inviare manualmente gli eventi di visualizzazione per indicare quando l’offerta è stata visualizzata. Questo avviene tramite il sendEvent
comando.
function sendDisplayEvent(decision) {
const { id, scope, scopeDetails = {} } = decision;
alloy("sendEvent", {
xdm: {
eventType: "decisioning.propositionDisplay",
_experience: {
decisioning: {
propositions: [
{
id: id,
scope: scope,
scopeDetails: scopeDetails,
},
],
},
},
},
});
}
Per aiutarti a sperimentare e scoprire di più su questo tipo di personalizzazione, forniamo un’applicazione di esempio che puoi scaricare e utilizzare per i test. È possibile scaricare l'applicazione, insieme a istruzioni dettagliate su come usarla, da questo Archivio GitHub.