# Script de suivi

> Envoyez des événements d’espace de travail et des événements personnalisés depuis votre site web avec le script de suivi Emailit et une clé de suivi publique. Installez-le, suivez des événements, identifiez les visiteurs et limitez la clé à vos sites.

Le script de suivi envoie des événements depuis votre site web : consultations de produits, inscriptions, articles ajoutés au panier. Il ne nécessite aucun appel d’initialisation : la clé de suivi fait partie de son URL. Cette page explique comment créer une clé, ajouter le script, suivre des événements et les rattacher à vos visiteurs.

## Avant de commencer

- Le script de suivi est inclus dans les forfaits Pro, Business et Custom. Sur Pay as you go, vous ne pouvez pas créer de clés de suivi, et les requêtes du script renvoient `403`, y compris avec des clés créées avant un passage à Pay as you go.
- Pour créer des clés de suivi dans le tableau de bord, vous devez avoir le rôle **Admin** dans l’espace de travail. Avec l’API, utilisez une clé **Full Access**.
- Vous devez pouvoir modifier le HTML de votre site, ou ajouter une balise HTML personnalisée dans votre gestionnaire de balises.

## Créer une clé de suivi

Les clés de suivi sont publiques : elles figurent dans vos pages web, donc n’importe qui peut les lire. Elles peuvent seulement envoyer des événements d’espace de travail et des événements personnalisés, jamais lire de données, et vous pouvez les limiter à vos propres sites.

**Tableau de bord**

  1. **Ouvrez l’onglet Tracking.** Accédez à **Email API → Events**, sélectionnez l’onglet **Tracking**, puis **Create tracking key**.

  2. **Nommez la clé.** Saisissez un **Name** qui indique où elle est utilisée, par exemple `Online shop`.

  3. **Limitez-la à vos sites.** Sous **Allowed origins**, saisissez vos sites, un par ligne, par exemple `https://shop.example.com` ou `*.example.com`. Laissez le champ vide pour accepter n’importe quel site. Consultez [Sites autorisés](#allowed-sites).

  4. **Créez la clé.** Sélectionnez **Create**. L’onglet **Tracking** affiche alors l’extrait de code avec votre clé déjà renseignée.

**API**

  Appelez [Créer une clé de suivi](/fr/docs/api-reference/tracking-keys/create/). La valeur `key` de la réponse s’insère dans l’URL du 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"] }'
```

## Ajouter le script

Collez les deux balises dans chaque page, idéalement avant `</head>`, en remplaçant `TRACKING_KEY` par votre clé :

```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 première balise met en file d’attente les appels effectués avant le chargement du script : vous pouvez donc appeler `emailit(...)` immédiatement. Le script se charge de manière asynchrone, ne lève jamais d’erreur dans votre page et fonctionne aussi depuis un gestionnaire de balises.

- Si le [script de formulaires](/fr/docs/forms/install/) Emailit est aussi sur la page, gardez les deux. Ils partagent `window.emailit`.
- Si votre site utilise une Content Security Policy, autorisez `https://js.emailit.com` dans `script-src` et `connect-src`.

## Suivre des événements

```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" });
```

Le type doit commencer par `c:` ou `w:` ; le script ignore les autres appels. Des propriétés qui ne sont pas un objet sont envoyées sous la forme `{}`. Vous pouvez passer un troisième argument avec `occurred_at`, une date et heure ISO 8601, pour les événements survenus plus tôt.

Le script n’enregistre pas les pages vues de lui-même. Suivez les pages et les actions qui vous intéressent, par exemple avec un événement `c:page.viewed` à chaque changement de route d’une application monopage.

### Appels pour les boutiques

Pour les boutiques en ligne, le script dispose aussi des appels `product`, `cart`, `purchase` et `page`. Ils enregistrent les consultations de produit, les paniers et les commandes pour [Commerce](/fr/docs/commerce/) et les envoient au journal des événements sous la forme des événements système `product.viewed`, `cart.updated` et `order.placed`. Commerce est en alpha et réservé à l’équipe Emailit ; ailleurs, ces appels sont refusés. Consultez [Connecter votre boutique](/fr/docs/commerce/connect-your-shop/#record-shop-activity).

## Identifier les visiteurs

Dès que vous savez qui est le visiteur, par exemple après sa connexion ou son inscription, indiquez-le au script :

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

Chaque événement suivant porte cette adresse e-mail ou cet ID de contact, sur cette page comme lors des visites suivantes, pour qu’Emailit puisse le rattacher au contact. Lorsque le visiteur se déconnecte, oubliez-le :

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

`reset` crée aussi un nouvel ID de visiteur anonyme : la personne suivante sur un ordinateur partagé n’est donc pas confondue avec la précédente.

Les événements dont l’adresse e-mail n’appartient à aucun contact sont conservés, et ils apparaissent sur le contact dès qu’il existe. Un `contact_id` qui ne correspond à aucun contact est retiré de l’événement, sans erreur : une clé publique ne permet donc pas de tester quels ID de contact existent.

Toute personne qui dispose de votre clé de suivi peut appeler `identify` avec n’importe quelle adresse : Emailit ne laisse donc pas les événements du script piloter les automatisations. Ils sont enregistrés, apparaissent sur le contact et parviennent aux webhooks, mais ne démarrent pas, ne terminent pas et ne font pas avancer les [exécutions d’automatisation](/fr/docs/automations/triggers/#custom-event). Envoyez les événements qui doivent le faire depuis votre serveur avec l’[API des événements](/fr/docs/events/send-events/). Chaque événement du script qui nomme un contact contient `identity_verified` : ce champ vaut `true` uniquement quand un lien signé dans l’un de vos e-mails a identifié le visiteur, ce qui fait partie de l’alpha [Commerce](/fr/docs/commerce/connect-your-shop/#identify-visitors), et ces événements-là pilotent bien les automatisations.

## Ce que le script envoie

Outre votre type et vos propriétés, chaque événement contient :

| Champ | Contenu |
| --- | --- |
| `anonymous_id` | Un ID de visiteur aléatoire (`anon_…`), conservé dans le stockage local du navigateur. |
| `email`, `contact_id` | Ce que vous avez transmis à `identify`, le cas échéant. |
| `context.page` | Les valeurs `url`, `path`, `title` et `referrer` de la page. |
| `context.campaign` | Les paramètres UTM de la page (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`), sous la forme `source`, `medium`, `name`, `term` et `content`. |
| `context.locale`, `context.timezone` | La langue et le fuseau horaire du navigateur. |

Emailit ajoute `identity_verified` aux événements qui nomment un contact (voir [Identifier les visiteurs](#identify-visitors)) et enregistre l’agent utilisateur (user agent) du navigateur. Il n’enregistre pas les adresses IP, et le script ne dépose aucun cookie. Le script conserve l’ID de visiteur sous `emailit:aid` et l’identité sous `emailit:identity` dans le stockage local ; si le stockage local est bloqué, ils ne durent que le temps de la page.

Les événements sont regroupés pendant un court instant et envoyés ensemble, 20 au maximum à la fois. Lorsque le visiteur quitte la page, les événements restants sont envoyés avec `sendBeacon`.

Si vous avez besoin d’un consentement pour la mesure d’audience sur votre site, ne chargez le script qu’après l’accord du visiteur.

## Sites autorisés

`allowed_origins` limite les sites qui peuvent envoyer des événements avec une clé. Chaque entrée prend l’une de ces formes :

| Entrée | Correspond à |
| --- | --- |
| `https://shop.example.com` | Exactement cette origine : schéma, hôte et port. |
| `shop.example.com` | Cet hôte, quels que soient le schéma et le port. |
| `*.example.com` | `example.com` et tous ses sous-domaines. |

Une liste vide accepte n’importe quel site. Emailit vérifie l’en-tête `Origin` que les navigateurs envoient avec chaque requête : d’autres sites web ne peuvent donc pas envoyer d’événements avec votre clé. Un script exécuté hors d’un navigateur peut toutefois définir n’importe quel en-tête. Traitez donc les événements du navigateur comme des données non fiables, et envoyez les commandes et les paiements [depuis votre backend](/fr/docs/events/send-events/).

## Événements invalides

Contrairement à l’API, l’endpoint du script enregistre les événements valides d’une requête même lorsque d’autres sont invalides. Les événements invalides sont ignorés, par exemple un événement `w:` avec une propriété du mauvais type, ou un événement d’un nouveau type une fois que l’espace de travail utilise le nombre de [types d’événements](/fr/docs/events/#limits) de son forfait. Utilisez le [débogage](#debug) pour en voir la raison.

## Débogage

Activez la journalisation dans la console du navigateur de l’une de ces façons :

- Appelez `emailit("debug", true)`.
- Ajoutez `data-debug` à la balise script.
- Ouvrez la page avec `?emailit_debug=1` dans l’URL.

La console affiche alors chaque événement et la réponse d’Emailit, y compris les raisons des rejets.

## Dépannage

| Réponse dans la console | Cause | Solution |
| --- | --- | --- |
| `403` `Origin not allowed for this tracking key` | Le site de la page ne figure pas dans **Allowed origins**. | Ajoutez-le, par exemple à la fois `https://example.com` et `https://www.example.com`, ou utilisez `*.example.com`. |
| `403` `This tracking key is disabled` | La clé est désactivée. | Activez-la dans l’onglet **Tracking**. |
| `403` `Website tracking is included with Pro and Business.` | L’espace de travail est sur Pay as you go. | Passez au forfait Pro ou Business. |
| `404` `Unknown tracking key` | La clé de l’URL du script a été supprimée ou mal saisie. | Copiez de nouveau l’extrait de code depuis l’onglet **Tracking**. |
| `422` avec tous les événements dans `rejected` | Aucun des événements n’était valide. | Vérifiez les raisons dans `rejected`. |
| `429` | La clé a envoyé trop d’événements en peu de temps. | Envoyez moins d’événements par visiteur, par exemple aucun événement à chaque défilement ou mouvement de souris. |
| Rien du tout | Un bloqueur de publicités ou de traçage a arrêté le script, ou celui-ci n’est pas sur la page. | Testez dans un navigateur sans bloqueur et vérifiez que l’extrait de code est bien présent. |

## Voir aussi

  - [Suivi des événements](/fr/docs/events/): Portées, noms et destination des événements.
  - [Événements d’espace de travail](/fr/docs/events/workspace-events/): Définissez des événements et leurs propriétés.
  - [API des clés de suivi](/fr/docs/api-reference/tracking-keys/): Créer, mettre à jour et supprimer des clés.
  - [Envoyer des événements depuis votre backend](/fr/docs/events/send-events/): Pour les commandes et les paiements.

---
Source: https://emailit.com/fr/docs/events/tracking-script/
