Cloud Services

TrackAny.Click — Documentación

Leer como Markdown

01

Getting Started

1. Crea y verifica una única cuenta de Cloud. 2. Selecciona o crea la organización propietaria de la integración. 3. Crea un proyecto para el sitio, tienda o marca cuyos datos deban permanecer juntos. 4. Abre el espacio del producto y confirma que está habilitado antes de copiar credenciales o enviar tráfico de producción.

Con esto termina la configuración de la cuenta. Las secciones siguientes son guías de implementación. Las credenciales siempre pertenecen a un proyecto; los secretos de servidor nunca deben aparecer en código del navegador, repositorios públicos ni variables del cliente.

02

Antes de integrar

La recopilación de TrackAny.Click se activa por proyecto. Envía datos productivos solo cuando el espacio muestre una clave pública, el fragmento de instalación y una URL activa del collector. Una URL preparada o un script de otro proyecto no activa la recopilación.

03

Claves pública y secreta del proyecto

La clave pública pub_tac_ pertenece al navegador y está limitada a los dominios activos del proyecto. La clave sec_tac_ se muestra una vez al crear el proyecto, pertenece solo a un gestor de secretos del servidor y autentica eventos de servidor y llamadas identify.

Si no guardaste la clave secreta, no sustituyas la pública ni expongas una clave de servidor en el navegador. Solicita un reemplazo controlado antes de integrar eventos del backend; la rotación autoservicio de la clave secreta aún no está disponible.

04

Instalar el tracker en el navegador

Copia el fragmento específico del proyecto en TrackAny.Click → Instalación. El ejemplo carga el tracker desde connect.trackany.click, envía al mismo collector y empieza con consentimiento denegado. Usa la URL del script, el endpoint y la clave pública que aparecen en tu proyecto, incluida la dirección de un dominio de tracking propio ya verificado.

Tras el consentimiento de analítica, el tracker también recoge por defecto los futuros eventos de Meta Pixel y Google dataLayer/gtag de la página; las etiquetas existentes siguen funcionando. data-provider-events=false desactiva esta captura y data-google-layer permite indicar otro nombre para la capa de datos. data-spa=true añade la vista inicial y los cambios de History API. Los eventos anteriores a la carga del tracker no se pueden recuperar. data-track-outbound=true registra clics en enlaces HTTP(S) externos.

<script>
  window.trackany = window.trackany || function () {
    (window.trackany.q = window.trackany.q || []).push(arguments);
  };
</script>
<script async
  src="https://connect.trackany.click/v1/t.js"
  data-project="PUBLIC_PROJECT_KEY"
  data-endpoint="https://connect.trackany.click"
  data-consent="denied"
  data-spa="true"
  data-web-vitals="true"
  data-provider-events="true"
  data-track-outbound="true">
</script>
05

Conectar correctamente el consentimiento

Antes del consentimiento el tracker no crea identificadores, no accede a almacenamiento persistente ni envía eventos. Llama consent=granted solo cuando el gestor de consentimiento autorice analytics. En una retirada llama consent=denied; borra el estado local de TrackAny.Click y detiene eventos nuevos, pero no es una solicitud de borrado del servidor.

Evita datos personales en URLs, UTM y propiedades. Se eliminan querystrings y fragmentos de las URLs, se reduce el referrer y el SDK no usa fingerprinting.

06

Medir páginas, leads y conversiones

Usa nombres de evento snake_case en minúsculas. Marca objetivos reales con conversion=true y envía valor y moneda de tres letras siempre juntos. Las llamadas del navegador incluyen automáticamente el contexto consentido de visitante, sesión y atribución.

Usa un evento para un hecho de negocio. No informes la misma compra en navegador y servidor salvo que ambos eventos representen deliberadamente hechos distintos.

window.trackany("consent", "granted");
window.trackany("pageview");
window.trackany(
  "event",
  "form_submit",
  { form: "demo_request" },
  { conversion: true }
);
07

Ejemplos de eventos del navegador

Con data-spa=true, el tracker emite page_view para las vistas automáticas de la SPA. La llamada manual pageview emite el mismo tipo. Con data-track-outbound=true, los clics en enlaces HTTP(S) externos emiten outbound_click y solo incluyen destination_origin. El tracker crea sesiones automáticamente, pero no emite session_start por sí mismo. El comando consent cambia el permiso local de seguimiento; no es un evento.

Los demás nombres son convenciones sugeridas, no una lista cerrada: view_product, add_to_cart, begin_checkout, form_started y form_submit. Cada llamada window.trackany envía un evento tras el consentimiento de analítica. Usa properties para IDs o cantidades no sensibles y la opción conversion para objetivos reales.

window.trackany("pageview");

window.trackany("event", "view_product", { product_id: "sku_123" });
window.trackany("event", "add_to_cart", { product_id: "sku_123", quantity: 1 });
window.trackany("event", "begin_checkout", { cart_id: "cart_123" });
window.trackany("event", "form_started", { form_id: "demo" });
window.trackany("event", "form_submit", { form_id: "demo" }, { conversion: true });
window.trackany("event", "session_start");
08

Ejemplos de eventos del servidor

Envía hechos de negocio confirmados desde tu backend con una clave secreta: lead_created, lead_qualified, appointment_created, appointment_completed, order_created, purchase, refund, subscription_started, subscription_cancelled, deal_won y deal_lost. Son nombres sugeridos; la API también acepta nombres propios en snake_case minúscula de hasta 100 caracteres.

El ejemplo de Node.js usa el paquete ulid para crear una eventId válida. Instálalo en tu proyecto de servidor. Conserva la eventId y el cuerpo JSON exacto para reintentos. El importe debe ser no negativo y llevar una moneda de tres letras; registra un reembolso como otro evento en vez de una compra negativa. Marca como conversiones solo los objetivos reales.

import { ulid } from "ulid";

const endpoint = "https://connect.trackany.click/v1/events";
const secretKey = process.env.TRACKANY_SECRET_KEY;

async function sendEvent(event, properties = {}, fields = {}) {
  const body = {
    eventId: `evt_${ulid()}`,
    event,
    timestamp: new Date().toISOString(),
    properties,
    ...fields,
  };
  const response = await fetch(endpoint, {
    method: "POST",
    headers: {
      authorization: `Bearer ${secretKey}`,
      "content-type": "application/json",
    },
    body: JSON.stringify(body),
  });
  if (!response.ok) throw new Error(`TrackAny event rejected: ${response.status}`);
  return response.json();
}

await sendEvent("lead_created", { lead_id: "lead_123" }, { contactId: "crm_123" });
await sendEvent("lead_qualified", { lead_id: "lead_123" }, { contactId: "crm_123" });
await sendEvent("appointment_created", { appointment_id: "appt_123" });
await sendEvent("appointment_completed", { appointment_id: "appt_123" });
await sendEvent("order_created", { order_id: "ord_123" });
await sendEvent("purchase", { order_id: "ord_123" },
  { value: 49.90, currency: "USD", conversion: true });
await sendEvent("refund", { order_id: "ord_123" },
  { value: 49.90, currency: "USD" });
await sendEvent("subscription_started", { subscription_id: "sub_123" });
await sendEvent("subscription_cancelled", { subscription_id: "sub_123" });
await sendEvent("deal_won", { deal_id: "deal_123" }, { conversion: true });
await sendEvent("deal_lost", { deal_id: "deal_123" });
09

Enviar un evento confiable desde el servidor

Haz POST de JSON a /v1/events con la clave secreta como Bearer token. Los eventos de servidor pueden incluir contactId o externalId y se informan separados de los del navegador. Conserva eventId al reintentar: contenido idéntico se deduplica; contenido cambiado bajo la misma ID devuelve HTTP 409 event_id_conflict.

curl --request POST "https://connect.trackany.click/v1/events" \
  --header "Authorization: Bearer $TRACKANY_SECRET_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "eventId": "evt_01JZ8J2K9M7P4Q6R8S1T3V5W7X",
  "event": "purchase",
  "timestamp": "2026-09-08T17:00:00Z",
  "contactId": "crm_123",
  "value": 49.9,
  "currency": "USD",
  "conversion": true,
  "properties": {
    "plan": "pro"
  }
}'
10

Conectar un visitante con tu sistema

Tras un formulario o login, lee la visitorId consentida mediante window.trackany.getContext() y envíala desde el backend a POST /v1/identify con contactId, externalId o ambos. El endpoint exige la clave secreta; las claves públicas se rechazan.

curl --request POST "https://connect.trackany.click/v1/identify" \
  --header "Authorization: Bearer $TRACKANY_SECRET_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "visitorId": "vis_01JZ8J2K9M7P4Q6R8S1T3V5W7X",
  "contactId": "crm_123"
}'
11

Definir el modelo de eventos

Define un vocabulario pequeño antes de implementar, por ejemplo page_view → form_submitted → qualified_lead → purchase. Mantén actividad de adquisición y resultados posteriores como eventos distintos para que los informes muestren orden observado y nivel de confianza.

12

Conservar la atribución de campaña

Usa utm_source, utm_medium y utm_campaign coherentes e IDs estables como utm_id, utm_adgroup_id y utm_ad_id. TrackAny.Click separa primer touch, touch de sesión actual y último touch no directo; el nombre de campaña por sí solo no es una clave de unión fiable.

13

Lotes y resultados

Envía 1–100 eventos a /v1/events/batch cuando un proceso tenga varios hechos independientes. El servicio valida primero el lote completo y puede devolver HTTP 207 con resultados por evento si solo algunas escrituras funcionan. Conserva ID y payload para reintentos seguros.

14

Leer recorridos y tratar errores

HTTP 202 indica evento aceptado. Trata 400 como error de contrato o fecha, 401 como clave inválida, 402 como cuota o saldo requerido, 403 como origen bloqueado, 409 como reutilización cambiada de eventId y 429 como rate limit. Reintenta fallos transitorios con la misma ID y payload.

Los informes de recorridos y funnels son vistas limitadas, no un grafo de identidad. Muestran cobertura y truncamiento, separan monedas y fuentes de confianza y no afirman certeza entre dispositivos.