# Configuration de l'envoi à haute vitesse

## Aperçu

Dans Pushwoosh, les segments d'audience sont définis à l'aide de **Segments**.

Pour les campagnes push standard, le segment est compilé **après** l'envoi de la requête [`/createMessage`](/fr/developer/api-reference/messages-api/#createmessage). Cela signifie qu'il peut y avoir un court délai avant que le message ne soit envoyé, surtout si le segment est complexe.

Avec l'envoi à haute vitesse (High-speed delivery), les segments sont précompilés toutes les 10 minutes. Cela les maintient à jour et prêts à l'emploi, de sorte que les messages peuvent être envoyés instantanément, sans attendre la compilation du segment.

L'envoi à haute vitesse est particulièrement utile lorsque le timing est critique. Par exemple, les organisations sportives comme l'UEFA et la FIBA peuvent l'utiliser pour fournir des mises à jour en temps réel où chaque seconde compte.

Ce guide explique comment configurer l'envoi à haute vitesse en utilisant une application sportive comme exemple. Vous apprendrez à créer des segments d'audience pour informer les utilisateurs des matchs à venir et des événements en direct.

## Pourquoi l'envoi à haute vitesse

Les prérequis pour l'utilisation de l'envoi à haute vitesse par les organisations sportives sont les suivants :

* Tous les matchs sont programmés à l'avance, vous savez donc quand créer les Segments respectifs et pouvez précompiler les segments d'audience ;
* Chaque match est associé à un ID unique. Par exemple, l'ID du match pour la finale de la Ligue des champions est 0123 ;
* Chaque équipe est associée à un ID unique. Par exemple, l'ID de la Juventus est 111, l'ID du Real Madrid est 222, etc.
* Il existe un ensemble d'événements en direct dont vous souhaitez informer les utilisateurs (buts, compositions d'équipe, coup d'envoi, etc.).

## Configuration

<Aside type="caution" icon="setting" title="Assistance développeur requise">
****
La configuration de l'envoi à haute vitesse nécessite l'assistance d'un développeur. Veuillez partager ce guide avec eux pour une mise en œuvre correcte.
</Aside>

Tous les segments pour l'envoi à haute vitesse doivent être créés à l'avance, idéalement avant le début du match dans l'exemple d'utilisation. Pushwoosh applique les conditions de segment à la base d'utilisateurs de l'application et **précompile les segments toutes les 10 minutes** (cet intervalle est ajustable).

Lorsque vous envoyez une requête API [`/createMessage`](/fr/developer/api-reference/messages-api/#createmessage) avec le contenu du push et le nom du segment, Pushwoosh dispose déjà d'une liste précompilée de destinataires, permettant l'envoi instantané de la notification push.

<Aside type="caution" title="Important">
****
La compilation des segments consomme des ressources, et sa vitesse dépend de :
- la complexité des conditions du Segment (le nombre de Tags utilisés, une cardinalité élevée des valeurs de Tag) ;
- le nombre de Segments uniques précompilés simultanément ;
- le nombre d'utilisateurs abonnés à l'application.

Par conséquent, **tous les Segments pour un match doivent être créés via l'API avant le début du match et supprimés ensuite** pour maintenir le nombre de Segments précompilés actifs au minimum et économiser les ressources de calcul.
</Aside>

### Créer des Tags

Tout d'abord, créez un ensemble de Tags à appliquer, et définissez les valeurs de Tag pour les appareils des utilisateurs.
[Créez des Tags](/fr/product/audience-data-and-segmentation/user-data-tags/tags/) de type LIST correspondant aux événements de match en direct tels que **coup d'envoi, but, carton rouge**, etc.

Par exemple :
**MATCH-KICKOFF, MATCH-GOAL, MATCH-RED\_CARD**
![Créer des Tags](/push-notifications-high-speed-delivery-2.webp)

Créez le même ensemble de Tags décrivant les événements de match en direct pour les équipes.
Par exemple :
**TEAM-KICKOFF, TEAM-GOAL, TEAM-RED\_CARD**

<Aside type="tip">
Pour créer des Tags via l'API, appelez [`/addTag`](/fr/developer/api-reference/tags/#addtag).
</Aside>

En s'abonnant à ces Tags, les utilisateurs de l'application peuvent choisir les notifications qu'ils souhaitent recevoir :

- notifications concernant un match spécifique (par ex. le match Juventus - Real Madrid) ;
- notifications concernant les matchs de leur équipe favorite (par ex. les matchs de la Juventus uniquement) ;
- notifications concernant les événements se produisant pendant le match (par ex. les buts du match Juventus - Real Madrid uniquement) ;
- notifications concernant des événements spécifiques de l'équipe favorite (par ex. buts et compositions des matchs de la Juventus).

### Définir les Tags

Maintenant, vous pouvez renseigner les valeurs de Tag spécifiées précédemment via la requête API [`setTags`](/fr/developer/api-reference/device-api/#settags), et abonner les utilisateurs à des catégories spécifiques de notifications push.

Par exemple :
Lorsqu'un utilisateur s'abonne pour recevoir les mises à jour du coup d'envoi et des buts de la finale de la Ligue des champions, appelez [`/setTags`](/fr/developer/api-reference/device-api/#settags) avec l'ID du match :

```
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "MATCH_KICKOFF": "0123", // match ID
      "MATCH_GOAL": "0123"     // match ID
    }
  }
}
```

L'utilisateur recevra des notifications concernant le coup d'envoi et les buts marqués lors de la finale de la Ligue des champions.
Lorsqu'un utilisateur s'abonne pour recevoir les mises à jour des buts et des cartons rouges des matchs du Real Madrid, appelez [`/setTags`](/fr/developer/api-reference/device-api/#settags) comme suit :

```
{
  "request": {
    "application": "app_code",
    "hwid": "device_hardware_id",
    "tags": {
      "TEAM_KICKOFF": "222", // team ID
      "TEAM_GOAL": "222"     // team ID
    }
  }
}
```

Cet utilisateur recevra des notifications concernant les coups d'envoi et les buts chaque fois que le Real Madrid joue.

### Créer des Segments

Maintenant, vous pouvez créer des Segments pour les événements de match basés sur les Tags et leurs valeurs (ID de match et ID d'équipe). Les Segments doivent être créés via la requête API [`/createFilter`](/fr/developer/api-reference/segmentation-filters-api/#createfilter) 30 minutes avant le début du match.

Pour informer les utilisateurs des buts marqués lors de la finale de la Ligue des champions de l'exemple ci-dessus, appelez [`/createFilter`](/fr/developer/api-reference/segmentation-filters-api/#createfilter) avec les paramètres suivants :
**Nom du Segment** : 0123_GOAL
**Conditions du Segment** : `#TEAM-GOAL(111, 222) OR #MATCH-GOAL(0123)`

```
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR", // optional. Operator values: 'AND', 'OR'
    "application" : "AAAAA-00000"
  }
}
```

Cette requête compilera le segment des utilisateurs abonnés aux mises à jour des buts de la finale de la Ligue des champions (ID match=0123) OU des utilisateurs qui suivent soit la Juventus soit le Real Madrid (ID équipe=111,222).

Pour configurer un envoi à haute vitesse dans votre Control Panel Pushwoosh, [créez un nouveau Segment](/fr/product/audience-data-and-segmentation/segmentation/create-segments) avec les valeurs de Tag correspondantes et associez-le à l'application vers laquelle vous allez envoyer des pushs. Les Segments spécifiques à l'application sont précompilés toutes les 10 minutes pour garder les segments d'audience toujours à jour.

![créer un nouveau Segment](/push-notifications-high-speed-delivery-1.webp)

Lorsque l'événement du match se produit (but marqué, coup d'envoi, carton rouge, etc.), appelez [`/createMessage`](/fr/developer/api-reference/messages-api/#createmessage) avec le contenu de la notification push et le nom du Segment :

```
{
  "request": {
    "application": "AAAAA_00000",
    "auth": "auth_token",
    "notifications": [
      {
        "content": "12’ Juventus goal! Juventus 1 – 0 Real Madrid",
        "filter": "0123_GOAL",
        "send_date": "now"
      }
    ]
  }
}
```

Une fois que nous recevons l'appel [`/createMessage`](/fr/developer/api-reference/messages-api/#createmessage), nous avons déjà une liste précompilée d'appareils qui correspondent aux critères du Segment, et nous envoyons immédiatement la notification vers les passerelles APNs et FCM.

<Aside type="caution" title="Important">
*****
Les Segments d'envoi à haute vitesse ne prennent pas en charge l'utilisation de l'opérateur **daysago**. Si vous tentez de créer un Segment avec cet opérateur, vous recevrez un message d'erreur.

Cette restriction existe car, pour fonctionner correctement, les Segments d'envoi à haute vitesse reposent sur des changements survenus dans l'application sur les appareils des utilisateurs (comme l'abonnement aux notifications push ou la définition d'une valeur de Tag spécifique). L'opérateur **daysago** n'implique pas de tels changements, donc le Segment ne fonctionnera pas comme prévu.
Notez également que les Segments d'envoi à haute vitesse ne peuvent pas être utilisés avec des messages programmés.
</Aside>

## Supprimer des Segments

Une fois le match terminé, tous les Segments correspondants doivent être supprimés afin que les ressources de calcul ne soient pas dépensées pour la recompilation ultérieure de Segments qui ne sont plus pertinents, en particulier au détriment des Segments pour les matchs programmés ensuite. Supprimez les Segments via la requête API [`/deleteFilter`](/fr/developer/api-reference/segmentation-filters-api/#deletefilter), par exemple :

```
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL"
  }
}
```

Pour éviter la suppression manuelle des Segments, définissez la date d'expiration du Segment via la requête [`/createFilter`](/fr/developer/api-reference/segmentation-filters-api/#createfilter) afin que le Segment soit supprimé automatiquement à la date spécifiée :

```
{
  "request": {
    "auth": "auth_token",
    "name": "0123_GOAL",
    "conditions": [
      ["TEAM-GOAL", "IN", ["111", "222"]],
      ["MATCH-GOAL", "IN", ["0123"]]
    ],
    "operator": "OR",  // optional. Values: 'AND', 'OR'
    "application": "AAAAA-00000",
    "expiration_date": "YYYY-MM-DD"  // optional. Segment (Filter) expiry
  }
}
```