# Tags

Les tags sont l'un des outils les plus utiles que Pushwoosh propose, permettant une gamme de fonctionnalités sophistiquées. En utilisant des tags, vous pouvez segmenter votre audience et envoyer des notifications push ciblées à des utilisateurs spécifiques en fonction de leurs attributs.

Les tags peuvent contenir toutes les données arbitraires associées à un utilisateur ou un appareil particulier. Ces données peuvent inclure des noms d'utilisateur, des identifiants, des villes, des équipes de football préférées, des catégories d'actualités préférées ou toute autre information pertinente sur vos utilisateurs.

## Décider quels tags utiliser

Commencez par identifier les besoins de votre entreprise et déterminez comment vous souhaitez segmenter votre audience. Prenez en compte des facteurs tels que l'âge, la localisation, l'historique des achats in-app ou tout autre critère pertinent pour cibler les utilisateurs.
<Aside type="tip">
L'équipe marketing devra peut-être être impliquée dans ce processus pour aider à décider quels tags correspondent le mieux à vos objectifs marketing et à vos stratégies de segmentation d'audience.
</Aside>

## Valeurs des tags

Les valeurs des tags peuvent vous aider à rendre vos campagnes push plus intelligentes. Chaque tag est capable de stocker un _nombre quasi illimité de valeurs_. Fondamentalement, cela signifie qu'un seul tag suffirait pour enregistrer un type spécifique d'informations sur chaque utilisateur final de votre base de données.

Il n'y a que quelques tags disponibles pour chaque compte, mais compte tenu de l'espace quasi infini pour chaque tag, quelques tags suffisent pour recueillir une énorme quantité d'informations sur vos utilisateurs et mettre en place des modèles de ciblage très complexes.

## Types de tags

*   **Entier** — utilisé pour les données entières (montant de la monnaie virtuelle acquise, niveau atteint, âge).
*   **Chaîne de caractères** — utilisé pour les valeurs de chaîne de caractères (nom d'utilisateur, e-mail, identifiants).
*   **Liste** — identique au type Chaîne de caractères, mais chaque utilisateur peut avoir plusieurs valeurs définies simultanément (préférences musicales, catégories d'actualités, préférences culinaires).
*   **Booléen** — type de tag vrai / faux.
*   **Date** — utilisé pour les dates calendaires. Fondamentalement, il s'agit d'un tag de type entier qui stocke les horodatages Unix Epoch (automatiquement convertis depuis/vers la date grégorienne).
*   **Prix** — permet de définir des valeurs selon la devise spécifiée au format « \*.XX » [En savoir plus](https://en.wikipedia.org/wiki/ISO_4217).
*   **Version** — utilisé pour le versioning. L'exemple de format autorisé est w.x.y.z (Majeur.Mineur.Patch.Build). La valeur maximale pour chaque partie de la version est 9999, donc le numéro de version maximal ne peut pas être supérieur à 9999.9999.9999.9999.

### Opérateurs de tags

Chaque type de tag a un ensemble spécifique d'**opérateurs** applicables. Les opérateurs de tags définissent la relation entre le tag et ses valeurs à des fins de segmentation.

*   Opérateurs de tag Entier : `is`, `is not`, `are`, `not in`, `not set`, `any`
*   Opérateurs de tag Chaîne de caractères : `is`, `is not`, `are`, `not in`, `not set`, `any`
*   Opérateurs de tag Liste : `in`, `not in`, `not set`, `any`
*   Opérateurs de tag Booléen : `is` (vrai/faux), `not set`, `any`
*   Opérateurs de tag Date : `exactly on`, `on or after`, `on or before`, `between`, `not set`, `any`
*   Opérateurs de tag Prix : `is`, `is not`, `greater or equals`, `less or equals`, `between`, `in`, `not in`, `not set`, `any`
*   Opérateurs de tag Version : `is`, `is not`, `greater or equals`, `less or equals`, `between`, `in`, `not in`, `not set`, `any`

<Aside type="note">
Les opérateurs « Not set » et « any » sont disponibles pour tous les types de tags.
</Aside>

## Portée des tags : Générale ou Spécifique à l'utilisateur

Lors de la création d'un tag, vous choisissez comment ses valeurs sont stockées :

-   **Générale** (par défaut, `user_specific: false`) : la valeur du tag est stockée par appareil (HWID). Chaque appareil du même utilisateur peut contenir une valeur différente indépendamment.
-   **Spécifique à l'utilisateur** (`user_specific: true`) : la valeur du tag est stockée par utilisateur (UserID). Lorsqu'elle est définie via UserID, la valeur est appliquée à tous les appareils de l'utilisateur en une seule fois. Utile pour les attributs qui appartiennent à la personne, et non à un appareil particulier : niveau d'abonnement, points de fidélité, langue préférée.

### Exemple

Un utilisateur a installé les versions iOS et Android de votre application. Définir un tag `subscription_tier` sur `"premium"` via son UserID l'applique immédiatement aux deux appareils. Avec un tag Général, vous devriez le définir séparément pour chaque appareil.

```javascript title="Exemple : définir un tag spécifique à l'utilisateur via UserID"
{
   "request":{
      "application": "XXXXX-XXXXX",
      "userId": "l'id d'un utilisateur spécifique",
      "tags": {
           "subscription_tier": "premium",
           "loyalty_points": 350
      }
   }
}
```

## Tags par défaut

Ces tags sont disponibles d'office avec Pushwoosh, vous n'avez donc pas à les définir manuellement (et, en fait, ne devriez pas le faire). La plupart d'entre eux sont définis depuis l'application et envoyés à notre serveur via [`registerDevice`](/fr/developer/api-reference/device-api/) et d'autres appels API, et certains sont définis par le serveur lui-même.

| Nom                       | Type    | Où il est défini | Description                                                                                                                                                                                                                                         |
| ------------------------- | ------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Application Version       | Version | SDK            | Version actuelle de l'application installée sur un appareil                                                                                                                                                                                                    |
| Browser Type              | Chaîne de caractères  | SDK            | Lorsqu'un appareil est enregistré pour votre projet web, son type – mobile ou ordinateur – est suivi automatiquement                                                                                                                                           |
| City                      | Chaîne de caractères  | Serveur         | Dernière localisation géographique enregistrée d'un appareil                                                                                                                                                                                                 |
| Country                   | Chaîne de caractères  | Serveur         | Dernière localisation géographique enregistrée d'un appareil                                                                                                                                                                                                 |
| Device Model              | Chaîne de caractères  | SDK            | Indique le modèle de l'appareil sur lequel l'application est installée                                                                                                                                                                                             |
| First Install             | Date    | Serveur         | Indique l'heure à laquelle un appareil a été enregistré pour les notifications pour la première fois                                                                                                                                                                |
| In-App Product            | Liste    | SDK            | Les produits in-app achetés par un utilisateur de l'application                                                                                                                                                                                                  |
| Last In-App Purchase Date | Date    | SDK            | La date du dernier achat in-app effectué sur un appareil                                                                                                                                                                                             |
| Language                  | Chaîne de caractères  | SDK            | Abréviation de deux lettres en minuscules de la locale d'un appareil selon la norme ISO-639-1 ; prise depuis les paramètres de l'appareil                                                                                                                                           |
| Last Application Open     | Date    | Serveur         | L'heure du lancement le plus récent de l'application sur un appareil                                                                                                                                                                                                  |
| Last Email Open               | Date    | Serveur     | La date à laquelle l'adresse e-mail de l'appareil a enregistré pour la dernière fois un événement d'ouverture d'e-mail                                                                                                                                                          |
| Last Email Open Message Code  | Chaîne de caractères  | Serveur     | [Code de message](/fr/developer/api-reference/api-identifiers#message-code) de l'e-mail le plus récemment ouvert (format `XXXX-XXXXXXXX-XXXXXXXX`). Mis à jour à chaque événement [`PW_EmailOpen`](/fr/product/audience-data-and-segmentation/events/default-events/#pw_emailopen). Utilisez-le pour segmenter les destinataires d'une campagne e-mail spécifique par ceux qui l'ont ouvert                          |
| Last Email Click              | Date    | Serveur     | La date à laquelle l'adresse e-mail de l'appareil a enregistré pour la dernière fois un clic sur un lien d'e-mail                                                                                                                                                          |
| Last Email Click Message Code | Chaîne de caractères  | Serveur     | [Code de message](/fr/developer/api-reference/api-identifiers#message-code) de l'e-mail le plus récent dans lequel un lien a été cliqué (format `XXXX-XXXXXXXX-XXXXXXXX`). Mis à jour à chaque événement [`PW_EmailLinkClicked`](/fr/product/audience-data-and-segmentation/events/default-events/#pw_emaillinkclicked). Utilisez-le pour segmenter les destinataires d'une campagne e-mail spécifique par ceux qui ont cliqué         |
| Last Email Confirm            | Date    | Serveur     | La date de la plus récente confirmation d'abonnement Double Opt-In pour l'adresse e-mail de l'appareil                                                                                                                                              |
| Bounced Email                | Date    | Serveur         | La date à laquelle un hard bounce s'est produit pour cette adresse e-mail. Stockée en tant que Date pour permettre une segmentation temporelle, par exemple, pour exclure les utilisateurs avec des bounces récents                                                                              |
| Unsubscribed Emails       | Booléen | SDK            | Indique si un utilisateur s'est désabonné de la réception d'e-mails de votre application                                                                                                                                                                       |
| OS Version                | Version | SDK            | La version du système d'exploitation fonctionnant sur un appareil                                                                                                                                                                                              |
| Platform                  | Chaîne de caractères  | SDK            | La plateforme sur laquelle l'utilisateur utilise votre projet. |
| Push Alerts Enabled       | Booléen | SDK            | Indique si les alertes push sont autorisées dans les paramètres de l'appareil                                                                                                                                                                                        |
| SDK Version               | Version | SDK            | La version du SDK Pushwoosh implémentée sur un appareil                                                                                                                                                                                            |

## Tags personnalisés

C'est ici que votre créativité entre en jeu pour atteindre vos objectifs commerciaux spécifiques. Les tags personnalisés peuvent être créés en fonction de la logique de segmentation ou du modèle de ciblage approprié à vos besoins commerciaux uniques. Collaborez avec votre équipe marketing pour définir les tags personnalisés supplémentaires nécessaires à vos campagnes.

### Comment configurer un tag personnalisé

Vous pouvez ajouter un nouveau tag dans le [Panneau de Contrôle Pushwoosh](/fr/product/audience-data-and-segmentation/user-data-tags/tags) ou utiliser la méthode [`/addTag`](/fr/developer/api-reference/tags#addtag).

#### addTag

`POST` `https://api.pushwoosh.com/json/1.3/addTag`

Crée un tag dans votre compte.

#### Corps de la requête

| Nom                                       | Type    | Description                                                                                              |
| ------------------------------------------ | ------- | -------------------------------------------------------------------------------------------------------- |
| auth*     | string  | Jeton d'accès API depuis le Panneau de Contrôle Pushwoosh.                                                           |
| tag*      | object  | Paramètres du tag.                                                                                          |
| tag.name* | string  | Nom du tag.                                                                                                |
| tag.type* | integer | Type de tag. Voir les valeurs possibles ci-dessous.                                                                     |
| tag.user\_specific | boolean | Si `true`, la valeur du tag est stockée au niveau de l'utilisateur et partagée entre tous les appareils d'un utilisateur lorsqu'elle est définie par UserID. Si `false` (par défaut), le tag est au niveau de l'appareil et défini par HWID. |

<Tabs>
<TabItem label="200">
```javascript
{
    "status_code": 200,
    "status_message": "OK",
    "response": {
        "result": true
    }
}
```
</TabItem>
</Tabs>



```javascript title="Exemple"
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H", // requis, jeton d'accès API depuis le Panneau de Contrôle Pushwoosh
    "tag": {
      "name": "NOM_DU_TAG",    // requis
      "type": 1,             // requis, voir les valeurs possibles ci-dessous
      "user_specific": false // optionnel. true = niveau utilisateur ; false = niveau appareil (par défaut)
    }
  }
}
```

**Types de valeurs de tag possibles :**

*   1 - Entier
*   2 - Chaîne de caractères
*   3 - Liste
*   4 - Date
*   5 - Booléen
*   6 - Décimal. Ex : 19.95
*   7 - Version. Ex : "1.0.0.0"


### Comment collecter des informations auprès des utilisateurs


Une fois que vous avez ajouté et configuré un tag, il est prêt à commencer à collecter des informations auprès de vos utilisateurs. Suivez ces étapes pour l'implémenter :

1.  Intégrez le [SDK Pushwoosh](/fr/developer/pushwoosh-sdk/pushwoosh-sdk-overview/) dans votre projet en suivant le guide d'intégration pertinent.
2.  Utilisez la fonction [`setTags`](/fr/developer/api-reference/device-api/#settags) pour attribuer des tags et collecter des données utilisateur.

Vous trouverez ci-dessous des exemples d'implémentation pour différents frameworks utilisant la fonction [`setTags`](/fr/developer/api-reference/device-api/#settags).


<Tabs>

<TabItem label="iOS Native">

<Card title="iOS Natif">
```objective-c
NSDictionary *tags = @{ 
    @"Alias" : aliasField.text,
    @"FavNumber" : @([favNumField.text intValue]),
    @"price" : [PWTags incrementalTagWithInteger:5],
    @"List" : @[ @"Item1", @"Item2", @"Item3" ]
};

[[PushNotificationManager pushManager] setTags:tags];
```

[Documentation](https://pushwoosh.github.io/pushwoosh-ios-sdk/PushwooshiOS/documentation/pushwooshframework/pushwoosh/settags(_:)/)

</Card>

</TabItem>

<TabItem label="Android Native">

<Card title="Android Natif">
```java
pushwoosh.setTags(Tags.intTag("intTag", 42));
```

[Documentation](https://pushwoosh.github.io/pushwoosh-android-sdk/pushwoosh/com.pushwoosh/-pushwoosh/set-tags.html)

</Card>

</TabItem>

<TabItem label="Cordova">

<Card title="Cordova">
```
PushNotification.prototype.setTags = function(  config, success, fail  )
```

[Documentation](/fr/developer/pushwoosh-sdk/cross-platform-frameworks/cordova/cordova-plugin-api-reference/#settags)

</Card>

</TabItem>

<TabItem label="Flutter">

<Card title="Flutter">
```dart
Future<void> setTags(Map tags) async {
  await _channel.invokeMethod("setTags", {"tags" : tags});
}
```

[Documentation](https://pub.dev/documentation/pushwoosh_flutter/latest/pushwoosh_flutter/Pushwoosh/setTags.html)

</Card>

</TabItem>

<TabItem label="React Native">

<Card title="React Native">
```javascript
pushNotification.setTags({ 
    "string_tag" : "Hello world", 
    "int_tag" : 42, 
    "list_tag":["hello", "world"] 
});
```

[Documentation](https://github.com/Pushwoosh/pushwoosh-react-native-plugin/blob/master/docs/README.md#settags)

</Card>

</TabItem>

</Tabs>

<Tabs>

<TabItem label="Unity">

<Card title="Unity">



##### **SetIntTag**
Définit un tag Entier pour l'appareil.

```csharp
public virtual void SetIntTag(string tagName, int tagValue)
```

##### **SetStringTag**
Définit un tag Chaîne de caractères pour l'appareil.

```csharp
public virtual void SetStringTag(string tagName, string tagValue)
```

##### **SetListTag**  
Définit un tag Liste pour l'appareil.

```csharp
public virtual void SetListTag(string tagName, List<object> tagValues)
```
[Documentation](https://github.com/Pushwoosh/pushwoosh-unity/blob/master/Documentation/README.md#pushwoosh)
</Card>

</TabItem>

<TabItem label="Unreal Engine">

<Card title="Unreal Engine">
```cpp
FPushwooshModule& pushwoosh = FPushwooshModule::Get();
pushwoosh.SetTags("{ \"intTag\" : 1, \"stringTag\" : \"example\", \"listTag\" : [ \"a\", \"b\", \"c\" ] }");
```

[Documentation](https://github.com/Pushwoosh/pushwoosh-unreal-engine/blob/master/Plugins/Pushwoosh/Documentation/README.md#settags)

</Card>

</TabItem>

<TabItem label="Expo">

<Card title="Expo">
```javascript
Pushwoosh.setTags({ "key": keyValue, "value": inputValue });
```

[Documentation](https://github.com/Pushwoosh/pushwoosh-expo-plugin-sample/blob/main/app/_layout.tsx#L296C17-L296C76)

</Card>

</TabItem>

<TabItem label=".NET MAUI">

<Card title=".NET MAUI">
```objective-c
NSDictionary *tags = @{ 
    @"Alias" : aliasField.text,
    @"FavNumber" : @([favNumField.text intValue]),
    @"price" : [PWTags incrementalTagWithInteger:5],
    @"List" : @[ @"Item1", @"Item2", @"Item3" ]
};
[[PushNotificationManager pushManager] setTags:tags];
```

[Documentation](https://github.com/Pushwoosh/pushwoosh-dotnet/blob/c40c0fd60cb5fe5c5016c46d677a779a5600f45f/PushwooshSDK.DotNet.iOS.Bindings/PushwooshFramework.xcframework/ios-arm64/PushwooshFramework.framework/Headers/PushNotificationManager.h#L380)

</Card>

</TabItem>

<TabItem label="Outsystems">
<Card title="Outsystems">

**Paramètres d'entrée**
**Tags** – Une liste d'enregistrements de tags contenant `TagName` et `TagValue`.
  - `TagName` doit toujours être de type **Texte**.
  - `TagValue` peut être **Texte, Entier, Booléen, Date**, etc.

[En savoir plus](/fr/developer/pushwoosh-sdk/cross-platform-frameworks/outsystems/pushwoosh-outsystems-plugin-client-actions#settags)

</Card>
</TabItem>

</Tabs>



### Définir des tags via l'API
Bien que dans la plupart des cas (99 %), les tags soient définis depuis l'application, vous pouvez également définir des tags via l'API Pushwoosh. Vous trouverez ci-dessous un exemple de requête typique vers le point de terminaison [`/setTags`](/fr/developer/api-reference/device-api#settags) :


POST `https://api.pushwoosh.com/json/1.3/setTags`

```json

{
   "request": {
      "application": "XXXXX-XXXXX", // requis, code d'application Pushwoosh
      "hwid": "8f65bXXXf378eXXXbeceXXX4e153XXX2", // requis, ID de l'appareil matériel utilisé dans l'API /registerDevice
      "tags": { // requis
           "StringTag": "valeur de chaîne", // Exemple d'un tag de type chaîne de caractères
           "IntegerTag": 42, // Exemple d'un tag de type entier
           "ListTag": ["chaîne1", "chaîne2"], // Exemple d'un tag de type liste
           "DateTag": "2024-10-02 22:11", // Remarque : l'heure doit être en UTC
           "BooleanTag": true // Valeurs valides : true, false
      }
   }
}

```

[Pour plus de détails, consultez la documentation de l'API setTags](/fr/developer/api-reference/device-api/#settags)

## Utiliser le tag par défaut **City**

La localisation de l'appareil est déterminée en fonction de son adresse IP au moment où votre application a été lancée sur cet appareil pour la dernière fois. GeoIP soumet les données de localisation à Pushwoosh, et Pushwoosh enregistre la localisation reçue de GeoIP comme valeur de tag City pour un appareil particulier.

Dans certains cas, la localisation soumise par GeoIP diffère du nom de la ville — par exemple, lorsqu'elle se réfère à un quartier d'une ville ou à une autre unité administrative. Soyez prudent lorsque vous utilisez le tag City par défaut à des fins de segmentation : assurez-vous de sélectionner les bonnes valeurs.

Par exemple, si vous prévoyez de cibler les utilisateurs de Munich, vous devez couvrir cela avec un ensemble de valeurs de tag City, y compris "Munich" lui-même (avec toutes les valeurs correspondantes, telles que les différentes variantes d'orthographe qui pourraient être renvoyées par GeoIP et enregistrées comme valeurs de tag) et plusieurs zones voisines.

<Aside type="tip">
Avant de [créer un Segment](/fr/developer/api-reference/segmentation-filters-api/) via l'API, vérifiez les valeurs que vos utilisateurs ont sur leurs appareils via la requête [/getTagStats](/fr/developer/api-reference/statistics-api/events-and-tags-statistics/#gettagstats).
</Aside>