# Script de seguimiento

> Envía eventos de espacio de trabajo y personalizados desde tu web con el script de seguimiento de Emailit y una clave de seguimiento pública. Instálalo, registra eventos, identifica a los visitantes y limita la clave a tus sitios.

El script de seguimiento envía eventos desde tu web: visualizaciones de productos, altas, artículos añadidos a un carrito. No necesita ninguna llamada de configuración; la clave de seguimiento forma parte de su URL. Esta página explica cómo crear una clave, añadir el script, registrar eventos y vincularlos a tus visitantes.

## Antes de empezar

- El script de seguimiento está incluido en los planes Pro, Business y Custom. En Pay as you go no puedes crear claves de seguimiento, y las peticiones del script devuelven `403`, también con claves creadas antes de cambiar a Pay as you go.
- Para crear claves de seguimiento en el panel, necesitas el rol **Admin** en el espacio de trabajo. Con la API, usa una clave con **Full Access**.
- Necesitas poder editar el HTML de tu web o añadir una etiqueta HTML personalizada en tu gestor de etiquetas.

## Crear una clave de seguimiento

Las claves de seguimiento son públicas: van en tus páginas web, así que cualquiera puede leerlas. Solo pueden enviar eventos de espacio de trabajo y personalizados, nunca leer datos, y puedes limitarlas a tus propios sitios.

**Panel**

  1. **Abre el seguimiento.** Ve a **Email API → Events**, selecciona la pestaña **Tracking** y después **Create tracking key**.

  2. **Ponle nombre a la clave.** Introduce un **Name** que indique dónde se usa, como `Online shop`.

  3. **Limítala a tus sitios.** En **Allowed origins**, introduce tus sitios, uno por línea, por ejemplo `https://shop.example.com` o `*.example.com`. Déjalo vacío para aceptar cualquier sitio. Consulta [Sitios permitidos](#allowed-sites).

  4. **Créala.** Selecciona **Create**. La pestaña **Tracking** muestra ahora el fragmento de código con tu clave ya incluida.

**API**

  Llama a [Crear una clave de seguimiento](/es/docs/api-reference/tracking-keys/create/). La `key` de la respuesta va en la URL del script.

```bash
curl -X POST https://api.emailit.com/v2/tracking-keys \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Online shop", "allowed_origins": ["https://shop.example.com"] }'
```

## Añadir el script

Pega las dos etiquetas en todas las páginas, idealmente antes de `</head>`, con tu clave en lugar de `TRACKING_KEY`:

```html
<script>window.emailit=window.emailit||function(){(window._emailitq=window._emailitq||[]).push(arguments)};</script>
<script async src="https://js.emailit.com/track/TRACKING_KEY/events.js"></script>
```

La primera etiqueta pone en cola las llamadas que se hacen antes de que se cargue el script, así que puedes llamar a `emailit(...)` de inmediato. El script se carga de forma asíncrona, nunca lanza errores en tu página y también funciona desde un gestor de etiquetas.

- Si el [script de formularios](/es/docs/forms/install/) de Emailit también está en la página, mantén los dos. Comparten `window.emailit`.
- Si tu web usa una Content Security Policy, permite `https://js.emailit.com` en `script-src` y `connect-src`.

## Registrar eventos

```javascript
// Custom event: any name after "c:", any properties
emailit("track", "c:product.viewed", { sku: "TS-42", price: 19.9 });

// Workspace event: checked against its definition
emailit("track", "w:customer.type", { segment: "b2b" });
```

El tipo tiene que empezar por `c:` o `w:`; el script ignora las demás llamadas. Las propiedades que no son un objeto se envían como `{}`. Puedes pasar un tercer argumento con `occurred_at`, una fecha y hora ISO 8601, para eventos que ocurrieron antes.

El script no registra por sí solo las visitas a páginas. Registra las páginas y las acciones que te interesan, por ejemplo un evento `c:page.viewed` en cada cambio de ruta de una aplicación de una sola página.

### Comandos de tienda

Para las tiendas online, el script también tiene los comandos `product`, `cart`, `purchase` y `page`. Registran visualizaciones de productos, carritos y pedidos para [Comercio electrónico](/es/docs/commerce/) y los envían al registro de eventos como los eventos de sistema `product.viewed`, `cart.updated` y `order.placed`. Comercio electrónico está en alfa y solo está abierto al equipo de Emailit; en los demás espacios de trabajo, estos comandos se rechazan. Consulta [Conectar tu tienda](/es/docs/commerce/connect-your-shop/#record-shop-activity).

## Identificar a los visitantes

En cuanto sepas quién es el visitante, por ejemplo cuando inicia sesión o se suscribe, indícaselo al script:

```javascript
emailit("identify", { email: "jane@example.com" });
// or, if you store Emailit contact IDs:
emailit("identify", { contact_id: "con_2wPq7Lm3XcN8bV1zKd4RtY6sHf9" });
```

Todos los eventos posteriores llevan ese email o ese ID de contacto, en esta página y en las visitas siguientes, para que Emailit pueda vincularlos al contacto. Cuando el visitante cierre sesión, olvídalo:

```javascript
emailit("reset");
```

`reset` también crea un nuevo ID de visitante anónimo, para que la siguiente persona que use un ordenador compartido no se confunda con la anterior.

Los eventos con un email que no tiene ningún contacto se conservan, y aparecen en el contacto en cuanto exista. Un `contact_id` que no coincide con ningún contacto se quita del evento, sin error, para que no se pueda usar una clave pública para averiguar qué ID de contacto existen.

Cualquiera que tenga tu clave de seguimiento puede llamar a `identify` con cualquier dirección, así que Emailit no deja que los eventos del script actúen sobre las automatizaciones. Se registran, aparecen en el contacto y llegan a los webhooks, pero no inician, terminan ni hacen avanzar [ejecuciones de automatizaciones](/es/docs/automations/triggers/#custom-event). Envía desde tu servidor, con la [API de eventos](/es/docs/events/send-events/), los eventos que deban hacerlo. Cada evento del script que identifica a un contacto tiene `identity_verified`: es `true` solo cuando un enlace firmado de uno de tus emails identificó al visitante, lo que forma parte de la fase alfa de [Comercio electrónico](/es/docs/commerce/connect-your-shop/#identify-visitors), y esos eventos sí actúan sobre las automatizaciones.

## Qué envía el script

Además de tu tipo y tus propiedades, cada evento lleva:

| Campo | Contenido |
| --- | --- |
| `anonymous_id` | Un ID de visitante aleatorio (`anon_…`), guardado en el almacenamiento local del navegador. |
| `email`, `contact_id` | Lo que hayas pasado a `identify`, si has pasado algo. |
| `context.page` | Los valores `url`, `path`, `title` y `referrer` de la página. |
| `context.campaign` | Los parámetros UTM de la página (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`), como `source`, `medium`, `name`, `term` y `content`. |
| `context.locale`, `context.timezone` | El idioma y la zona horaria del navegador. |

Emailit añade `identity_verified` a los eventos que identifican a un contacto (consulta [Identificar a los visitantes](#identify-visitors)) y guarda el agente de usuario (user agent) del navegador. No guarda direcciones IP, y el script no crea cookies. Guarda el ID de visitante en `emailit:aid` y la identidad en `emailit:identity`, en el almacenamiento local; si el almacenamiento local está bloqueado, solo se mantienen mientras la página está abierta.

Los eventos se acumulan durante un momento y se envían juntos, como máximo 20 cada vez. Cuando el visitante sale de la página, los que quedan se envían con `sendBeacon`.

Si en tu web necesitas consentimiento para la analítica, carga el script solo después de que el visitante lo acepte.

## Sitios permitidos

`allowed_origins` limita qué sitios pueden enviar eventos con una clave. Cada entrada es de uno de estos tipos:

| Entrada | Coincide con |
| --- | --- |
| `https://shop.example.com` | Exactamente ese origen: esquema, host y puerto. |
| `shop.example.com` | Ese host con cualquier esquema o puerto. |
| `*.example.com` | `example.com` y todos sus subdominios. |

Una lista vacía acepta cualquier sitio. Emailit comprueba la cabecera `Origin` que los navegadores envían con cada petición, así que otras webs no pueden enviar eventos con tu clave. Pero un script que se ejecute fuera de un navegador puede poner cualquier cabecera, así que trata los eventos del navegador como datos no fiables y envía los pedidos y los pagos [desde tu backend](/es/docs/events/send-events/).

## Eventos no válidos

A diferencia de la API, el endpoint del script guarda los eventos válidos de una petición aunque otros no lo sean. Los eventos no válidos se descartan, por ejemplo un evento `w:` con una propiedad del tipo incorrecto, o un evento de un tipo nuevo cuando el espacio de trabajo ya usa el número de [tipos de eventos](/es/docs/events/#limits) de su plan. Usa la [depuración](#debug) para ver el motivo.

## Depuración

Activa los mensajes en la consola del navegador de cualquiera de estas formas:

- Llama a `emailit("debug", true)`.
- Añade `data-debug` a la etiqueta script.
- Abre la página con `?emailit_debug=1` en la URL.

Entonces la consola muestra cada evento y la respuesta de Emailit, con los motivos de los eventos rechazados.

## Solución de problemas

| Respuesta en la consola | Causa | Solución |
| --- | --- | --- |
| `403` `Origin not allowed for this tracking key` | El sitio de la página no está en **Allowed origins**. | Añádelo, por ejemplo `https://example.com` y también `https://www.example.com`, o usa `*.example.com`. |
| `403` `This tracking key is disabled` | La clave está desactivada. | Actívala en la pestaña **Tracking**. |
| `403` `Website tracking is included with Pro and Business.` | El espacio de trabajo está en Pay as you go. | Cambia a Pro o Business. |
| `404` `Unknown tracking key` | La clave de la URL del script se eliminó o se escribió mal. | Vuelve a copiar el fragmento de código de la pestaña **Tracking**. |
| `422` con todos los eventos en `rejected` | Ninguno de los eventos era válido. | Comprueba los motivos en `rejected`. |
| `429` | La clave envió demasiados eventos en poco tiempo. | Envía menos eventos por visitante; por ejemplo, no envíes un evento por cada desplazamiento o movimiento del ratón. |
| Nada en absoluto | Un bloqueador de anuncios o de rastreo detuvo el script, o el script no está en la página. | Prueba en un navegador sin bloqueadores y comprueba que el fragmento de código está en la página. |

## Ver también

  - [Seguimiento de eventos](/es/docs/events/): Ámbitos, nombres y adónde van los eventos.
  - [Eventos de espacio de trabajo](/es/docs/events/workspace-events/): Define eventos y sus propiedades.
  - [API de claves de seguimiento](/es/docs/api-reference/tracking-keys/): Crea, actualiza y elimina claves.
  - [Enviar eventos desde tu backend](/es/docs/events/send-events/): Para pedidos y pagos.

---
Fuente: https://emailit.com/es/docs/events/tracking-script/
