Skip to content

ESP personalizzato ​

INFO

Nota: Questa documentazione è ancora in fase di elaborazione e soggetta a modifiche.

Introduzione ​

Questo documento descrive una proposta per una nuova integrazione di ESP personalizzato che fornirebbe una struttura di dati generica per rappresentare gli eventi supportati dall'interfaccia di streaming ESP di Fanplayr.

Configurazione dell'endpoint ​

Questo ESP può essere configurato dalla sezione Streams > Endpoints del portale Fanplayr. Di seguito è riportato un esempio delle potenziali opzioni di configurazione che saranno disponibili:

URL di pubblicazione ​

L'URL a cui Fanplayr trasmetterà i payload tramite il metodo HTTP POST. Il corpo della richiesta conterrà la struttura di dati JSON descritta più avanti in questo documento.

  • Tipo: string

Chiave API ​

Una chiave API opzionale che sarà inclusa nella richiesta POST al vostro URL e che potrà essere utilizzata per scopi di autenticazione.

Configurazione dello stream ​

Per inviare dati all'endpoint definito, sarà necessario creare uno stream che sia attivato dall'evento desiderato da catturare e che abbia un'azione che invii dati all'endpoint.

L'esempio seguente si attiva sull'evento "Session Expiry".

Struttura del payload ​

Di seguito è riportato un esempio della struttura del payload che viene inviato utilizzando l'integrazione Custom ESP. Questa struttura è utilizzata per;

json5
{
  "version": "2022-01-01",
  "eventType": "addContact" | "abandonedSession" | "abandonedCart" | "order",
  "sessionKey": "",
  "domain": "",
  "siteCustomerId": "",
  "subscriberEmail": "",
  "subscriberKey": "",
  "date": "2022-01-01T00:00:00Z",
  "customData": {
    "key1": "value1",
    "key2": "value2"
  },
  "abandonedCart": {
    "gross": 0,
    "discount": 0,
    "discountCode": "",
    "shipping": 0,
    "tax": 0,
    "products": [
      {
        "id": "",
        "sku": "",
        "name": "",
        "url": "",
        "image": "",
        "quantity": 0,
        "category": ""
      }
    ]
  },
  "orderDetails": {
    "id": "",
    "gross": 0,
    "discount": 0,
    "discountCode": "",
    "shipping": 0,
    "tax": 0,
    "products": [
      {
        "id": "",
        "sku": "",
        "name": "",
        "url": "",
        "image": "",
        "quantity": 0,
        "category": ""
      }
    ]
  },
  "productsViewed": [
    {
      "id": "",
      "sku": "",
      "name": "",
      "url": "",
      "image": "",
      "category": ""
    }
  ],
  "relatedProducts": [
    {
      "id": "",
      "sku": "",
      "name": "",
      "url": "",
      "image": "",
      "category": ""
    }
  ]
}

version ​

Rappresenta il formato della struttura del payload.

  • Tipo: string

eventType ​

Specifica il tipo di evento che questo payload rappresenta.

  • Tipo: string

  • Dettagli:

    Il tipo di evento sarà uguale a uno dei seguenti valori:\

    • addContact - Attivato quando viene acquisito un nuovo indirizzo email per un utente.
    • abandonedSession - Attivato alla fine della sessione di navigazione se l'utente non aveva prodotti nel carrello e non ha effettuato un ordine.
    • abandonedCart - Attivato alla fine della sessione di navigazione se l'utente aveva almeno un prodotto nel carrello che ha abbandonato e non ha effettuato un ordine.
    • order - Attivato quando viene acquisito un ordine.

domain ​

Il nome di dominio del sito web che l'utente ha navigato durante la sua sessione Fanplayr.

  • Tipo: string

siteCustomerId ​

Rappresenta l'identificatore dell'utente loggato per il sito web, se disponibile. Questo valore è assegnato tramite la proprietà customerId del tracciamento delle pagine di Fanplayr o dall'identità $siteCustomerId utilizzando la funzionalità di Gestione delle Identità.

  • Tipo: string | undefined

subscriberEmail ​

Questo valore sarà popolato se Fanplayr ha associato un indirizzo email all'utente tramite un widget Fanplayr durante la sessione corrente o in una sessione precedente.

  • Tipo: string | undefined

subscriberKey ​

Rappresenta l'identità dell'utente quando si utilizza la funzionalità di Gestione delle Identità di Fanplayr.

  • Tipo: string | undefined

date ​

La data di creazione dell'evento, in GMT, in formato ISO 8601.

  • Tipo: string

sessionKey ​

Un identificatore univoco che rappresenta l'ID della sessione di navigazione di Fanplayr.

  • Tipo: string

customData ​

Un oggetto contenente coppie chiave-valore di qualsiasi dato personalizzato che è stato allegato all'evento tramite lo Stream Fanplayr utilizzato per attivare e controllare l'evento.

typescript
interface CustomData {
  // [chiave: string]: string;
}

Esempio

json5
{
  key1: 'value1',
  key2: 'value2'
}

abandonedCart ​

Un oggetto che rappresenta lo stato finale del carrello quando uno o più prodotti rimangono nel carrello alla fine della sessione.

typescript
interface CartDetails {
  // Un valore monetario che rappresenta l'importo lordo totale
  // di tutti gli articoli nel carrello.
  gross: number;
  // Un valore monetario che rappresenta lo sconto totale applicato al carrello.
  discount: number;
  // Qualsiasi codice sconto applicato. Se ci sono più codici, saranno separati
  // da una virgola.
  discountCode?: string;
  // Un valore monetario che rappresenta il costo di spedizione.
  shipping: number;
  // Un valore monetario che rappresenta eventuali tasse.
  tax: number;
  // Rappresenta il codice valuta ISO 4217 per tutti i valori monetari.
  currencyCode: string;
  // Un array di prodotti aggiunti al carrello.
  products: CartProduct[];
}

interface CartProduct {
  // L'identificatore della variante del prodotto.
  id: string;
  // L'identificatore del gruppo di prodotti.
  sku: string;
  // Il nome visualizzato del prodotto.
  name: string;
  // L'URL completo del prodotto sul sito web.
  url: string;
  // L'URL completo dell'immagine principale del prodotto, se disponibile.
  image?: string;
  // La quantità del prodotto aggiunta al carrello.
  quantity: number;
  // Il nome della categoria del prodotto, se disponibile.
  category?: string;
}

Esempio:

json5
{
  gross: 120.0,
  discount: 10,
  discountCode: '10OFF',
  shipping: 0,
  tax: 0,
  currencyCode: 'USD',
  products: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      quantity: 2,
      category: 'Accessories'
    }
  ]
}

productsViewed ​

Un array di oggetti che rappresentano i dettagli dei prodotti visualizzati durante la sessione.

  • Tipo: ViewedProduct[]
typescript
interface ViewedProduct {
  // L'identificatore della variante del prodotto.
  id: string;
  // L'identificatore del gruppo di prodotti.
  sku: string;
  // Il nome visualizzato del prodotto.
  name: string;
  // L'URL completo del prodotto sul sito web.
  url: string;
  // L'URL completo dell'immagine principale del prodotto, se disponibile.
  image?: string;
  // Il nome della categoria del prodotto, se disponibile.
  category?: string;
}

Esempio:

json5
[
  {
    id: 'RDB1-A2',
    sku: 'RDB1',
    name: 'Rifiano Duffel Bag',
    url: 'https://store.com/products/rdb1',
    image: 'https://cdn.store.com/products/rdb1-01.jpg',
    category: 'Accessories'
  },
  {
    id: 'VDD-1',
    sku: 'VDD',
    name: 'Vintage Denim Dress',
    url: 'https://store.com/products/vdd1',
    image: 'https://cdn.store.com/products/vdd1-01.jpg',
    category: 'Womens > Clothing'
  }
]

relatedProducts ​

Un array di oggetti che rappresentano i dettagli dei prodotti correlati all'evento.

  • Tipo: RelatedProduct[]
  • Dettagli:

    Questa proprietà esisterà nel payload solo se al l'evento sono state aggiunte raccomandazioni di prodotti (configurate tramite lo Stream).
typescript
interface RelatedProduct {
  // L'identificatore della variante del prodotto.
  id: string;
  // L'identificatore del gruppo di prodotti.
  sku: string;
  // Il nome visualizzato del prodotto.
  name: string;
  // L'URL completo del prodotto sul sito web.
  url: string;
  // L'URL completo dell'immagine principale del prodotto, se disponibile.
  image?: string;
  // Il nome della categoria del prodotto, se disponibile.
  category?: string;
}

Esempio:

json5
[
  {
    id: 'BFF-3',
    sku: 'BFF',
    name: 'Bali Flip Flop',
    url: 'https://store.com/products/bff',
    image: 'https://cdn.store.com/products/bff-01.jpg',
    category: 'Womens > Shoes'
  }
]

orderDetails ​

Un oggetto che rappresenta i dettagli della transazione degli ordini acquisiti. Questi dettagli sono disponibili solo per il tipo di evento "order".

typescript
interface OrderDetails {
  // L'identificatore unico dell'ordine fornito dalla vostra integrazione.
  id: string;
  // Un valore monetario che rappresenta l'importo lordo totale
  // di tutti gli articoli nel carrello.
  gross: number;
  // Un valore monetario che rappresenta lo sconto totale applicato al carrello.
  discount: number;
  // Qualsiasi codice sconto applicato. Se ci sono più codici, saranno separati
  // da una virgola.
  discountCode?: string;
  // Un valore monetario che rappresenta il costo di spedizione.
  shipping: number;
  // Un valore monetario che rappresenta eventuali tasse.
  tax: number;
  // Rappresenta il codice valuta ISO 4217 per tutti i valori monetari.
  currencyCode: string;
  // Un array di prodotti inclusi nell'ordine.
  products: OrderProduct[];
}

interface OrderProduct {
  // L'identificatore della variante del prodotto.
  id: string;
  // L'identificatore del gruppo di prodotti.
  sku: string;
  // Il nome visualizzato del prodotto.
  name: string;
  // L'URL completo del prodotto sul sito web.
  url: string;
  // L'URL completo dell'immagine principale del prodotto, se disponibile.
  image?: string;
  // La quantità del prodotto inclusa nell'ordine.
  quantity: number;
  // Il nome della categoria del prodotto, se disponibile.
  category?: string;
}

Esempio:

json5
{
  id: '34783495',
  gross: 120.0,
  discount: 10,
  discountCode: '10OFF',
  shipping: 0,
  tax: 0,
  currencyCode: 'USD',
  products: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      quantity: 2,
      category: 'Accessories'
    }
  ]
}

Esempi di payload ​

Evento "Aggiungi contatto" ​

Di seguito è riportato un esempio della struttura del payload che rappresenta l'acquisizione dell'indirizzo email di un utente:

  • La proprietà action è impostata su addContact per rappresentare l'acquisizione di una nuova email.
  • La subscriberKey è uguale all'indirizzo email acquisito.
  • Potrebbero essere presenti anche dati aggiuntivi, come i prodotti visualizzati durante la sessione di navigazione dell'utente.
javascript
{
  "version": "2022-01-01",
  "eventType": "addContact",
  "sessionKey": "02941605ef4048c832f272b13b1a2d4e",
  "domain": "store.com",
  "subscriberKey": "email@domain.com",
  "date": "2022-01-01T00:00:00Z",
  "productsViewed": [
    {
      "id": "RDB1-A2",
      "sku": "RDB1",
      "name": "Rifiano Duffel Bag",
      "url": "https://store.com/products/rdb1",
      "image": "https://cdn.store.com/products/rdb1-01.jpg",
      "category": "Accessories"
    }
  ]
}

Evento "Sessione abbandonata" ​

Un esempio dell'evento di abbandono della sessione in cui l'utente non ha prodotti aggiunti al carrello alla fine della sessione.

json5
{
  version: '2022-01-01',
  eventType: 'abandonedSession',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ]
}

Evento "Carrello abbandonato" ​

json5
{
  version: '2022-01-01',
  eventType: 'abandonedCart',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ],
  abandonedCart: {
    gross: 120.0,
    discount: 10,
    discountCode: '10OFF',
    shipping: 0,
    tax: 0,
    products: [
      {
        id: 'RDB1-A2',
        sku: 'RDB1',
        name: 'Rifiano Duffel Bag',
        url: 'https://store.com/products/rdb1',
        image: 'https://cdn.store.com/products/rdb1-01.jpg',
        quantity: 2,
        category: 'Accessories'
      }
    ]
  }
}

Evento "Ordine" ​

Un esempio di evento d'ordine che viene attivato tramite il trigger dello stream "Order Received".

json5
{
  version: '2022-01-01',
  eventType: 'order',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ],
  order: {
    id: '234897349',
    gross: 120.0,
    discount: 10,
    discountCode: '10OFF',
    currencyCode: 'USD',
    shipping: 0,
    tax: 0,
    products: [
      {
        id: 'RDB1-A2',
        sku: 'RDB1',
        name: 'Rifiano Duffel Bag',
        url: 'https://store.com/products/rdb1',
        image: 'https://cdn.store.com/products/rdb1-01.jpg',
        quantity: 2,
        category: 'Accessories'
      }
    ]
  }
}