# Événements communs

## page\_view <a href="#page_view" id="page_view"></a>

La `page_view` call vous permet d’enregistrer chaque fois qu’un utilisateur voit une page de votre site web, ainsi que toutes les propriétés optionnelles concernant la page.

**Paramètres (requis et recommandés)**

<table><thead><tr><th width="144">Nom</th><th width="99">Type</th><th width="82">Requis</th><th width="160">Valeur d’exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>page_type</code></td><td><code>string</code></td><td><strong>Oui</strong></td><td>product_list</td><td><p>Catégorie de page. Types prédéfinis recommandés :</p><ul><li>home</li><li>landing</li><li>product_list</li><li>product</li><li>content_list</li><li>content</li><li>search</li><li>funnel</li><li>success</li><li>funnel_confirmation</li><li>account</li><li>cart</li><li>legal (e.g. Privacy Policy)</li></ul><p>Équivalent à <code>tc_vars.env_template</code></p></td></tr><tr><td><code>page_name</code></td><td><code>string</code></td><td>No</td><td>Suggestion pour la fête des mères</td><td>Nom de la page.</td></tr><tr><td><code>user</code></td><td><a href="#user"><code>Object&#x3C;User></code></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr><tr><td><code>type</code><br>(deprecated)</td><td><code>string</code></td><td>No</td><td>product_list</td><td>Catégorie de page.</td></tr></tbody></table>

**Paramètres ajoutés automatiquement par l’API cact pour les sources web**

<table><thead><tr><th width="133">Nom</th><th width="103">Type</th><th width="81">Requis</th><th width="161">Valeur d’exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>user</code></td><td><a href="#user">Object &#x3C;User></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr><tr><td><code>title</code></td><td><code>string</code></td><td>No</td><td>Products - MySite.com</td><td>Titre de la page :<a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/title"><code>document.title</code></a> depuis le DOM API</td></tr><tr><td><code>url</code></td><td><code>string</code></td><td>No</td><td><a href="http://www.mysite.com">http://www.mysite.com</a></td><td>URL complète de la page. Équivalent à<a href="https://developer.mozilla.org/en-US/docs/Web/API/Location"><code>location.href</code></a> depuis le DOM API.</td></tr><tr><td><code>path</code></td><td><code>string</code></td><td>No</td><td>/products/mothers</td><td>Partie chemin de l’URL de la page : <a href="https://developer.mozilla.org/en-US/docs/Web/API/Location"><code>location.pathname</code></a> depuis le DOM API.</td></tr><tr><td><code>referrer</code></td><td><code>string</code></td><td>No</td><td><a href="http://www.example.com">http://www.example.com</a></td><td>URL complète de la page précédente : <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer"><code>document.referrer</code></a> depuis le DOM API.</td></tr></tbody></table>

**Exemple**

{% tabs %}
{% tab title="JavaScript" %}

```javascript
cact('trigger','page_view', {
  page_type: 'product_list',
  page_name: 'Best sellers',
  user: {
    id: '12356',
    email:'toto@domain.fr',
    consent_categories: [1,3]
  }
});
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val event = TCPageViewEvent("product_list")
event.pageName = "Best sellers"
serverside.execute(event)
```

{% endtab %}

{% tab title="Java  (Android)" %}

```java
TCPageViewEvent event = new TCPageViewEvent("product_list")
event.pageName = "Best sellers";
serverside.execute(event);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
TCPageViewEvent *event = [[TCPageViewEvent alloc] init];
event.pageType = @"product_list";
event.pageName = @"Best sellers";
[TCS execute: event];

//or you could also use it in a constructor, as follow:
TCPageViewEvent *event = [[TCPageViewEvent alloc] initWithType: @"type"];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let event = TCPageViewEvent(type: "product list")
	event?.pageName = "Best sellers"
	serverside?.execute(event)
```

{% endtab %}

{% tab title="Dart (Flutter)" %}

```dart
var event = TCPageViewEvent();
    event.pageName = "event_page_name";
    event.pageType = "event_page_type";
    serverside.execute(event);
```

{% endtab %}

{% tab title="json" %}

```json
{
    "event_name": "page_view", 
        "page_type": "product_list",
        "page_name": "Best sellers"   
}
```

{% endtab %}
{% endtabs %}

## login <a href="#login" id="login"></a>

Envoyez cet événement pour indiquer qu’un utilisateur s’est connecté.

#### Paramètres <a href="#parameters_14" id="parameters_14"></a>

<table><thead><tr><th width="119">Nom</th><th width="103">Type</th><th width="110">Requis</th><th width="224">Exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>method</code></td><td><code>string</code></td><td>No</td><td>LinkedIn</td><td>La méthode utilisée pour se connecter.</td></tr><tr><td><code>user</code></td><td><a href="#user"><code>Object&#x3C;User></code></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr></tbody></table>

**Exemple**

{% tabs %}
{% tab title="JavaScript" %}

```javascript
cact('trigger', 'login', {
  method: 'LinkedIn',
  user: {
    id: '12356',
    email:'toto@domain.fr',
    consent_categories: [1,3]
  }
});
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val event = TCLoginEvent()
event.method = "LinkedIn"
serverside.execute(event)
```

{% endtab %}

{% tab title="Java  (Android)" %}

```java
TCLoginEvent event = new TCLoginEvent();
event.method = "LinkedIn";
serverside.execute(event);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
TCLoginEvent *event = [[TCLoginEvent alloc] init];
event.method = @"LinkedIn";
[TCS execute: event];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let event = TCLoginEvent()
	event.method = "linkedin"
	serverside?.execute(event)
```

{% endtab %}

{% tab title="Dart (Flutter)" %}

```dart
var event = TCLoginEvent();
    event.method = "LinkedIn";
    serverside.execute(event);
```

{% endtab %}

{% tab title="json" %}

```json
{
    "event_name": "login",
        "method": "LinkedIn"
}
```

{% endtab %}
{% endtabs %}

## search

Utilisez cet événement pour contextualiser les opérations de recherche. Cet événement peut vous aider à identifier le contenu le plus populaire dans votre application.

#### Paramètres <a href="#parameters_21" id="parameters_21"></a>

<table><thead><tr><th width="169">Nom</th><th width="102">Type</th><th width="82">Requis</th><th width="148">Valeur d’exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>search_term</code></td><td><code>string</code></td><td><strong>Oui</strong></td><td>t-shirts</td><td>Le terme recherché.</td></tr><tr><td><code>user</code></td><td><a href="#user"><code>Object&#x3C;User></code></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr></tbody></table>

**Exemple**

{% tabs %}
{% tab title="JavaScript" %}

```javascript
cact('trigger','search', {
  search_term: 't-shirts',
  user: {
    id: '12356',
    email:'toto@domain.fr',
    consent_categories: [1,3]
  }
});
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val event = TCSearchEvent("t-shirts")
serverside.execute(event)
```

{% endtab %}

{% tab title="Java  (Android)" %}

```java
TCSearchEvent event = new TCSearchEvent("t-shirts");
serverside.execute(event);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
TCSearchEvent *event = [[TCSearchEvent alloc] init];
event.searchTerm = @"t-shirts";
[TCS execute: event];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

<pre class="language-swift"><code class="lang-swift">let event = TCSearchEvent(searchTerm: "t-shirts")
<strong>    serverside.execute(event)
</strong></code></pre>

{% endtab %}

{% tab title="Dart (Flutter)" %}

```dart
var event = TCSearchEvent();
    event.searchTerm = "t-shirts";
    serverside.execute(event);
```

{% endtab %}

{% tab title="json" %}

```json
{
    "event_name": "search",
        "search_term": "t-shirts"
}
```

{% endtab %}
{% endtabs %}

## select\_content

Cet événement indique qu'un utilisateur a sélectionné un contenu d'un certain type. Cet événement peut vous aider à identifier les contenus populaires et les catégories de contenus dans votre application ou les clics sur une promotion interne.

#### Paramètres <a href="#parameters_22" id="parameters_22"></a>

<table><thead><tr><th width="175">Nom</th><th width="100">Type</th><th width="76">Requis</th><th width="159">Valeur d’exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>content_type</code></td><td><code>string</code></td><td>No</td><td>product</td><td>Le type de contenu sélectionné.</td></tr><tr><td><code>item_id</code></td><td><code>string</code></td><td>No</td><td>I_12345</td><td>Un identifiant pour l'article qui a été sélectionné.</td></tr><tr><td><code>user</code></td><td><a href="#user"><code>Object&#x3C;User></code></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr></tbody></table>

**Exemple**

{% tabs %}
{% tab title="JavaScript" %}

```javascript
cact('trigger','select_content', {
  content_type: 'product',
  item_id: 'I_12345',
  user: {
    id: '12356',
    email:'toto@domain.fr',
    consent_categories: [1,3]
  }
});
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val event = TCSelectContentEvent()
event.contentType = "product"
serverside.execute(event)
```

{% endtab %}

{% tab title="Java  (Android)" %}

```
TCSelectContentEvent event = new TCSelectContentEvent();
event.contentType = "product";
serverside.execute(event);
```

{% endtab %}

{% tab title="Objective-C (iOS)" %}

```objectivec
TCSelectContentEvent *event = [[TCSelectContentEvent alloc] init];
event.contentType = @"product";
event.itemID = @"I_12345";
[TCS execute: event];
```

{% endtab %}

{% tab title="Swift (iOS)" %}

```swift
let event = TCSelectContentEvent()
	event.contentType = "product"
	event.itemID = "I_12345"
	serverside?.execute(event)
```

{% endtab %}

{% tab title="Dart (Flutter)" %}

```dart
var event = TCSelectContentEvent();
    event.contentType = "product";
    event.itemId = "I_12345";
    serverside.execute(event);
```

{% endtab %}

{% tab title="json" %}

```json
{
    "event_name": "select_content",
        "content_type": "product",
        "item_id": "I_12345"
}
```

{% endtab %}
{% endtabs %}

## sign\_up <a href="#sign_up" id="sign_up"></a>

Cet événement indique qu'un utilisateur s'est inscrit à un compte.

#### Paramètres **(requis et recommandé)** <a href="#parameters_27" id="parameters_27"></a>

<table><thead><tr><th width="117">Nom</th><th width="102">Type</th><th width="104">Requis</th><th width="160">Exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>method</code></td><td><code>string</code></td><td>No</td><td>Facebook</td><td>La méthode utilisée pour l'inscription.</td></tr><tr><td><code>user</code></td><td><a href="#user"><code>Object&#x3C;User></code></a></td><td>Oui</td><td><p><code>{</code><br><code>id: '12345',</code><br><code>email: 'toto@domain.fr',</code></p><p><code>consent_categories: [1,3]</code></p><p><code>}</code></p></td><td><p><code>consent_categories</code> est la liste des consentements de l’utilisateur. Elle est automatiquement remplie à partir des sources web si vous utilisez Commanders Act CMP.</p><p>Vous devriez également ajouter toutes les propriétés de l’utilisateur dans cet objet user, en particulier la clé de rapprochement (id, email).</p></td></tr></tbody></table>

**Exemple**

{% tabs %}
{% tab title="Javascript" %}

```javascript
cact('trigger','sign_up', {
  method: 'email',
  user: {
    id: '12356',
    email:'toto@domain.fr',
    consent_categories: [1,3]
  }
});
```

{% endtab %}

{% tab title="Kotlin (Android)" %}

```kotlin
val event = TCSignUpEvent()
event.method = "email"
serverside.execute(event)
```

{% endtab %}

{% tab title="Java  (Android)" %}

```java
TCSignUpEvent event = new TCSignUpEvent();
event.method = "email";
serverside.execute(event);
```

{% endtab %}

{% tab title="iOS" %}

```objectivec
TCSignUpEvent *event = [[TCSignUpEvent alloc] init];
event.method = @"email";
[TCS execute: event];
```

{% endtab %}

{% tab title="Swift" %}

```swift
let event = TCSignUpEvent()
	event.method = "email"
	serverside?.execute(event)
```

{% endtab %}

{% tab title="Flutter" %}

```dart
var event = TCSignUpEvent();
    event.method = "email";
    serverside.execute(event);
```

{% endtab %}

{% tab title="json" %}

```json
{
    "event_name": "sign_up",
        "method": "email"
}
```

{% endtab %}
{% endtabs %}

## - SCHÉMAS COMMUNS -

### User

Lorsque vous envoyez un événement, il doit contenir suffisamment d'informations pour identifier quel utilisateur l'a généré. Nous pouvons relier les événements entre eux à l'aide des cookies. Mais les partenaires de destination ont besoin d'identifiants précis pour agir.

`id` et `email` sont généralement les paramètres les plus utiles. Cependant, certains partenaires de destination utilisent aussi `firstname`, `lastname`, `birthdate`, `city`, ...

Vous n'aurez pas toujours tous ces paramètres. Mais il est recommandé de les envoyer dès que possible pendant la navigation de l'utilisateur.

#### Paramètres **(requis et recommandé)** <a href="#parameters_17" id="parameters_17"></a>

<table><thead><tr><th width="229">Nom</th><th width="118">Type</th><th width="104">Requis</th><th>Valeur d’exemple</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td><code>string</code></td><td>No*</td><td>845454</td><td><p>Identifiant principal de l'utilisateur (ex. ID CRM)</p><p>(*) requis pour de nombreuses destinations et pour le traitement interne.</p></td></tr><tr><td><code>email</code></td><td><code>string</code></td><td>Yes*</td><td>john.doe@example.com</td><td><p>Email (valeur en clair)</p><p>(*) requis pour de nombreuses destinations et pour le traitement interne. Non requis si <code>email_sha256</code> est fourni</p></td></tr><tr><td><code>email_md5</code></td><td><code>string</code></td><td>No*</td><td>8eb1b52... (size 32)</td><td>Email, haché avec l' <a href="https://en.wikipedia.org/wiki/MD5">algorithme MD5</a>. Non requis si <code>email</code> est fourni (voir ci-dessous)</td></tr><tr><td><code>email_sha256</code></td><td><code>string</code></td><td>No*</td><td>836f82d... (size 64)</td><td>Email, haché avec l' <a href="https://en.wikipedia.org/wiki/SHA-2">algorithme SHA-256</a>. Non requis si <code>email</code> est fourni (voir ci-dessous)</td></tr><tr><td><code>phone</code></td><td><code>string</code></td><td>No*</td><td>+33612345678</td><td>Numéro de téléphone, <a href="https://en.wikipedia.org/wiki/E.164">E.164</a> format<br>(*) requis pour certaines destinations.</td></tr><tr><td><code>firstname</code></td><td><code>string</code></td><td>No</td><td>John</td><td>Prénom</td></tr><tr><td><code>lastname</code></td><td><code>string</code></td><td>No</td><td>Doe</td><td>Nom de famille</td></tr><tr><td><code>gender</code></td><td><code>string</code></td><td>No</td><td>m</td><td><p>Genre</p><ul><li><code>f</code> pour Femme</li><li><code>m</code> pour Homme</li></ul></td></tr><tr><td><code>birthdate</code></td><td><code>string</code></td><td>No</td><td>1970-01-01</td><td>Date de naissance, <code>YYYY-MM-DD</code> format</td></tr><tr><td><code>city</code></td><td><code>string</code></td><td>No</td><td>Boston</td><td>Ville</td></tr><tr><td><code>state</code></td><td><code>string</code></td><td>No</td><td>Massachusetts</td><td>État</td></tr><tr><td><code>zipcode</code></td><td><code>string</code></td><td>No</td><td>02108</td><td>Code postal</td></tr><tr><td><code>country</code></td><td><code>string</code></td><td>No</td><td>USA</td><td>Code pays, ISO 3166-1 <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">2 lettres</a> ou <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3">3 lettres</a> formats</td></tr><tr><td><code>consent_categories</code></td><td><code>Array</code></td><td><strong>Oui</strong></td><td>[1,2,3]</td><td>Catégories de consentement de l'utilisateur.<br>Nécessaire pour accorder le partage de données avec les partenaires de destination. Il est automatiquement renseigné à partir des sources web si vous utilisez Commanders Act CMP.</td></tr></tbody></table>

**À propos du hachage**

Dans certains cas, vous ne pourrez pas envoyer un paramètre **en clair** . Il est soit indisponible, soit restreint.

Il peut donc être possible d'envoyer les **hachées** valeurs. Nous acceptons actuellement 2 algorithmes : [`md5`](https://en.wikipedia.org/wiki/MD5) et [`sha256`](https://en.wikipedia.org/wiki/SHA-2).

Chaque `user.<property>` peut être envoyé au format haché avec le suffixe d'algorithme : `_md5` ou `_sha256` *(underscore suivi du nom de l'algorithme en minuscules)*

Exemple :

```
{
  user: {
    email_md5: '8eb1b522f60d11fa897de1dc6351b7e8',                                      // md5('john.doe@example.com')
    email_sha256: '836f82db99121b3481011f16b49dfa5fbc714a0d1b1b9f784a1ebbbf5b39577f',   // sha256('john.doe@example.com')
    phone_md5: '60dd761f55cb17f0532c9fb1679e8ddd',                                      // md5('+33612345678')
    phone_sha256: '42d573cfc315801d4cd8eddd5416b416a0bf298b9b9e12d6b07442c91db42bd8',   // sha256('+33612345678')
  }
}
```

> :information\_source: we only support hex (base16) encoding\
> \&#xNAN;*(i.e.: **hachées** values are carried by strings with \[0-9a-f] characters)*\
> Other encodings are not supported yet

No need to send both **en clair** et **hachées** values :

* if you send **en clair** value, the **hachées** values aren't necessary\
  \&#xNAN;*We can generate **hachées** values on server side using **en clair** value*
* if you don't send **en clair** value, then you should fill as much **hachées** values as possible\
  \&#xNAN;*Partners require different hash algorithms and without **en clair** value, we can't generate any hash. That's why we need the exact **hachées** value*


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.commandersact.com/fr/developers/tracking-and-integrations/tracking/events-reference/common-events.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
