Pular para o conteúdo principal

CRM Inspector (crimoo-inspector)

Overview

Herramienta de diagnóstico y configuración inyectada en sitios de clientes durante sesiones de debug. Permite verificar la captura de datos, explorar eventos del dataLayer, escanear formularios, y crear reglas de captura sin salir del sitio.

Stack

Arquitectura

El Inspector se compila a un solo archivo JS que se sirve desde gtm-fabric como static resource (/api/debug-panel.js). El script de identidad (generado por CustomLoaderService en gtm-proxy) lo carga dinámicamente cuando detecta un token de debug en la URL.

crimoo-inspector/
├── src/
│ ├── index.tsx # Entry: mount en Shadow DOM
│ ├── App.tsx # Shell: Panel + Tabs + Context
│ ├── components/
│ │ ├── Panel.tsx # Ventana flotante (drag, resize)
│ │ ├── TitleBar.tsx # Barra de título con logo
│ │ ├── Tabs.tsx # Navegación entre tabs
│ │ ├── IdentityTab.tsx
│ │ ├── EventsTab.tsx # Eventos agrupados + filtro + crear regla
│ │ ├── RulesTab.tsx
│ │ ├── FormsTab.tsx # Scan de formularios + crear regla
│ │ ├── NetworkTab.tsx
│ │ └── CreateRuleForm.tsx # Formulario inline de crear regla
│ ├── hooks/
│ │ ├── useDrag.ts
│ │ ├── useResize.ts
│ │ ├── useEvents.ts # Polling de __events y __netlog
│ │ └── useRuleCreator.ts # postMessage al admin
│ ├── utils/
│ │ └── flatten.ts # Flatten de payloads anidados
│ └── styles/
│ └── panel.css # CSS inyectado en Shadow DOM
└── dist/
└── crimoo-debug-panel.js # Bundle IIFE → gtm-fabric static

Tabs

TabFunción
IdentityDevice ID, Session ID, cookies, atribución UTM
EventsTodos los eventos del dataLayer agrupados por tipo, con filtro y botón "+ rule"
RulesReglas de captura configuradas con mappings
FormsScan de formularios de la página, muestra qué inputs tienen regla
NetworkLog de requests interceptados con IDs inyectados

Creación de reglas inline

El Inspector permite crear reglas sin salir del sitio del cliente via postMessage:

  1. Usuario clickea "+ rule" en un evento o formulario
  2. Se abre formulario inline con campos detectados y dropdowns de campos CRM
  3. Al confirmar: window.opener.postMessage({ type: 'crimoo:create-rule', rule, containerId })
  4. El admin Angular (crm-inspector.ts) escucha el mensaje y llama crmConfigService.createRule()
  5. Responde con { type: 'crimoo:rule-created', success: true }

Flatten de payloads

Los eventos del dataLayer pueden tener objetos anidados (ej: ecommerce). El Inspector los aplana con dot notation:

  • Primitivos: ecommerce.item_list_name → seleccionable como campo
  • Arrays: ecommerce.items → mostrado como array[N] no mapeable
  • Profundidad máxima: 3 niveles

Build y deploy

cd crimoo-inspector
npm run build # → dist/crimoo-debug-panel.iife.js
# Copiar a gtm-fabric:
cp dist/crimoo-debug-panel.iife.js ../gtm-fabric/src/main/resources/static/crimoo-debug-panel.js
# Redesplegar gtm-fabric

Dependencia con otros servicios

  • gtm-fabric: sirve el bundle como /api/debug-panel.js, maneja sesiones de debug y SSE
  • gtm-proxy: genera el script de identidad que carga el panel, forwarded /api/* a fabric
  • node-api: proxy de sesiones de debug desde Angular UI
  • ui-angular: crm-inspector.ts escucha postMessage para crear reglas