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
{
"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.
interface CustomData {
// [clave: string]: string;
[key: string]: string;
}
Ejemplo
{
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.
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:
{
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[]
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:
[
{
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).
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:
[
{
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".
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:
{
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 enaddContact
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.
{
"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.
{
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
{
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".
{
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'
}
]
}
}