> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Google BigQuery

> Exportez les données d'événements de messagerie vers BigQuery et importez des événements personnalisés depuis BigQuery pour déclencher des campagnes personnalisées.

export const DATA_TYPE_0 = "event table columns"

export const PLATFORM_0 = "BigQuery"

export const COLUMN_HEADER_0 = "BigQuery Column"

export const PROPERTIES_DESCRIPTION_0 = "Additional columns as JSON"

## Vue d'ensemble

L'intégration OneSignal + BigQuery prend en charge deux pipelines de données puissants :

* **Exportation** : Envoyez automatiquement les données d'événements de messagerie (push, e-mail, SMS, in-app) de OneSignal vers BigQuery pour l'analyse et le reporting.
* **Importation** : Synchronisez les événements utilisateur personnalisés depuis vos ensembles de données BigQuery vers OneSignal pour déclencher des Journeys automatisés et une messagerie personnalisée.

Ensemble, ces intégrations vous donnent un contrôle complet sur les données d'engagement utilisateur, alimentant l'analytique avancée et la messagerie en temps réel basée sur le comportement.

***

## Exporter les événements OneSignal vers BigQuery

Envoyez des événements de performance et d'engagement de messagerie (par exemple, envois, ouvertures, clics) vers BigQuery pour :

* Créer des tableaux de bord et des rapports personnalisés
* Suivre les tendances de livraison et d'engagement sur tous les canaux
* Combiner les données OneSignal avec d'autres données métier pour l'analyse

**Prérequis**

* Accès aux [Event Streams](/docs/en/event-streams) pour les événements de message sortants (Les limitations de forfait et les dépassements s'appliquent)
* Accès aux [Événements personnalisés](/docs/en/custom-events) pour la synchronisation des événements entrants (Les limitations de forfait et les dépassements s'appliquent)
* [Forfait de compte mis à jour](https://onesignal.com/pricing) (non disponible sur les applications gratuites)

- Projet Google Cloud Platform avec **facturation activée**
- BigQuery activé dans votre projet GCP
- Compte de service avec permissions d'écriture BigQuery

**Étapes de configuration**

### 1. Créer un compte de service

<Steps>
  <Step title="Connectez-vous à votre compte Google Cloud Platform">
    Après vous être connecté, assurez-vous que le bon projet est sélectionné.

    <Frame>
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=038779c4d976ba56a17a32f2e6646573" width="2388" height="558" data-path="images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png" />
    </Frame>
  </Step>

  <Step title="Créer un compte de service">
    Visitez la [page Créer un compte de service](https://console.cloud.google.com/iam-admin/serviceaccounts/create) et cliquez sur **Créer un compte de service.**

    <Frame>
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=038779c4d976ba56a17a32f2e6646573" width="2388" height="558" data-path="images/docs/7fe257f51fcacd15a07c4f4f23bf8bf2f9f22c2f1c171ad8b8648624de4de304-BQ1-2.png" />
    </Frame>
  </Step>

  <Step title="Remplissez les champs.">
    Donnez-lui n'importe quel nom et ID de compte de service de votre choix.

    <Frame>
      <img src="https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/6437e9849e23f18ec6f90e03c3821817566e7f150125f440a58fbe5fd2b42e0b-BQ1-3.png?fit=max&auto=format&n=MUgio66t0sYhGEvj&q=85&s=37236688a79f1c16c0d6fdad15b03245" width="1344" height="870" data-path="images/docs/6437e9849e23f18ec6f90e03c3821817566e7f150125f440a58fbe5fd2b42e0b-BQ1-3.png" />
    </Frame>
  </Step>

  <Step title="Attribuer le rôle 'Utilisateur BigQuery'">
    Donnez au compte de service le rôle "Utilisateur BigQuery".

    <Frame>
      <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b1bff32d7f010b488b60347e01ecb1fbde182602f19f16d3d89914d1de1c0635-BQ1-4.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=1df75028d3632a3ed413c10c1de9b94a" width="549" height="395" data-path="images/docs/b1bff32d7f010b488b60347e01ecb1fbde182602f19f16d3d89914d1de1c0635-BQ1-4.png" />
    </Frame>
  </Step>

  <Step title="Créer une clé JSON pour ce compte">
    Accédez à votre nouveau compte de service > **Clés** > **Ajouter une clé** > **Créer une nouvelle clé** > sélectionnez JSON. Enregistrez le fichier.
  </Step>
</Steps>

<Info>
  Vous collerez l'intégralité du contenu de ce fichier de clé JSON dans OneSignal pour activer l'intégration.
</Info>

### 2. Activer l'intégration dans OneSignal

<Steps>
  <Step title="Accédez à OneSignal > Données > Intégrations > BigQuery" />

  <Step title="Collez votre clé JSON de compte de service" />

  <Step title="Configurer les paramètres">
    * **Fréquence de synchronisation** : Aussi souvent que toutes les 15 minutes
    * **Noms des ensembles de données/tables** : Ne doivent contenir que des lettres minuscules, des chiffres et des underscores, et ne peuvent pas commencer par un chiffre.
    * **Types d'événements** : Sélectionnez des événements de message spécifiques (par exemple, envoyé, ouvert, cliqué)
      * **Remarque :** Vous pouvez sélectionner plusieurs types d'événements ou mettre à jour les événements sélectionnés ultérieurement.
  </Step>

  <Step title="Cliquez sur Enregistrer et attendez la confirmation" />
</Steps>

<Note>
  La synchronisation initiale des données peut prendre 15 à 30 minutes avant d'apparaître dans BigQuery.

  Pendant que vous attendez, envoyez des messages via push, e-mail, in-app ou SMS pour déclencher les événements sélectionnés.
</Note>

### 3. Afficher les données dans BigQuery

Ouvrez votre console BigQuery et localisez l'ensemble de données (par exemple, `onesignal_events_<app-id>`) pour explorer les événements de message synchronisés.

<Frame caption="Ensemble de données BigQuery contenant les événements de message exportés">
  <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c40ec987eadef5dd1c16cb47fb71c2c666b30ea8667624584ecbc481c12ef026-BQ5.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=08cf57a8bd91f9447909ad619077935f" width="1552" height="1052" data-path="images/docs/c40ec987eadef5dd1c16cb47fb71c2c666b30ea8667624584ecbc481c12ef026-BQ5.png" />
</Frame>

## Événements et propriétés de message

### Types d'événements de message

**Propriété :** `event_kind`
**Type :** `String`

Le type de message et d'événement (par exemple `message.push.received`, `message.push.sent`).

| Événement de message (OneSignal) |           `event_kind`           | Description                                                                    |
| :------------------------------: | :------------------------------: | ------------------------------------------------------------------------------ |
|             Push Sent            |        `message.push.sent`       | Notification push envoyée avec succès.                                         |
|           Push Received          |      `message.push.received`     | Push livrée (voir [Confirmed receipt](/docs/en/confirmed-delivery)).           |
|           Push Clicked           |      `message.push.clicked`      | L'utilisateur a cliqué sur la push.                                            |
|            Push Failed           |       `message.push.failed`      | Échec de la livraison. Voir les rapports de message.                           |
|         Push Unsubscribed        |    `message.push.unsubscribed`   | L'utilisateur s'est désabonné de la push.                                      |
|         In-App Impression        |     `message.iam.impression`     | Message In-App affiché.                                                        |
|          In-App Clicked          |       `message.iam.clicked`      | Message In-App cliqué.                                                         |
|        In-App Page Viewed        |   `message.iam.page_displayed`   | Page In-App affichée.                                                          |
|            Email Sent            |       `message.email.sent`       | Email livré.                                                                   |
|          Email Received          |     `message.email.received`     | Email accepté par le serveur de messagerie du destinataire.                    |
|           Email Opened           |      `message.email.opened`      | Email ouvert. Voir [Email Reports](/docs/en/email-message-reports).            |
|        Email Link Clicked        |      `message.email.clicked`     | Lien dans l'email cliqué.                                                      |
|        Email Unsubscribed        |   `message.email.unsubscribed`   | Destinataire désabonné.                                                        |
|      Email Reported As Spam      | `message.email.reported_as_spam` | Marqué comme spam. Voir [Email Deliverability](/docs/en/email-deliverability). |
|           Email Bounced          |      `message.email.bounced`     | Rebond dû à un échec de livraison permanent.                                   |
|           Email Failed           |      `message.email.failed`      | Échec de la livraison.                                                         |
|         Email Suppressed         |    `message.email.suppressed`    | Supprimé en raison de la liste de suppression.                                 |
|             SMS Sent             |        `message.sms.sent`        | SMS envoyé.                                                                    |
|           SMS Delivered          |      `message.sms.delivered`     | SMS livré avec succès.                                                         |
|            SMS Failed            |       `message.sms.failed`       | Échec de la livraison du SMS.                                                  |
|          SMS Undelivered         |     `message.sms.undelivered`    | SMS rejeté ou injoignable.                                                     |

### Schéma des données d'événement

Pour chaque événement de message généré par un utilisateur, les métadonnées suivantes seront jointes à l'enregistrement.

|                  Nom de colonne                 |       Type      | Description                                                                      |
| :---------------------------------------------: | :-------------: | -------------------------------------------------------------------------------- |
|                    `event_id`                   |       UUID      | Identifiant unique de l'événement                                                |
|                `event_timestamp`                |    Timestamp    | Heure de l'occurrence de l'événement                                             |
|                   `event_kind`                  |      String     | Le [Type d'événement](#types-devenements-de-message)                             |
|            `subscription_device_type`           |      String     | Type d'appareil (par exemple, iOS, Android, Web, Email, SMS)                     |
|                    `language`                   |      String     | Code de langue de l'abonnement                                                   |
|                    `version`                    |      String     | Version de l'intégration                                                         |
|                   `device_os`                   |      String     | Version du système d'exploitation de l'appareil                                  |
|                  `device_type`                  |      Number     | Type d'appareil numérique                                                        |
|                     `token`                     |      String     | Jeton push, numéro de téléphone ou email                                         |
|                `subscription_id`                |       UUID      | ID d'abonnement                                                                  |
|                   `subscribed`                  |     Boolean     | Statut d'abonnement                                                              |
|                  `onesignal_id`                 |       UUID      | ID utilisateur OneSignal                                                         |
|                  `last_active`                  |      String     | Horodatage de dernière activité                                                  |
|                      `sdk`                      |      String     | Version du SDK OneSignal                                                         |
|                  `external_id`                  |      String     | ID utilisateur externe qui doit correspondre à l'ID utilisateur de l'intégration |
|                     `app_id`                    |       UUID      | App ID de OneSignal                                                              |
|                  `template_id`                  |       UUID      | Template ID (le cas échéant)                                                     |
|                   `message_id`                  |       UUID      | ID du lot/requête de message                                                     |
|                  `message_name`                 |      String     | Nom du message                                                                   |
|                 `message_title`                 |      String     | Titre du message (anglais uniquement)                                            |
|                `message_contents`               |      String     | Corps du message tronqué (anglais uniquement)                                    |
|                 `failure_reason`                |      String     | Raison d'échec (pour les événements d'échec de push et d'email)                  |
| `_created`, `_id`, `_index`, `_fivetran_synced` | *Usage interne* | Métadonnées de synchronisation Fivetran                                          |

### Notes

* Les synchronisations après l'enregistrement/l'activation peuvent prendre 15 à 30 minutes supplémentaires pour se terminer.
* La désactivation peut toujours entraîner une dernière synchronisation finale après la désactivation.
* Pour garantir une synchronisation efficace des données, notre système crée et gère automatiquement des ensembles de données intermédiaires. Ces ensembles de données, nommés selon un modèle comme `fivetran_{deux mots aléatoires}_staging`, stockent temporairement les données pendant le traitement avant qu'elles ne soient intégrées dans votre schéma principal. Ces ensembles de données intermédiaires sont essentiels pour maintenir un flux de travail rationalisé et ne doivent pas être supprimés, car ils seront automatiquement recréés.

***

## Importer des événements depuis BigQuery

Envoyez des données d'événements comportementaux depuis BigQuery vers OneSignal pour :

* Déclencher des Journeys basés sur l'activité utilisateur
* Personnaliser la messagerie en fonction des données comportementales

**Prérequis**

* Accès aux [Event Streams](/docs/en/event-streams) pour les événements de message sortants (Les limitations de forfait et les dépassements s'appliquent)
* Accès aux [Événements personnalisés](/docs/en/custom-events) pour la synchronisation des événements entrants (Les limitations de forfait et les dépassements s'appliquent)
* [Forfait de compte mis à jour](https://onesignal.com/pricing) (non disponible sur les applications gratuites)

- Projet GCP avec BigQuery et tables de données d'événements
- Compte de service avec permissions de lecture
- Tables de données d'événements contenant des données comportementales dans des ensembles de données BigQuery

**Étapes de configuration**

<Steps>
  <Step title="Créer un compte de service BigQuery">
    OneSignal générera automatiquement un compte de service lorsque vous créerez la connexion. Alternativement, vous pouvez fournir votre propre fichier JSON de clé de compte de service.

    Si vous créez votre propre compte de service, assurez-vous qu'il dispose des permissions requises listées ci-dessous.
  </Step>

  <Step title="Accorder les permissions requises">
    Le compte de service OneSignal a besoin de ces rôles IAM BigQuery :

    * **`bigquery.dataViewer`** - Accès en lecture aux ensembles de données et tables contenant les données d'événements
    * **`bigquery.jobUser`** - Permission de créer des tâches pour les requêtes de données
    * **`bigquery.metadataViewer`** - Accès aux métadonnées au niveau du projet (recommandé)

    Accordez les permissions en utilisant la console Google Cloud ou CLI :

    ```bash theme={null}
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member serviceAccount:ONESIGNAL_SERVICE_ACCOUNT_EMAIL \
      --role roles/bigquery.dataViewer

    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member serviceAccount:ONESIGNAL_SERVICE_ACCOUNT_EMAIL \
      --role roles/bigquery.jobUser
    ```
  </Step>

  <Step title="Ajouter l'intégration dans OneSignal">
    Dans OneSignal, allez dans **Data > Integrations** et cliquez sur **Add Integration**.

    <Frame caption="Ajouter l'intégration BigQuery">
      <img src="https://mintcdn.com/onesignal/IHzVtEbivOs2EktQ/images/integrations/bigquery-add-integration.png?fit=max&auto=format&n=IHzVtEbivOs2EktQ&q=85&s=6877dc14cfe8f9c1677404353927e4f8" width="1944" height="1764" data-path="images/integrations/bigquery-add-integration.png" />
    </Frame>

    * **Moteur de synchronisation** : La synchronisation avancée est recommandée pour les grands ensembles de données ou les requêtes de données d'événements complexes. Vous pouvez commencer avec la synchronisation de base et passer à la synchronisation avancée plus tard si nécessaire.
    * **ID de projet Google Cloud** : Votre projet GCP contenant les ensembles de données BigQuery
    * **Région de l'ensemble de données** : Emplacement où vos ensembles de données BigQuery sont stockés
    * **Clé de compte de service** (optionnel) : Fichier de clé JSON si vous utilisez votre propre compte de service
  </Step>

  <Step title="Configurer la source de données d'événements">
    Spécifiez l'ensemble de données BigQuery et la table contenant vos données d'événements :

    * **Ensemble de données** : Nom de l'ensemble de données BigQuery (par exemple, `analytics_events`)
    * **Table/Vue** : Table ou vue contenant les enregistrements d'événements
    * **Requête d'événement** : Requête SQL optionnelle pour filtrer ou transformer les données d'événements

    Votre table d'événements doit contenir des colonnes pour :

    * Nom/type d'événement
    * Identifiant utilisateur
    * Horodatage de l'événement
    * Propriétés d'événement supplémentaires
  </Step>

  <Step title="Tester la connexion">
    Cliquez sur **Tester la connexion** pour vérifier que OneSignal peut accéder à votre projet BigQuery et lire les données d'événements.
  </Step>
</Steps>

***

### Mappage des données d'événement

Mappez vos {DATA_TYPE_0} {PLATFORM_0} au format des événements personnalisés de OneSignal :

| Champ OneSignal | {COLUMN_HEADER_0} | Description                     | Requis |
| --------------- | ----------------- | ------------------------------- | ------ |
| `name`          | `event_name`      | Identifiant de l'événement      | Oui    |
| `external_id`   | `user_id`         | Identifiant de l'utilisateur    | Oui    |
| `timestamp`     | `event_timestamp` | Quand l'événement s'est produit | Non    |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0}      | Non    |

### Configuration avancée

#### Requêtes SQL personnalisées

Utilisez du SQL personnalisé pour filtrer ou transformer les données d'événements avant de les synchroniser vers OneSignal :

```sql theme={null}
SELECT
  event_name,
  user_id,
  event_timestamp,
  STRUCT(
    product_id,
    purchase_amount,
    category
  ) as payload
FROM `project.dataset.events`
WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
```

#### Accès multi-projets

Si vos données d'événements s'étendent sur plusieurs projets BigQuery, accordez au compte de service OneSignal l'accès à chaque projet contenant les tables ou vues référencées.

<Warning>
  La région de connexion BigQuery doit correspondre à la région de la table spécifique pour des performances optimales.
</Warning>

***

## FAQ

### Pourquoi ma synchronisation échoue-t-elle ?

Il existe quelques raisons courantes pour lesquelles votre synchronisation peut échouer :

* Le compte de service ne dispose pas des permissions requises
* L'ensemble de données source est trop volumineux pour une synchronisation de base et vous devez utiliser la synchronisation avancée

Passez en revue les étapes de configuration ci-dessus et assurez-vous de les avoir suivies correctement. Si vous rencontrez toujours des problèmes, veuillez contacter `support@onesignal.com`.

### Pourquoi vois-je plusieurs ID de message pour le même contenu ?

Cela se produit généralement lorsqu'un modèle de message est réutilisé sur plusieurs envois ou flux déclenchés.

### À quelle fréquence OneSignal synchronise-t-il les données ?

Les intégrations d'exportation et d'importation peuvent se synchroniser aussi fréquemment que toutes les 15 minutes.

### Puis-je utiliser des vues BigQuery ?

Oui. Assurez-vous simplement que le compte de service a accès à toutes les tables référencées dans la vue.

***

## Ressources associées

* [Création de clés de compte de service dans GCP](https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating)
* [Documentation OneSignal Journeys](./journeys-overview)
* [Documentation d'exportation de données OneSignal](./exporting-data)

***
