Documentation
Feedback
Guides
VTEX IO Apps

VTEX IO Apps
Empathy Pixel App for VTEX
Community extension
Version: 0.0.6
Latest version: 0.0.6

Template de integración desarrollado para implementar Empathy en tiendas VTEX. Esta aplicación inyecta un widget de búsqueda avanzada mediante VTEX Pixel, siguiendo las prácticas recomendadas por VTEX.


Tabla de Contenidos


Descripción General

Esta app es una solución template configurable que permite integrar el buscador de Empathy en tiendas VTEX. Cada cliente puede tener diferentes configuraciones según sus necesidades:

Con o sin variantes de productos
Con o sin botón de add to cart
Con o sin quantity selector
Con o sin wishlist

Funcionalidades Principales

  • 🔍 Búsqueda avanzada mediante el widget de Empathy
  • 🛒 Integración con carrito VTEX (add/remove/update)
  • ❤️ Gestión de wishlist con sincronización visual
  • 📊 Eventos de analítica GA4 personalizados
  • 🔄 Comunicación bidireccional mediante el setSnippetConfig

Requisitos Previos

⚠️ IMPORTANTE: Antes de instalar esta app, asegúrate de que:

  1. El conector backend de Empathy esté correctamente configurado
  2. El catálogo de VTEX se esté enviando como feed a Empathy
  3. El equipo de Empathy haya mapeado el feed correctamente
  4. Tengas acceso al script de Empathy de cada cliente (app.js) provisto por el equipo de Empathy

Instalación

Esta aplicación está diseñada para operar como una App Privada. Sigue estos pasos para configurarla e instalarla bajo la cuenta correspondiente.

Prerrequisitos

Asegúrate de estar logueado en la cuenta objetivo:


_10
vtex login <account-name>

Pasos

  1. Clona este repositorio:


    _10
    git clone <repository-url>
    _10
    cd empathymx-pixel-app

  2. Configura el Vendor (Account Name): Abre el archivo manifest.json en la raíz del proyecto. Cambia el valor del campo vendor por el nombre de la cuenta (account name) donde se instalará la aplicación.


    _10
    // manifest.json
    _10
    {
    _10
    "name": "pixel-app",
    _10
    "vendor": "TU_ACCOUNT_NAME",
    _10
    "version": "0.0.x",
    _10
    }

Nota: Esto cambiará el ID de la app a TU_ACCOUNT_NAME.empathy-pixel-app.

  1. Instala la aplicación: Instala la versión recién publicada en el workspace actual:


    _10
    vtex install

  2. Verifica la instalación:


    _10
    vtex ls | grep empathymx.pixel-app


Configuración

1. Script de Empathy

Actualiza el archivo pixel/head.html con la URL del script de Empathy proporcionada por el equipo:


_10
<script src="https://x.{env}.empathy.co/{client-id}/{build-id}/app.js" type="module"></script>

Ejemplo:


_10
<script src="https://x.test.empathy.co/preview/674/app.js" type="module"></script>

2. Configuración InitX

En react/Components/EmpathySearchbar/index.tsx, configura los parámetros del cliente:


_10
(window as any).initX = {
_10
instance: "vtex", // Identificador del cliente
_10
env: 'staging', // 'staging' o 'production'
_10
lang: "es", // Idioma: 'es', 'en', 'pt', etc.
_10
scope: "desktop", // 'desktop' o 'mobile'
_10
currency: "EUR", // 'EUR', 'USD', 'MXN', etc.
_10
consent: false,
_10
viewMode: 'embedded',
_10
callbacks: { ... }
_10
};

3. Agregar Componentes a la Store

En tu theme, agrega los siguientes bloques:


_10
{
_10
"store.home": {
_10
"blocks": [
_10
"empathy-searchbar",
_10
"empathy-results"
_10
]
_10
}
_10
}


Arquitectura

Estructura del Proyecto


_23
empathymx-pixel-app/
_23
├── manifest.json # Configuración de la app VTEX
_23
├── pixel/
_23
│ └── head.html # Script de inicialización de Empathy
_23
├── store/
_23
│ ├── interfaces.json # Definición de componentes React
_23
│ └── plugins.json # Configuración de pixel manager
_23
├── react/
_23
│ ├── index.tsx # Entry point del pixel
_23
│ ├── Components/
_23
│ │ ├── EmpathySearchbar/ # 🔑 Componente principal
_23
│ │ │ ├── index.tsx
_23
│ │ │ ├── constants.tsx
_23
│ │ │ ├── utils/
_23
│ │ │ │ ├── index.tsx # Utilidades generales
_23
│ │ │ │ └── handleCart.ts # Lógica de carrito
_23
│ │ │ ├── hooks/
_23
│ │ │ │ ├── handleWishlist.ts
_23
│ │ │ │ └── useGAAnalytics.ts
_23
│ │ │ └── gql/ # GraphQL queries
_23
│ │ └── EmpathyResults/ # Overlay de resultados
_23
└── docs/
_23
└── README.md

Dependencias VTEX


_10
{
_10
"vtex.pixel-interfaces": "1.x",
_10
"vtex.order-items": "0.x",
_10
"vtex.order-manager": "0.x",
_10
"vtex.styleguide": "9.x",
_10
"vtex.pixel-manager": "1.x",
_10
"vtex.session-client": "1.x",
_10
"vtex.wish-list": "1.x" // Opcional (solo si se usa wishlist)
_10
}


Componentes Principales

EmpathySearchbar

El componente principal que:

  • Inicializa el widget de Empathy mediante initX
  • Configura callbacks para interacciones del usuario
  • Gestiona la comunicación con VTEX (carrito, wishlist)
  • Envía eventos de analítica a GA4

Callbacks disponibles:

CallbackDescripción
UserClickedResultAddToCartClick en "agregar al carrito" (producto simple)
UserClickedResultVariantAddToCartClick en "agregar al carrito" (con variantes)
UserClickedResultRemoveFromCartClick en "quitar del carrito" (producto simple)
UserClickedResultVariantRemoveFromCartClick en "quitar del carrito" (con variantes)
UserClickedResultWishlistClick en el icono de wishlist

EmpathyResults

Contenedor overlay para mostrar los resultados de búsqueda. Empathy "teleporta" su UI a este componente usando data-teleport.

Utils y Hooks

  • handleCart.ts: Lógica centralizada para operaciones de carrito
  • handleWishlist.ts: Gestión completa de wishlist con GraphQL
  • useGAAnalytics.ts: Envío de eventos personalizados a GA4
  • index.tsx (utils): Funciones auxiliares (findProductBySkuId, mapProductForGA4)

Flujo de Integración

1. Inicialización (Carga de Página)

2. Flujo Add to Cart

3. Flujo Wishlist


Conceptos Clave

setSnippetConfig - API de Comunicación

Esta es la interfaz principal para comunicarse con el widget de Empathy:


_10
(window as any).InterfaceX.setSnippetConfig({
_10
cart: {
_10
"123": 2, // SKU ID → Cantidad
_10
"456": 1
_10
},
_10
wishlist: ["789", "101112"], // Array de SKU IDs en wishlist
_10
// ... otros parámetros
_10
});

¿Qué hace?

  • ✅ Actualiza el estado visual del widget
  • ✅ Muestra cantidades en el carrito
  • ✅ Marca productos con icono de wishlist "filled"

Eventos GA4

La app envía 3 eventos personalizados:

  • add_to_cart_empathy: Cuando se agrega un producto
  • remove_from_cart_empathy: Cuando se quita un producto
  • add_to_wishlist_empathy: Cuando se agrega a favoritos

Todos incluyen:

  • search_term: El término de búsqueda que generó la interacción
  • ecommerce.items[]: Datos del producto en formato GA4

Configuración por Cliente

Checklist de Implementación

Script de Empathy

  • Cambiar URL en pixel/head.html según entorno del cliente
  • Verificar que el script se cargue correctamente (console.log(window.InterfaceX))

InitX Configuration

  • Actualizar instance (identificador del cliente en Empathy)
  • Configurar env: 'staging' o 'production'
  • Ajustar lang según idioma del sitio
  • Configurar currency según moneda de la tienda
  • Verificar scope: 'desktop' o 'mobile'

Funcionalidades Opcionales

  • ¿El cliente tiene variantes? → Mantener callbacks de Variant
  • ¿El cliente tiene add to cart? → Configurar callbacks de AddToCart
  • ¿El cliente tiene quantity selector? → Verificar metadata.inputValue
  • ¿El cliente tiene wishlist? → Verificar dependencia vtex.wish-list

Backend y Testing

  • Verificar que el conector backend esté instalado
  • Confirmar que el feed se envíe correctamente a Empathy
  • Validar que Empathy haya mapeado el feed
  • Probar búsqueda y resultados
  • Probar add/remove from cart (con y sin variantes)
  • Probar wishlist (agregar/remover)
  • Verificar eventos GA4 en window.dataLayer

Debugging

Verificaciones Básicas


_14
// 1. Verificar que Empathy está cargado
_14
console.log(window.InterfaceX);
_14
_14
// 2. Ver configuración actual
_14
console.log(window.InterfaceX.getSnippetConfig());
_14
_14
// 3. Ver cart sincronizado
_14
console.log(window.InterfaceX.getSnippetConfig()?.cart);
_14
_14
// 4. Ver wishlist sincronizada
_14
console.log(window.InterfaceX.getSnippetConfig()?.wishlist);
_14
_14
// 5. Ver eventos GA4
_14
console.log(window.dataLayer);

Problemas Comunes

ProblemaSolución
Widget no se muestraVerificar que el script en head.html se cargue correctamente
InterfaceX is undefinedEl script de Empathy no se cargó. Revisar URL y conectividad
Cart no sincronizaRevisar que setSnippetConfig se llame después de init()
Wishlist no funcionaVerificar que vtex.wish-list esté instalada
Eventos GA4 no aparecenRevisar que window.dataLayer exista antes de push

See also
VTEX App Store
VTEX IO Apps
LISTENER
VTEX IO Apps
Was this helpful?