RRelo Docs
API & GuíasGuías

Pixel

Referencia del Web Pixel de Relo: API relo(), catálogo de eventos automáticos y manuales, lead API, consent bitmask y session replay.

Web Pixel — referencia técnica

Referencia del script r.js que corre en los sitios de clientes pixel. Para el alta paso a paso de un cliente nuevo (wizard, snippet, verificación, troubleshooting) usa la guía Pixel Setup.

Qué es

El Relo Pixel es un snippet de JS (~50 KB, async, todo en try/catch) que corre en cualquier sitio web. Captura page views, formularios, compras, leads, engagement, scroll, clics y ~50 señales más. Los eventos van a p.relo.mx/e (sendBeacon con fallback XHR, cola con re-queue, batch de 10), el worker de pixel los enriquece con geo/UA y los reenvía al ingest Go, que resuelve identidad (cookie + fingerprint + hashes de PII), atribuye por click_id y escribe en ClickHouse en segundos.

API relo() — comandos

El snippet crea una cola (relo.q) hasta que r.js termina de cargar; después las llamadas se procesan directo. Comandos soportados:

ComandoFirmaQué hace
initrelo('init', { client_id, ... })Inicializa identidad (device/session cookie, fingerprint, first/last touch) y arranca todos los trackers automáticos. Gate: consent bit 0x01.
pagerelo('page')Dispara page_view (título, path, params, first/last touch, net info). Llamar en cada cambio de ruta en SPAs.
eventrelo('event', 'nombre', {...})Evento custom: purchase, view_product, add_to_cart, signup, lo que sea.
purchaserelo('purchase', {...})Atajo de relo('event', 'purchase', ...).
leadrelo('lead', {...})API explícita de lead-gen → dispara lead_submit. Ver sección abajo.
identifyrelo('identify', { email, phone, name })Resuelve identidad sin disparar conversión. Gate: consent bit 0x02.
consentrelo('consent', 0xFF) o relo('consent', { analytics: true, dsp: false })Actualiza el consent bitmask en runtime (ej. desde un cookie banner).
resetrelo('reset')Limpia identidad (cookies _relo_did/_relo_sid/_relo_fp) — usar en logout.

Opciones de init

OpciónDefaultDescripción
client_idRequerido. El id numérico del cliente en Relo (viene embebido en el snippet del portal).
consent0xFFConsent bitmask (tabla abajo).
domainautoCookie domain para identidad cross-subdomain (.tudominio.com). Sanitizado, máx 3KB.
auto_lead_on_submitfalseSi true, cada submit de <form> también dispara lead_submit con lead_defaults. Ver Pixel Setup § Opcional A.
lead_defaults{}Defaults del puente auto-lead: product, stage, lead_value, currency, form_id, lead_source.
replay_enabledfalseSi true (y consent bit 0x10), carga replay.js para session replay. Normalmente lo controla la config server-side, no el snippet.
replay_sample_rate100% de sesiones elegibles que se graban (0-100).
BitHexScopeSi está OFF
00x01analyticsEl pixel no envía ningún evento (no-op total).
10x02personalizationNo captura identidad (email/phone hash) ni guarda fingerprint.
20x04DSP exportEl server no reenvía a Meta/Google (enforcement server-side).
30x08cross-clientNo comparte identidad entre clientes Relo.
40x10session replayNo graba rrweb aunque replay_enabled esté on.

Señales del browser que fuerzan bits off: navigator.doNotTrack apaga DSP (0x04); navigator.globalPrivacyControl apaga analytics + DSP (0x05).

Catálogo de eventos

EventoCuándo
page_viewCada carga de página (+ relo('page') en SPAs)
fp_readyFingerprint de dispositivo calculado (SHA-256; fallback djb2)
identityEmail/phone detectado en un campo (blur/submit) — siempre hasheado
form_start / form_submit / form_abandonPrimera interacción con un form / submit / salir sin enviar
scrollProfundidad 25/50/75/90/100%
clickCada clic con coordenadas (heatmap)
engagementpagehide/tab hidden con segundos activo/oculto y scroll máximo
section_viewSección entra al viewport (IntersectionObserver, 1s dwell)
checkout_openDetecta Stripe, MercadoPago, Conekta, OpenPay, PayU, PayPal, Kushki, Culqi
net_quality / net_changeCalidad/cambio de conexión (navigator.connection + ping fallback)
web_vitalsLCP, CLS, INP, FCP, TTFB
rage_click / dead_click / double_clickSeñales de frustración/UX
js_error / promise_rejection / resource_errorErrores de la página
+ ~30 másoutbound_click, cta_click, download_click, video_*, cookies_inventory, bot_signals, ad_blocker_detected, keystroke_rate, permission_state, pwa_*, …

API de Leads — relo('lead', {...})

Para clientes lead-gen (seguros, créditos, trials SaaS), usa la API explícita relo('lead', payload) en tu handler de submit. Distinta del evento automático form_submit: relo('lead', ...) te deja decidir qué submits califican como leads y adjuntar metadata (product, form_id, stage, lead_value) que aparece en el tab de Leads del partner. Incluye dedup client-side (30 min por email+form_id en localStorage) para no duplicar al refrescar la thank-you page.

// On form submit:
relo('lead', {
  email: 'user@example.com',    // hashed SHA-256 client-side
  phone: '+525555551234',       // hashed SHA-256 client-side
  name: 'Juan Perez',           // identity graph only
  product: 'Auto Insurance',    // shown in Leads tab
  form_id: 'quote-home-v2',
  stage: 'raw',                 // raw / qualified / rejected
  lead_value: 50,
  currency: 'USD',
  utm_source: 'facebook',
  utm_campaign: 'spring-2026',
  extra: {                      // namespaced to x_* in Relo
    coverage: 'full',
    vehicle_year: 2023
  }
});

Campos planos permitidos: product, form_id, lead_source, stage, lead_value, currency, utm_campaign, utm_source, notes, quote_id, product_type. Lo que pase en extra: {...} se copia con prefijo x_ (strings/numbers/booleans, máx 500 chars).

Privacidad

email/teléfono se hashean SHA-256 del lado cliente. Los partners solo ven un prefijo de 12 chars del hash — suficiente para dedup, no para ataques de diccionario. El PII crudo nunca sale del browser. (El endpoint server-side de lead push sí acepta PII completa — ver Pixel Setup § Opcional B.)

Atribución: el click wrapper t.relo.mx/c/:code pone la cookie _relo_cid en .relo.mx (visible server-side por p.relo.mx) y agrega &relo_click_id=<ulid> a la URL de destino; el pixel adopta ese valor y lo fija como cookie first-party en el dominio del cliente. Cada evento lleva el click_id y el ingest lo resuelve contra Redis para atribuir al partner y campaña. TTL: 30 días.

Session Replay (rrweb)

Para clientes pixel que opten, Relo graba sesiones DOM completas con rrweb y las reproduce en admin. Útil para depurar abandono de formulario y UX confuso. Apagado por default.

Tres gates para grabar

Todas deben ser verdaderas para que inicie la grabación:

  1. replay_enabled = true en la config del cliente (vía API, ver Pixel Setup § Opcional C)
  2. Consent bit 4 (0x10) — consentimiento del usuario
  3. random() * 100 < replay_sample_rate — control de costo 0-100

Privacy defaults

  • All form inputs masked (maskAllInputs: true)
  • password / email / phone get extra mask
  • no canvas, no fonts
  • mousemove disabled (clicks captured)

Almacenamiento

  • Bucket R2 relo-replays
  • Key: client={cid}/YYYY-MM-DD/session={sid}/chunk-NNNNN.json.gz
  • 90-day TTL

Playback: Pixel Analytics → tab Replays (/v2/c/:slug/pixel-analytics, solo admin). Click a session → lazy-loads rrweb-player → stitches chunks from R2.

Tracking Types: MMP vs Pixel vs Hybrid

Cada cliente tiene un tracking_type que controla qué dashboards ven los partners. Las campañas pueden sobrescribir el default.

TipoFuenteDashboards del partner
mmpAppsFlyer / Branch postbacks (Samsung-style)Dashboard / Analytics / Orders (MMP)
pixelRelo Web Pixel (Quote-style, lead-gen)PixelDashboard / PixelAnalytics / Leads
hybridAccept both sourcesdefaults to MMP views, pixel visible in admin

Se define al crear el cliente: wizard /v2/clients/new paso 1 (Identity). Se cambia después en Edit basics (/v2/c/:slug/setup-edit). Por campaña: Campaign Detail → Settings → Tracking Type o paso 1 del Campaign Launch Wizard.

On this page