# Intégration RudderStack

<Aside type="caution" icon="setting" title="Assistance d'un développeur requise">
 Vous aurez besoin de l'aide de votre équipe de développement pour configurer l'intégration. Partagez ce guide avec eux.
</Aside>

[RudderStack](https://www.rudderstack.com/) est une plateforme de données clients qui collecte les événements de vos applications, sites web, serveurs et entrepôts de données et les transmet à d'autres outils. Avec la destination Pushwoosh dans RudderStack, les données que vous y collectez déjà arrivent dans Pushwoosh sans code supplémentaire dans votre application :

* Les événements track deviennent des [événements](/fr/product/audience-data-and-segmentation/events/) Pushwoosh. Utilisez-les pour créer des segments et pour lancer ou ramifier des [customer journeys](/fr/product/customer-journey/pushwoosh-journey-overview).
* Les traits identify deviennent des [tags](/fr/product/audience-data-and-segmentation/user-data-tags/tags/) spécifiques à l'utilisateur. Utilisez-les pour cibler et personnaliser les notifications push, les messages in-app et les e-mails.

<Aside type="note" title="Bêta">
La destination Pushwoosh dans RudderStack est en bêta. La destination fonctionne uniquement pour les comptes Pushwoosh hébergés sur `app.pushwoosh.com`. Si vous ne savez pas où votre compte est hébergé, contactez votre Customer Success Manager ou le support.
</Aside>

## Avant de commencer

La destination associe toutes les données par User ID, vérifiez donc d'abord ces prérequis :

* Le [SDK Pushwoosh](/fr/developer/first-steps/integrate-pushwoosh-sdk) est intégré à votre application.
* Votre application appelle [`setUserId`](/fr/developer/first-steps/collecting-user-ids/) avec la même valeur que celle que RudderStack envoie comme `userId`. Pushwoosh relie les événements et traits entrants aux utilisateurs grâce à cette valeur.
* L'appareil de chaque utilisateur est enregistré avec ce User ID avant que RudderStack n'envoie des appels `identify` pour cet utilisateur. Les traits d'un User ID que Pushwoosh ne connaît pas encore sont ignorés.
* Vous avez accès à **Settings** → **API Access** dans Pushwoosh pour créer un token API.
* Vous disposez d'un workspace RudderStack avec au moins une source qui envoie des appels `track` ou `identify`.

## Configurer la destination Pushwoosh dans RudderStack

La configuration comporte deux parties : vous récupérez deux valeurs dans Pushwoosh, puis vous créez la destination dans RudderStack.

### Obtenir le code d'application et un Device API token

RudderStack a besoin de deux valeurs pour envoyer des données à votre application : son code d'application et un Device API token.

1. Dans Pushwoosh, ouvrez l'application à laquelle vous voulez envoyer des données.
2. Copiez le code d'application. Il s'affiche sous le nom de l'application dans le coin supérieur gauche et ressemble à `XXXXX-XXXXX`.
3. Allez dans **Settings** → **API Access** et cliquez sur **Generate New Token**.
4. Dans **Token type**, choisissez `device`.
5. Dans **Name**, saisissez un nom pour le token, par exemple `RudderStack`.
6. Cliquez sur **Generate**.
7. Dans la liste des tokens, cliquez sur le menu à trois points à côté du nouveau token et choisissez **Edit token…**.
8. Sous **Applications**, sélectionnez l'application de l'étape 1 et cliquez sur **Save**.
9. Copiez la valeur du token depuis la liste des tokens.

Un [Device API token](/fr/developer/api-reference/api-access-token/#device-api-token) suffit pour la destination. Vous n'avez pas besoin d'un Server API token.

### Ajouter la destination dans RudderStack

La destination Pushwoosh connecte vos sources RudderStack à votre application Pushwoosh.

1. Dans le tableau de bord RudderStack, allez dans **Collect** → **Destinations**.
2. Cliquez sur **New destination**.
3. Sélectionnez **Pushwoosh** dans la liste.
4. Saisissez un nom pour la destination et cliquez sur **Continue**.
5. Sélectionnez les sources que vous voulez envoyer à Pushwoosh.
6. Dans **Application Code**, collez le code d'application.
7. Dans **API Token**, collez le Device API token.
8. Terminez la configuration pour enregistrer la destination.

RudderStack envoie les données à Pushwoosh depuis ses propres serveurs (cloud mode), pour chaque type de source pris en charge par la destination.

Pour la partie RudderStack de la configuration, consultez le [guide de la destination Pushwoosh](https://www.rudderstack.com/docs/destinations/streaming-destinations/pushwoosh/setup-guide/) dans la documentation RudderStack.

## Quelles données RudderStack envoie à Pushwoosh

La destination prend en charge deux types d'appels, `track` et `identify`. RudderStack rejette tout autre type d'appel, comme `page`, `screen`, `group` ou `alias`, pour cette destination.

Chaque appel doit avoir un `userId`. RudderStack n'envoie pas les appels qui n'en ont pas, car Pushwoosh ne peut pas attribuer un appel anonyme à un utilisateur.

### Les appels track deviennent des événements Pushwoosh

Chaque appel `track` devient un événement Pushwoosh portant le même nom que l'événement RudderStack :

| Champ RudderStack | Pushwoosh |
| --- | --- |
| `event` | Nom de l'événement |
| `properties` | Attributs de l'événement |
| `userId` | User ID |
| `timestamp` (ou `originalTimestamp`) | Heure de l'événement |
| `context.device.id` | Device ID, s'il est présent |
| `context.device.type` ou `context.os.name` | Plateforme : `android` ; `ios` pour iOS, iPadOS, watchOS et tvOS ; `web` pour toute autre valeur ou en l'absence de valeur |

Si l'événement ou un attribut n'existe pas encore dans l'application, Pushwoosh le crée automatiquement.

Pushwoosh rejette l'événement entier dans les cas suivants. Aucune erreur n'est renvoyée, donc RudderStack signale l'événement comme livré :

* L'appel comporte plus de 100 propriétés.
* La valeur d'une propriété dépasse 10 Ko.
* Le nom de l'événement dépasse 255 caractères.
* L'événement est nouveau, et son nom dépasse 128 caractères ou contient des caractères de contrôle.

Un événement conserve jusqu'à 100 attributs. Lorsqu'un événement a 100 attributs connus, Pushwoosh continue d'enregistrer les nouveaux appels, mais les nouveaux noms de propriétés ne sont pas ajoutés comme attributs.

Les objets imbriqués dans `properties` arrivent sous forme de chaînes JSON, et les propriétés de valeur `null` sont ignorées.

### Les appels identify deviennent des tags spécifiques à l'utilisateur

Chaque appel `identify` définit ses traits comme tags de l'utilisateur ayant le `userId` indiqué. Les traits proviennent de `traits`, ou de `context.traits` lorsque `traits` est vide.

* **Seuls les tags spécifiques à l'utilisateur sont écrits.** Si la [création automatique de tags](/fr/product/audience-data-and-segmentation/user-data-tags/tags/#how-to-set-up-a-custom-tag) est activée pour votre compte, un trait portant un nouveau nom crée un [tag spécifique à l'utilisateur](/fr/product/audience-data-and-segmentation/user-data-tags/tags/#tag-scope-general-vs-user-specific). Si un tag **General** du même nom existe déjà, Pushwoosh ignore ce trait sans erreur.
* **Une valeur doit correspondre au type du tag.** Si un tag existe déjà et que la valeur du trait ne correspond pas à son type, comme du texte pour un tag Integer, Pushwoosh ignore ce trait sans erreur.
* **L'utilisateur doit déjà exister dans Pushwoosh.** Les tags ne sont appliqués que si le SDK Pushwoosh a enregistré un appareil avec `setUserId` défini sur le même `userId`. Les traits d'un utilisateur inconnu sont ignorés sans erreur.
* **Les traits d'identité et de contact ne sont pas copiés dans les tags.** `email`, `phone`, `firstName`, `lastName`, `name`, `address`, `id`, `userId` et `anonymousId` ne sont jamais envoyés comme tags. Un appel `identify` qui ne contient que ces traits échoue avec `No traits left to send as Pushwoosh tags`.
* **Une valeur vide efface le tag.** Un trait avec une chaîne vide ou une liste vide supprime la valeur actuelle de ce tag pour l'utilisateur.
* **Les objets imbriqués arrivent sous forme de chaînes JSON.** Les traits de valeur `null` sont ignorés.

<Aside type="caution" title="Des appels plus anciens peuvent écraser des valeurs plus récentes">
Chaque appel `identify` écrase les valeurs actuelles des tags, et le dernier appel livré l'emporte. Si RudderStack livre un `identify` plus ancien après un plus récent, par exemple lors d'une nouvelle tentative ou d'une relecture de données, les tags conservent les anciennes valeurs.
</Aside>

### Ce que la destination ne fait pas

La destination envoie uniquement les données `track` et `identify`. Ces tâches restent en dehors de son périmètre :

* Elle n'enregistre pas les appareils ni les adresses e-mail. Les appareils proviennent du SDK Pushwoosh.
* Elle ne supprime pas les utilisateurs. Les demandes de suppression d'utilisateurs de RudderStack ne sont pas prises en charge pour cette destination.

## Vérifier que l'intégration fonctionne

Une fois la destination enregistrée, envoyez un appel `track` et un appel `identify` de test depuis une source avec un `userId` qui possède déjà un appareil dans Pushwoosh.

* **Événements :** dans Pushwoosh, allez dans **Audience** → **Events**, ouvrez l'événement et vérifiez qu'il est comptabilisé.
* **Tags :** allez dans **Audience** → **User Explorer**, recherchez l'utilisateur par User ID et vérifiez les valeurs des tags.

Les erreurs de livraison de chaque appel s'affichent dans la vue **Live Events** de la destination dans RudderStack.

## Dépannage

Trouvez le message d'erreur que RudderStack affiche pour la destination dans **Live Events** pour en connaître la cause et la solution.

### Les appels track échouent avec unauthorized

Le token API ne correspond pas au code d'application. Vérifiez que le token appartient au même compte Pushwoosh que l'application.

Les appels `identify` ne vérifient pas le token, ils continuent donc de réussir avec un token incorrect. Utilisez un appel `track` pour tester le token.

### Les appels échouent avec application not found ou application code is not valid

Le code d'application est incorrect, ou le compte n'est pas hébergé sur `app.pushwoosh.com`. Les appels `track` échouent avec `application not found`, et les appels `identify` échouent avec `application code is not valid`. Vérifiez le code dans le Pushwoosh Control Panel. Si le code est correct, contactez votre Customer Success Manager ou le support.

### Les appels échouent avec Missing required value from userId

L'appel n'a pas de `userId`. Les appels anonymes ne sont pas envoyés à Pushwoosh. Appelez `identify` dans votre source RudderStack après la connexion de l'utilisateur, afin que les appels suivants contiennent le `userId`.

### Les appels échouent avec Invalid enum value

Le type d'appel n'est ni `track` ni `identify`. Pushwoosh n'accepte que ces deux types. Ne connectez pas les sources qui envoient uniquement des appels `page`, `screen`, `group` ou `alias`, ou ignorez ces erreurs.

### Les appels identify échouent avec No traits left to send as Pushwoosh tags

Tous les traits de l'appel sont des traits d'identité ou de contact, comme `email` ou `phone`, qui ne sont jamais copiés dans les tags. Ajoutez au moins un autre trait ou ignorez l'appel.

### Les appels identify réussissent mais les tags n'apparaissent pas

Vérifiez les points suivants dans l'ordre :

1. Un appareil avec ce User ID est enregistré dans Pushwoosh. Recherchez l'utilisateur dans **Audience** → **User Explorer**.
2. L'application appelle `setUserId` avec exactement la même valeur que celle que RudderStack envoie comme `userId`.
3. Le tag portant ce nom est **User-specific**. Un trait pour un tag **General** existant est ignoré. Modifiez la portée du tag ou renommez le trait.
4. La valeur du trait correspond au type du tag existant.
5. Le trait ne fait pas partie des traits d'identité ou de contact qui ne sont jamais copiés, comme `email` ou `phone`.