Integração completa entre o serviço de Web Push & CRM da Inngage e sua loja VTEX IO, capturando automaticamente os principais eventos de navegação, comportamento e conversão, e enviando-os para a Inngage. Com isso, você poderá:
- Automatizar campanhas de abandono de carrinho, cross-sell, retargeting, entre outras.
- Enriquecer o perfil dos clientes com dados comportamentais em tempo real.
- Mensurar a jornada de conversão de ponta a ponta, dentro do ecossistema VTEX.
📦 Principais Funcionalidades
1. Head Script (pixel/head.html)
-
Carrega o SDK da Inngage:
_10<script src="https://api.inngage.com.br/v1/webpush/js/inngage.js" async defer></script> -
Define a função global
window.sendPixelEvent(eventName, data)para o disparo de eventos para a Inngage. -
Gerencia dois identificadores distintos em
localStorage:identifier→ sempre o e-mail do usuário autenticado (VTEX).registration→ token de Web Push (gerado via Service Worker).
-
Tenta identificar o e-mail do cliente (via
orderForm) por até 10 segundos (20 tentativas a cada 500 ms). -
Dispara o evento
page_viewao carregar a página ou em navegação interna (popstate), com debounce de 200 ms para evitar duplicidade. -
Filtra internamente os seguintes eventos para que não sejam enviados como pixel, apenas logados no console:
session_start,first_open,user_dataepromotion_view.
2. Listener React (react/index.tsx)
-
Escuta mensagens da VTEX via
postMessagee mapeia automaticamente eventos VTEX → Inngage. -
Ao receber
vtex:userData:- Se não houver
identifiere o usuário estiver autenticado: salvaidentifier = email, disparasign_upe executa o ETL (addUserData) com{ email, registration? }. - Se já houver
identifiere o login ainda não tiver sido enviado na sessão, disparalogine atualiza o ETL comaddUserData. - Se o e-mail for alterado, atualiza
identifiere disparalogin+addUserData. - No logout (
isAuthenticated=false), limpaidentifiere a flagloginSent.
- Se não houver
-
Armazena cliques em “Adicionar ao carrinho” em
localStorage.inngage_cartBuffere disparaadd_to_cart_batchem até 500 ms, evitando chamadas duplicadas.
3. Mapeamento de Eventos VTEX → Inngage
Importante: os eventos
session_start,first_open,user_dataepromotion_viewsão controlados internamente e não são enviados para a Inngage, apenas registrados no console.
A tabela de eventos está ótima e bem formatada, nenhuma mudança recomendada.
4. Eventos Customizados
Você pode disparar qualquer evento manualmente:
_10window.sendPixelEvent('meu_evento_personalizado', { xpto: 123, foo: 'bar' });
Esses serão enviados normalmente, pois não fazem parte da lista de eventos filtrados.
🚀 Instalação
-
No diretório raiz do seu tema VTEX IO, execute:
_10vtex install tfchmj.inngage-api -
Verifique se a seção
<builders>do seumanifest.jsoncontém:_10{_10"builders": {_10"pixel": "0.x"_10}_10}
⚙️ Configuração
-
No Admin VTEX → Apps → Inngage Pixel, preencha:
- App Token (
appToken) – fornecido pela Inngage. - Channel ID (
channelId) – utilizado para Web Push (padrão: 4).
- App Token (
-
Confirme que seu
manifest.jsoncontém:_10{_10"settingsSchema": {_10"title": "Inngage Pixel",_10"type": "object",_10"properties": {_10"appToken": { "type": "string", "title": "App Token" },_10"channelId": { "type": "number", "title": "Channel ID (opcional)", "default": 4 }_10}_10}_10}
🔔 Service Worker (Web Push)
A parte do Service Worker está excelente e segue boas práticas de PWA.
🧠 Fluxo de Execução
-
pixel/head.html- Carrega o SDK Inngage.
- Define
window.sendPixelEvent()com lógica de filtro. - Tenta capturar o
emaildoorderForm. - Ao encontrar o
emailouregistration, disparaidentify(interno). - Dispara
page_viewem navegação interna (popstate).
-
react/index.tsx-
Registra listener para
postMessage. -
No evento
vtex:userData:- Grava
identifierse for novo login e disparasign_up. - Chama
addUserData(...)para atualizar dados no backend Inngage. - Se o e-mail mudar, atualiza
identifier, disparalogine chamaaddUserData.
- Grava
-
Mapeia os demais eventos para
sendPixelEvent(...).
-
✅ Eventos Enviados (Exemplos de Payload)
A seção de exemplos está muito bem feita. Só sugiro adicionar um aviso de que os exemplos podem variar conforme a estrutura da loja.
🔧 Debug & Homologação
Essa seção está completa e clara. Apenas adicionei pontuação e melhor fluidez:
-
Console do navegador
-
Eventos enviados:
_10[Inngage] enviado <evento> <payload> -
Eventos filtrados:
_10[Inngage] ignorando envio de pixel para o evento: <evento>
-
-
Aba "Network" (Rede)
- Filtre por
pixelTracking/index.phppara visualizar os eventos. - As requisições são feitas via imagem (
new Image().src = …), não bloqueando o carregamento da página.
- Filtre por
-
localStorageidentifier→ e-mail do usuário autenticado.registration→ token de push.inngage_cartBuffer→ buffer de itens adicionados ao carrinho.
-
sessionStorageinngage_first_open_done→ indica se o eventofirst_openjá foi disparado nesta guia.
🚢 Publicação
Execute:
_10vtex publish_10vtex deploy
📝 Licença
Este projeto está licenciado sob a MIT License.