Passer au contenu principal
Les flux de données vous permettent d’extraire des données en temps réel de vos API directement dans les messages au moment de l’envoi. Cela vous permet de délivrer un contenu hautement personnalisé sans précharger les données dans OneSignal. Utilisez les flux de données lorsque vos données changent fréquemment, par exemple :
  • Le solde de récompenses actuel d’un utilisateur
  • Le dernier statut de commande
  • Des recommandations de produits personnalisées
D’autres méthodes de personnalisation (comme les balises ou le contenu dynamique) sont excellentes pour les données statiques, mais les flux de données sont idéaux pour les valeurs en direct qui changent rapidement.
Les flux de données sont actuellement disponibles uniquement pour les messages e-mail envoyés via Journeys. Besoin d’un autre canal ? Remplissez cette courte enquête.

Comment fonctionnent les flux de données

  1. Créez un flux de données – Configurez la façon dont OneSignal se connecte à votre API.
  2. Attachez le flux de données à un modèle de message.
  3. Insérez les champs de réponse dans votre message en utilisant la syntaxe Liquid.
  4. Au moment de l’envoi, OneSignal effectue un appel API pour chaque destinataire, analyse la réponse et injecte les données dans votre message.

Exemple : Afficher les points de récompense

Supposons que vous souhaitez montrer à chaque client son solde de récompenses :
Hi {{ first_name }},

You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.

Keep shopping to earn more points!
Lorsque Sarah reçoit cet e-mail, elle verra son solde de points réel et son statut d’adhésion à la place de {{ data_feed.rewards.points }} et {{ data_feed.rewards.status_level }}. Nous utiliserons cet exemple pour vous montrer comment configurer un flux de données étape par étape ci-dessous.

Création et utilisation d’un flux de données

1. Configurez votre flux de données

Accédez à Data > Data Feeds dans la barre latérale pour voir la liste des flux de données existants et en créer un nouveau. Chaque flux de données doit avoir :
  • Nom : Un nom descriptif comme “API de récompenses client” pour vous aider à le distinguer dans votre liste de flux. Nous recommandons que ceux-ci soient uniques, mais ce n’est pas obligatoire.
  • Alias : Un nom court comme rewards que vous utiliserez dans la syntaxe Liquid. Ceux-ci doivent être uniques, ne contenir aucun espace et ne peuvent contenir que des caractères alphanumériques en minuscules sans symboles spéciaux.
  • Méthode : Comment nous devrions contacter votre API. Généralement, c’est GET mais POST est également pris en charge.
  • URL : L’adresse de l’API. Vous pouvez inclure la syntaxe Liquid, ce qui nous permet d’appeler l’API pour récupérer des données spécifiques à l’utilisateur.
Par exemple, votre point de terminaison de récompenses pourrait être formaté de cette manière, où vous utiliseriez une balise de données pour insérer l’ID externe (stocké dans OneSignal) afin de récupérer les données de récompenses de cet utilisateur :
https://acme.com/customers/user_id={{ external_id }}/rewards
  • En-têtes : Entrez les paires clé-valeur d’en-tête selon les spécifications de votre API. Une utilisation importante typique sera d’inclure des informations d’authentification. Ces champs prennent également en charge la syntaxe Liquid si nécessaire.
  • Corps : Si votre API l’exige, vous pouvez inclure un corps dans la requête au format JSON. Cet éditeur prend en charge la syntaxe Liquid, tout comme les webhooks Journey.
Par exemple, au lieu de dans la chaîne URL comme ci-dessus, votre API pourrait avoir besoin que vous spécifiiez l’ID de l’utilisateur dans le corps de la requête :
{
	"customer_id": "{{ external_id }}"
}
Une configuration complète de flux de données pourrait ressembler à ceci :

Exemple de configuration de flux de données

Nous recommandons de tester votre flux avant de l’utiliser. Vous le testez en utilisant des abonnements de test, assurez-vous donc que les attributs de votre abonnement de test renverront un résultat réel de votre API. Enfin, activez votre nouveau flux de données pour qu’il soit prêt à être utilisé.

2. Attachez le flux de données à votre modèle de message

Attachez votre flux de données à votre modèle de message afin que OneSignal sache l’utiliser.
  1. Accédez à Messages > Templates
  2. Dans la section Message, sélectionnez le bouton Personalization

Options du bouton de personnalisation

  1. Activez Data Feeds et sélectionnez votre flux

Section des flux de données dans le compositeur de messages

  1. Enregistrez votre modèle

3. Utilisez les données dans votre message

Utilisez la syntaxe Liquid pour insérer les données de réponse n’importe où dans votre message. Dans notre exemple, disons que la réponse pour Sarah, dont l’external_id est 1a1-b2c3, est un simple bloc JSON comme celui-ci :
{
	"external_id": a1-b2c3,
	"points": 193,
	"status_level": "Gold"
}
Nous voulons insérer le nombre de points et le niveau de statut dans le message, ce qui est accompli via la notation par points typique :
You have {{ data_feed.rewards.points }} points!
Your membership status is {{ data_feed.rewards.status_level }}.
Cela indique à OneSignal :
  • Utilisez un flux de données
  • Utilisez le flux de données rewards
    • Rappel : le flux rewards sait appeler l’API avec l’external_id du destinataire
  • À partir de la réponse, insérez la valeur de l’élément points (193) et de l’élément status_level (Gold)

Exigences et limites

Votre API doit :
  • Accepter l’authentification en une seule étape avec des jetons d’authentification dans les en-têtes
  • Répondre rapidement. Moins de 250 ms recommandé (cela affecte directement la vitesse d’envoi)
  • Renvoyer du JSON. Les autres formats ne sont pas pris en charge pour le moment.
    • Si vous avez un cas d’utilisation reposant sur un format alternatif, nous voulons l’entendre de votre part ! Remplissez cette courte enquête ici.
  • Gérer votre volume et votre taux d’envoi de messages. Si votre API a une limite de taux faible, cela nous empêchera de délivrer vos messages rapidement.
  • Renvoyer des charges utiles de taille raisonnable. Nous recommandons de maintenir les réponses en dessous de 50 ko pour de meilleures performances.
Limites actuelles :
  • Un flux de données par modèle. Nous prévoyons d’augmenter cette limite à l’avenir. Remplissez cette courte enquête ici pour nous faire savoir que vous en avez besoin.
  • Un appel API par flux de données par message. Récupérez tout ce dont vous avez besoin en un seul appel.
  • Journeys uniquement. Pas encore disponible pour d’autres méthodes d’envoi. Remplissez cette courte enquête ici pour nous faire savoir que vous en avez besoin.
  • Pas d’enchaînement d’appels. La charge utile d’un flux de données ne peut pas être utilisée pour appeler un autre.

Configuration de votre API

Avant de créer un flux de données, assurez-vous que votre API peut gérer ces exigences :

Authentification

Votre API doit accepter l’authentification via les en-têtes :
Authorization: Bearer YOUR_TOKEN
ou
X-API-Key: YOUR_KEY

Corps de requête JSON

Si vous devez inclure un corps dans la requête, votre API doit accepter JSON. Cela peut signifier que vos en-têtes doivent inclure Content: application/json.

Réponse JSON

Votre API doit renvoyer un objet JSON. Typiquement, cela signifie que vos en-têtes incluront Accept: application/json.

Paramètres de personnalisation

Vous passerez généralement les identifiants utilisateur dans l’URL comme ceci :
https://api.example.com/users/{{external_id}}/data
https://api.example.com/rewards?email={{email | url_encode}}
Et/ou dans le corps :
JSON
{
	"customer_id": "{{ external_id }}",
	"email": "{{ subscription.email }}"
}
Assurez-vous que ces données existeront dans OneSignal (généralement sous forme de balises de données, mais d’autres options sont disponibles comme les propriétés d’événements personnalisés).

Limites de taux

Considérez les limites de taux de votre API. Si vous envoyez à 10 000 utilisateurs en succession rapide, nous effectuerons 10 000 appels API. Assurez-vous que votre API peut gérer ce volume.

Gestion des erreurs

Si votre API renvoie une erreur ou n’a pas de données pour un utilisateur, le message ne sera pas envoyé à ce destinataire. Assurez-vous que votre API renvoie des données pour tous les utilisateurs attendus.

Liste de contrôle de démarrage

Avant de mettre en œuvre les flux de données, répondez à ces questions :
  • Quelles données veux-je afficher dans mon message ? Travailler à rebours à partir d’un simple plan avec les éléments à remplir depuis votre API identifiés vous aidera à organiser votre réflexion.
  • Ces données sont-elles disponibles via un seul point de terminaison API ?
  • Comment vais-je authentifier les requêtes API ?
  • Quel identifiant ou autre élément de données vais-je utiliser pour récupérer les données personnalisées ?
  • Cet identifiant est-il déjà stocké dans OneSignal ? Si non, comment sera-t-il rempli ?
  • Mon API peut-elle gérer le volume de requêtes que je vais générer ?
  • Que se passe-t-il si mon API n’a pas de données pour un utilisateur ?

Exemples et cas d’utilisation avancés

Les flux de données peuvent être utilisés avec la syntaxe Liquid ou en combinaison avec d’autres fonctionnalités de manière créative pour produire une personnalisation plus complexe.

Itération avec des boucles : panier abandonné

Disons que vous avez un flux de données cart qui renvoie un tableau d’articles dans le panier de l’utilisateur, plus le montant total du panier en dollars :
JSON
{
  "items": [
    {
      "name": "Blue Running Shoes",
      "price": 84.00,
      "image_url": "https://acme.com/blue-running-shoes.png"
    },
    {
      "name": "Protein Bar",
      "price": 5.99,
      "image_url": "https://acme.com/protein-bar.png"
    }
  ],
  "total": 89.99
}
Si vous voulez afficher chaque article dans le panier, plus le total du panier, vous pouvez utiliser une boucle for en Liquid :
HTML
<ul>
  {% for item in data_feed.cart.items %}
    <li>
      <strong>{{ item.name }}</strong><br>
      ${{ item.price }}<br>
      <img src="{{ item.image_url }}" alt="{{ item.name }}">
    </li>
  {% endfor %}
</ul>

<p>Cart total: ${{ data_feed.cart.total }}</p>

Cela donnera :
- Blue Running Shoes
- $84.00
- <running shoes image>
- Protein Bar
- $5.99
- <protein bar image>
Cart total: $89.99
Si vous utilisez l’éditeur de blocs d’e-mail, lors de l’insertion de ce type de syntaxe Liquid complexe, en particulier si vous devez inclure des images ou des liens, pour de meilleurs résultats, utilisez l’élément de bloc HTML personnalisé.

Propriétés d’événements personnalisés

En poursuivant l’exemple précédent du panier abandonné, comment pourrions-nous savoir comment récupérer ce panier particulier en premier lieu ? Une méthode pourrait être de créer un Journey déclenché par un événement personnalisé cart_abandoned, où les propriétés incluent un cart_id. Dans cet exemple, cet événement est envoyé à OneSignal via API :
curl
curl --request POST \
  --url https://api.onesignal.com/apps/{app_id}/custom_events \
  --header 'Accept: application/json' \
  --data '{
  "events": [
    {
      "name": "cart_abandoned",
      "external_id": "user_12345",
      "properties": {
        "cart_id": 98765
      }
    }
  ]
}'

Événement personnalisé pour l'entrée dans le Journey

L’utilisateur user_12345 entre dans le journey lorsque cet événement est déclenché, puis atteint un nœud envoyant un e-mail. Ce modèle d’e-mail est configuré avec le flux de données cart, où l’URL est définie pour récupérer le contenu d’un panier particulier comme ceci :
https://acme.com/carts/{{ journey.event.cart_abandoned.data.cart_id }}
Ainsi, lorsque cet événement particulier est ingéré et déclenche le Journey :
  1. La valeur cart_id de 98765 sera stockée dans le Journey
  2. Lorsque l’étape d’e-mail est atteinte, le flux de données cart référencera cette valeur cart_id et l’utilisera pour appeler l’API du panier
  3. Les propriétés JSON renvoyées seront analysées et insérées dans l’e-mail comme dans l’exemple précédent ci-dessus

Affichage conditionnel : statut de commande

Disons que vous voulez inclure le statut de la commande d’un client, mais n’inclure un lien de numéro de suivi que si la commande a été expédiée. Vous pouvez utiliser une instruction if pour ce faire :
Your order is {{data_feed.order.status}}!

{% if data_feed.order.tracking_number != empty %}
Track it here: {{data_feed.order.tracking_url}}
{% endif %}
Ici, le lien de suivi ne sera affiché que si le tracking_number existe.

Automatisation sans personnalisation

Les flux de données peuvent être utilisés pour insérer automatiquement des informations à jour dans vos messages sans nécessairement avoir besoin d’être personnalisés par destinataire. Par exemple, vous insérez peut-être une image de bannière en haut de vos e-mails et la changez mensuellement pour suivre les vacances et autres événements mensuels. Plutôt que de vous souvenir de télécharger une nouvelle image sur OneSignal et de modifier tous vos modèles chaque mois, vous pourriez configurer un flux de données qui récupère l’URL de l’image de bannière actuelle depuis votre CMS ou autre emplacement de gestion d’actifs. Vous configureriez un flux de données banner qui pointe vers un point de terminaison sans aucune variable dans l’URL comme ceci :
https://acme.com/assets/email-banner
Ce qui renvoie une réponse avec l’URL de la bannière actuelle :
JSON
{
	"banner_url": "https://acme.com/assets/email-banner/2025july.png"
}
Vous configureriez votre modèle d’e-mail pour utiliser {{ data_feed.banner.banner_url }} comme URL source de l’image, automatisant ce processus à l’avenir.

Dépannage

Mes données ne s’affichent pas

  1. Vérifiez que votre flux de données est attaché au modèle
  2. Vérifiez que votre syntaxe Liquid correspond exactement à votre structure JSON
  3. Testez votre point de terminaison API manuellement pour vous assurer qu’il renvoie des données
  4. Vérifiez que l’utilisateur a les balises de données requises (comme external_id)

Les messages s’envoient lentement

  1. Vérifiez le temps de réponse de votre API
  2. Assurez-vous que votre API peut gérer les requêtes simultanées

Certains destinataires ne reçoivent pas de messages

  1. Votre API pourrait ne pas avoir de données pour ces utilisateurs
  2. Vérifiez le journal des erreurs dans la configuration du flux de données pour les erreurs 404 ou autres erreurs
  3. Vérifiez vos journaux API pour les erreurs 404 ou autres erreurs
  4. Vérifiez que ces utilisateurs ont les identifiants requis dans OneSignal