Utilisez le champDocumentation Index
Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
Use this file to discover all available pages before exploring further.
custom_data dans l’API Create Message pour envoyer des donnees dynamiques depuis votre backend et les afficher dans les templates en utilisant la syntaxe Liquid.
custom_data :
- Est specifique au message
- N’est pas stocke
- Existe uniquement pendant la requete API
- Doit etre utilise avec un
template_id
Quand utiliser custom_data
Utilisez custom_data lorsque vous avez besoin de :
- Donnees qui changent a chaque message (totaux de commande, articles du panier, soldes)
- Tableaux (listes de produits, lignes de commande, recommandations)
- Donnees qui ne doivent pas persister (codes a usage unique, URLs temporaires)
- Messages declenches depuis le backend
- Personnalisation en masse dans une seule requete API
Comment fonctionne la personnalisation avec custom_data
L’ajout de custom_data aux messages necessite quelques etapes :
Creer un template
Envoyer custom_data dans votre requete API
template_id- L’identifiant du templatecustom_data- L’objet de donnees- Ciblage de l’audience (
include_player_ids,include_aliasesou segments)
Modeles de donnees
Exemples courants de modeles de donnees que vous pouvez utiliser aveccustom_data.
Exemple JSON simple
Utilisez des paires cle-valeur simples pour une personnalisation basique comme les noms, les identifiants, les URLs ou toute donnee a valeur unique. Cas d’utilisation : Messages transactionnels (factures, recus, confirmations) ou chaque champ contient une seule valeur. Template :Exemple avec des tableaux de donnees
Transmettez des tableaux d’objets pour travailler avec plusieurs elements comme les produits du panier, les lignes de commande ou les recommandations. Les tableaux permettent a la fois l’acces direct (indexation) et l’iteration (boucles). Cas d’utilisation : Affichage de listes de produits, classements, recapitulatifs de commande ou toute donnee multi-elements. Template d’indexation (acces au premier element) :{{message.custom_data.cart_items.size}}— Nombre d’elements dans le tableau (retourne2dans cet exemple){{message.custom_data.cart_items.first.item_name}}— Nom du premier element (equivalent a[0]){{message.custom_data.cart_items.last.item_name}}— Nom du dernier element
Exemple de personnalisation en masse
Envoyez une seule requete API a plusieurs utilisateurs ou chaque destinataire voit un contenu personnalise base sur sonexternal_id.
Comment ca fonctionne :
- Structurez
custom_datacomme un objet ou les cles sont des external_ids et les valeurs sont des donnees specifiques a l’utilisateur - Dans le template, utilisez
subscription.external_idpour rechercher les donnees du destinataire actuel - OneSignal effectue le rendu du template une fois par destinataire avec ses donnees specifiques
subscription.external_idcontient l’external_id du destinataire actuel (par exemple, “user123”)message.custom_data.users[subscription.external_id]recherche les donnees de cet utilisateur dans l’objet custom_datauserdevient une variable raccourci pour les donnees de cet utilisateur- Chaque destinataire ne voit que son propre contenu personnalise
- John (user123) : “Hi John, you have 150 points. Your level is Gold.”
- Sarah (user456) : “Hi Sarah, you have 200 points. Your level is Platinum.”
- Tous les destinataires doivent avoir un
external_iddefini dans OneSignal - Chaque
external_iddansinclude_aliasesdoit avoir une cle correspondante danscustom_data.users - Si l’external_id d’un destinataire est absent de
custom_data, son message contiendra des champs vides
Exemple : Panier abandonne avec custom_data
Comment creer des messages de panier abandonne pour l’email et le push en utilisantcustom_data.
Quand utiliser cette approche :
- Votre serveur detecte l’abandon de panier (par exemple, 1 heure apres la derniere activite)
- Les donnees du panier en temps reel sont dans votre base de donnees
- Vous souhaitez afficher plusieurs produits avec images, noms et prix
- Chaque utilisateur peut avoir des articles et des quantites differents
- Vous souhaitez orchestrer le message depuis votre backend
Exemple de payload custom_data
Ceci est la requete API Create Message pour cet exemple.
| Champ | Type | Objectif |
|---|---|---|
cart_url | string | Lien unique vers le panier du client (pour les boutons/URLs de lancement) |
cart | array | Liste de produits — permet le comptage, les boucles et l’affichage des details |
product_image | string | Image du produit (par element dans le tableau) |
product_name | string | Nom du produit (par element) |
product_quantity | string | Quantite (par element) |
product_price | string | Prix avec formatage (par element) |
Template email
Cet exemple montre comment creer un template email qui affiche :- Le nombre d’articles dans le panier
- Chaque produit avec son image, son nom, sa quantite et son prix en utilisant une boucle for
- Un bouton qui renvoie vers l’URL unique du panier du client

Creer le template email
Ajouter la structure de mise en page
- Lignes 1, 2 et 4 : une colonne avec un bloc Paragraph
- Ligne 3 : quatre colonnes avec HTML | Paragraph | Paragraph | Paragraph
- Ligne 5 : une colonne avec un bloc Button

Afficher le nombre d'articles
Demarrer la boucle
- Demarre une boucle qui itere sur chaque objet dans le tableau
cart - Cree une variable temporaire appelee
productqui represente l’element actuel - Tout ce qui se trouve entre
{% for %}et{% endfor %}se repete une fois par article du panier - Vous pouvez nommer
productcomme vous le souhaitez (par exemple,item,cartItem) — restez simplement coherent
Afficher les details du produit
- Colonne 2 :
{{product.product_name}} - Colonne 3 :
{{product.product_quantity}} - Colonne 4 :
{{product.product_price}}
- A la premiere iteration,
product= premier objet dans le tableau cart {{product.product_image}}recupere l’URL de l’image du premier article- A la deuxieme iteration,
product= deuxieme objet - La ligne se repete automatiquement pour tous les articles du panier
Terminer la boucle
{% for %} doit avoir un {% endfor %} correspondant. L’absence de celui-ci cassera le rendu de l’email.Ajouter un bouton de lien vers le panier

Tester le template
- Configurez votre requete API en utilisant l’Exemple de payload
custom_data - Envoyez-vous l’email.
- Verifiez que les donnees s’affichent correctement.
Template push
Les notifications push ont des limites de caracteres et des restrictions liees au systeme d’exploitation, donc au lieu d’afficher tous les articles, affichez le premier produit et indiquez le nombre total avec une grammaire correcte. Voici un exemple de notification push que nous allons creer :
template_id dans votre requete API Create message avec la propriete custom_data pour tester.Depannage et bonnes pratiques
- Restez simple : N’incluez que les donnees que vous utiliserez reellement dans le template
- Restez en dessous de 2 Ko : Surveillez la taille de votre payload, surtout avec les tableaux
- Utilisez un nommage coherent : Tenez-vous au
snake_caseou aucamelCasede maniere constante - Validez avant d’envoyer : Verifiez les valeurs nulles, les tableaux vides et les champs obligatoires
- Utilisez toujours les filtres par defaut pour les champs optionnels :
Liquid
- Verifiez la taille du tableau avant de boucler :
Liquid
- Testez avec des cas limites : tableaux vides, champs manquants, nombre maximum d’elements
- Enregistrez les reponses API cote serveur pour detecter les erreurs de validation
- Surveillez les taux de livraison des messages — des baisses soudaines peuvent indiquer des erreurs Liquid
- Gardez des templates de secours prets pour les messages transactionnels critiques
- Pre-formatez les donnees complexes dans votre backend plutot que d’utiliser une logique Liquid complexe
- Mettez en cache les templates et reutilisez-les pour de nombreux appels API
- Envisagez de separer les messages transactionnels a fort volume des campagnes marketing
Le message est envoye mais le contenu est vide
Le message est envoye mais le contenu est vide
- Verifiez que les noms de champs correspondent exactement entre
custom_dataet le template (sensible a la casse) - Verifiez les fautes de frappe :
{{message.custom_data.name}}et non{{message.custm_data.name}} - Utilisez les filtres par defaut pour gerer les champs manquants
- Testez les templates avec la structure
custom_datareelle avant la mise en production
Erreur API : Corps de la requete trop volumineux
Erreur API : Corps de la requete trop volumineux
custom_data depasse la limite de 2 KoSolutions :- Supprimez les champs inutiles de votre payload
- Raccourcissez les noms de champs et les valeurs lorsque c’est possible
- Limitez les tableaux aux 3 a 5 premiers elements
- Deplacez le contenu statique volumineux (comme le HTML complet) dans votre template a la place
Pages associees
Personnalisation des messages
API Create Message
Utilisation de la syntaxe Liquid
Templates
support@onesignal.comVeuillez inclure :- Les détails du problème que vous rencontrez et les étapes de reproduction si disponibles
- Votre OneSignal App ID
- L’External ID ou le Subscription ID le cas échéant
- L’URL du message que vous avez testé dans le OneSignal Dashboard le cas échéant
- Tous les journaux ou messages d’erreur pertinents