Skip to content

ESP Personalizado

INFO

Nota: Esta documentación aún está en desarrollo y sujeta a cambios.

Introducción

Este documento describe una propuesta para una nueva integración de ESP Personalizado que proporcionaría una estructura de datos genérica para representar eventos compatibles con la interfaz de flujo de ESP de Fanplayr.

Configuración del punto de conexión

Este ESP se puede configurar desde la sección Streams > Endpoints del portal de Fanplayr. A continuación, se muestra un ejemplo de las posibles opciones de configuración que estarán disponibles:

Post URL

La URL a la que Fanplayr transmitirá los datos mediante el método HTTP POST. El cuerpo de la solicitud contendrá la estructura de datos JSON descrita más adelante en este documento.

  • Tipo: string

API Key

Una clave API opcional que se incluirá en la solicitud POST a su URL y que se puede utilizar con fines de autenticación.

Configuración de flujo

Para enviar datos al punto de conexión que ha definido, deberá crear un flujo que se active por el evento deseado que desee capturar y que tenga una acción que envíe datos al punto de conexión.

El siguiente ejemplo se activa con el evento "Session Expiry".

Estructura de la carga útil

A continuación, se muestra un ejemplo de la estructura de la carga útil que se envía al utilizar la integración de ESP Personalizado. Esta estructura se utiliza para

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

Representa el formato de la estructura de la carga útil.

  • Tipo: string

eventType

Especifica el tipo de evento que representa esta carga útil.

  • Tipo: string

  • Detalles:

    El tipo de evento será igual a uno de los siguientes valores:\

    • addContact - Se activa cuando se captura una nueva dirección de correo electrónico para un usuario.
    • abandonedSession - Se activa al final de la sesión de navegación si el usuario no tenía productos en su carrito de compras y no realizó un pedido.
    • abandonedCart - Se activa al final de la sesión de navegación si el usuario tenía al menos un producto en su carrito que abandonó y no realizó un pedido.
    • order - Se activa cuando se captura un pedido.

domain

El nombre de dominio del sitio web que el usuario navegó durante su sesión de Fanplayr.

  • Tipo: string

siteCustomerId

Representa el identificador del usuario conectado para el sitio web, si está disponible. Este valor se asigna a través de la propiedad customerId de seguimiento de página de Fanplayr o de la identidad $siteCustomerId utilizando la función de Gestión de Identidades.

  • Tipo: string | undefined

subscriberEmail

Este valor se rellenará si Fanplayr ha asociado una dirección de correo electrónico con el usuario a través de un widget de Fanplayr durante la sesión actual, o en una sesión anterior.

  • Tipo: string | undefined

subscriberKey

Representa la identidad del usuario al utilizar la función de Gestión de Identidades de Fanplayr.

  • Tipo: string | undefined

date

La fecha en que se creó el evento, en GMT, en formato ISO 8601.

  • Tipo: string

sessionKey

Un identificador único que representa el ID de la sesión de navegación de Fanplayr.

  • Tipo: string

customData

Un objeto que contiene pares clave-valor de cualquier dato personalizado que se haya adjuntado al evento a través del Flujo de Fanplayr que se utilizó para activar y controlar el evento.

typescript
interface CustomData {
  // [clave: string]: string;
  [key: string]: string;
}

Ejemplo

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

abandonedCart

Un objeto que representa el estado final del carrito de compras cuando uno o más productos permanecen en el carrito al final de la sesión.

typescript
interface CartDetails {
  // Un valor monetario que representa el importe bruto total
  // de todos los artículos en el carrito.
  gross: number;
  // Un valor monetario que representa el descuento total aplicado al carrito.
  discount: number;
  // Cualquier código de descuento aplicado. Si hay varios códigos, se separarán
  // con una coma.
  discountCode?: string;
  // Un valor monetario que representa el costo del envío.
  shipping: number;
  // Un valor monetario que representa cualquier impuesto.
  tax: number;
  // Representa el código de moneda ISO 4217 para todos los valores monetarios.
  currencyCode: string;
  // Un array de productos añadidos al carrito.
  products: CartProduct[];
}

interface CartProduct {
  // El identificador de la variante del producto.
  id: string;
  // El identificador del grupo de productos.
  sku: string;
  // El nombre de visualización del producto.
  name: string;
  // La URL completa al producto en el sitio web.
  url: string;
  // La URL completa a la imagen principal del producto, si está disponible.
  image?: string;
  // La cantidad del producto añadido al carrito.
  quantity: number;
  // El nombre de la categoría del producto, si está disponible.
  category?: string;
}

Ejemplo:

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 de objetos que representan los detalles de los productos que fueron vistos durante la sesión.

  • Tipo: ViewedProduct[]
typescript
interface ViewedProduct {
  // El identificador de la variante del producto.
  id: string;
  // El identificador del grupo de productos.
  sku: string;
  // El nombre de visualización del producto.
  name: string;
  // La URL completa al producto en el sitio web.
  url: string;
  // La URL completa a la imagen principal del producto, si está disponible.
  image?: string;
  // El nombre de la categoría del producto, si está disponible.
  category?: string;
}

Ejemplo:

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 de objetos que representan los detalles de los productos relacionados con el evento.

  • Tipo: RelatedProduct[]
  • Detalles:

    Esta propiedad solo existirá en la carga útil si se añadieron recomendaciones de productos al evento (configurado a través del Flujo).
typescript
interface RelatedProduct {
  // El identificador de la variante del producto.
  id: string;
  // El identificador del grupo de productos.
  sku: string;
  // El nombre de visualización del producto.
  name: string;
  // La URL completa al producto en el sitio web.
  url: string;
  // La URL completa a la imagen principal del producto, si está disponible.
  image?: string;
  // El nombre de la categoría del producto, si está disponible.
  category?: string;
}

Ejemplo:

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 objeto que representa los detalles de la transacción de los pedidos capturados. Estos detalles solo están disponibles para el tipo de evento "order".

typescript
interface OrderDetails {
  // El identificador único del pedido proporcionado por su integración.
  id: string;
  // Un valor monetario que representa el importe bruto total
  // de todos los artículos en el carrito.
  gross: number;
  // Un valor monetario que representa el descuento total aplicado al carrito.
  discount: number;
  // Cualquier código de descuento aplicado. Si hay varios códigos, se separarán
  // con una coma.
  discountCode?: string;
  // Un valor monetario que representa el costo del envío.
  shipping: number;
  // Un valor monetario que representa cualquier impuesto.
  tax: number;
  // Representa el código de moneda ISO 4217 para todos los valores monetarios.
  currencyCode: string;
  // Un array de productos incluidos en el pedido.
  products: OrderProduct[];
}

interface OrderProduct {
  // El identificador de la variante del producto.
  id: string;
  // El identificador del grupo de productos.
  sku: string;
  // El nombre de visualización del producto.
  name: string;
  // La URL completa al producto en el sitio web.
  url: string;
  // La URL completa a la imagen principal del producto, si está disponible.
  image?: string;
  // La cantidad del producto incluida en el pedido.
  quantity: number;
  // El nombre de la categoría del producto, si está disponible.
  category?: string;
}

Ejemplo:

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'
    }
  ]
}

Ejemplos de cargas útiles

Evento de contacto añadido

A continuación, se muestra un ejemplo de la estructura de la carga útil que representa la captura de la dirección de correo electrónico de un usuario:

  • La propiedad action está establecida en addContact para representar la captura de un nuevo correo electrónico.
  • El subscriberKey es igual a la dirección de correo electrónico capturada.
  • También pueden estar presentes datos adicionales, como cualquier producto visto durante la sesión de navegación del usuario.
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 de sesión abandonada

Un ejemplo del evento de abandono de sesión donde el usuario no tiene productos añadidos al carrito de compras al final de la sesión.

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 de carrito abandonado

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 de pedido

Un ejemplo de un evento de pedido que se activa a través del disparador de flujo "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'
      }
    ]
  }
}