Attributs personnalisés imbriqués
Cette page traite des attributs personnalisés imbriqués, qui vous permettent de définir un ensemble d’attributs en tant que propriété d’un autre attribut. Autrement dit, lorsque vous définissez un objet d’attribut personnalisé, vous pouvez définir un ensemble d’attributs supplémentaires pour cet objet.
À propos des attributs imbriqués
Les attributs imbriqués vous permettent de créer des segments plus riches et de personnaliser les messages à l’aide des données d’un seul objet d’attribut personnalisé.
Dans l’exemple suivant, l’attribut personnalisé favorite_book contient les attributs imbriqués title, author et publishing_date. Cet objet peut être utilisé pour cibler les utilisateurs par auteur, filtrer par date de publication ou insérer le titre du livre directement dans un message :
1
2
3
4
5
"favorite_book": {
"title": "The Hobbit",
"author": "J.R.R. Tolkien",
"publishing_date": "1937"
}
Types de données prises en charge
Les types de données suivants sont pris en charge :
| Type de données | Description |
|---|---|
| Nombre | Une valeur numérique, telle que 1 ou 5.5. |
| Chaîne de caractères | Une valeur textuelle, telle que "Hello" ou "The Hobbit". |
| Valeur booléenne | Une valeur qui évalue soit true ou false. |
| Tableau | Une liste de valeurs, telles que ["red", "blue", "green"]. |
| Date |
Une valeur d'horodatage utilisée pour les comparaisons de date et d'heure. Lors du filtrage d'un attribut personnalisé de temps imbriqué, vous pouvez choisir :
|
| Objet | Une valeur structurée avec des paires clé-valeur, telle que {"author": "Tolkien"}. |
| Tableau d’objets |
Une liste d'objets, tels que [{"title": "The Hobbit"}, {"title": "Dune"}].
Pour plus d'informations, reportez-vous à
Tableaux d'objets.
|
Considérations
- Les attributs personnalisés imbriqués sont destinés aux attributs personnalisés envoyés via le SDK ou l’API Braze.
- Les objets ont une taille maximale de 100 Ko. Si une mise à jour fait dépasser 100 Ko à l’objet, Braze rejette la mise à jour et l’attribut reste inchangé.
- Les noms de clés et les valeurs de chaîne de caractères sont limités à 255 caractères.
- Les noms de clés ne peuvent pas contenir d’espaces.
- Les points (
.) et les signes dollar ($) ne sont pas des caractères pris en charge dans un PAYLOAD API si vous tentez d’envoyer un attribut personnalisé imbriqué vers un profil utilisateur. - Tous les partenaires Braze ne prennent pas en charge les attributs personnalisés imbriqués. Consultez la documentation partenaire pour vérifier si une intégration partenaire spécifique prend en charge cette fonctionnalité.
- Les attributs personnalisés imbriqués ne peuvent pas être utilisés comme filtre lors d’un appel API Connected Audience.
Exemple d’API
Voici un exemple /users/track avec un objet « Most Played Song ». Pour capturer les propriétés de la chanson, nous enverrons une requête API qui répertorie most_played_song en tant qu’objet, accompagné d’un ensemble de propriétés d’objet.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"attributes": [
{
"external_id": "user_id",
"most_played_song": {
"song_name": "Solea",
"artist_name": "Miles Davis",
"album_name": "Sketches of Spain",
"genre": "Jazz",
"play_analytics": {
"count": 1000,
"top_10_listeners": true
}
}
}
]
}
Pour mettre à jour un objet existant, envoyez un POST à users/track avec le paramètre _merge_objects dans la requête. Cela effectuera une fusion en profondeur de votre mise à jour avec les données existantes de l’objet. La fusion en profondeur garantit que tous les niveaux d’un objet sont fusionnés dans un autre objet, et pas seulement le premier niveau. Dans cet exemple, nous avons déjà un objet most_played_song dans Braze, et nous ajoutons maintenant un nouveau champ, year_released, à l’objet most_played_song.
1
2
3
4
5
6
7
8
9
10
11
{
"attributes": [
{
"external_id": "user_id",
"_merge_objects": true,
"most_played_song": {
"year_released": 1960
}
}
]
}
Une fois cette requête reçue, l’objet d’attribut personnalisé ressemblera à ceci :
1
2
3
4
5
6
7
8
9
10
11
{"most_played_song": {
"song_name": "Solea",
"artist_name" : "Miles Davis",
"album_name": "Sketches of Spain",
"year_released": 1960,
"genre": "Jazz",
"play_analytics": {
"count": 1000,
"top_10_listeners": true
}
}}
Vous devez définir _merge_objects sur true, sinon vos objets seront écrasés. _merge_objects est défini sur false par défaut.
Pour supprimer un objet d’attribut personnalisé, envoyez un POST à users/track avec l’objet d’attribut personnalisé défini sur null.
1
2
3
4
5
6
7
8
{
"attributes": [
{
"external_id": "user_id",
"most_played_song": null
}
]
}
Cette approche ne peut pas être utilisée pour supprimer une clé imbriquée à l’intérieur d’un tableau d’objets.
Exemple de SDK
Créer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
val json = JSONObject()
.put("song_name", "Solea")
.put("artist_name", "Miles Davis")
.put("album_name", "Sketches of Spain")
.put("genre", "Jazz")
.put(
"play_analytics",
JSONObject()
.put("count", 1000)
.put("top_10_listeners", true)
)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("most_played_song", json)
}
Mettre à jour
1
2
3
4
5
6
val json = JSONObject()
.put("year_released", 1960)
braze.getCurrentUser { user ->
user.setCustomUserAttribute("most_played_song", json, true)
}
Supprimer
1
2
3
braze.getCurrentUser { user ->
user.unsetCustomUserAttribute("most_played_song")
}
Créer
1
2
3
4
5
6
7
8
9
10
11
12
let json: [String: Any?] = [
"song_name": "Solea",
"artist_name": "Miles Davis",
"album_name": "Sketches of Spain",
"genre": "Jazz",
"play_analytics": [
"count": 1000,
"top_10_listeners": true,
],
]
braze.user.setCustomAttribute(key: "most_played_song", dictionary: json)
Mettre à jour
1
2
3
4
5
let json: [String: Any?] = [
"year_released": 1960
]
braze.user.setCustomAttribute(key: "most_played_song", dictionary: json, merge: true)
Supprimer
1
braze.user.unsetCustomAttribute(key: "most_played_song")
Créer
1
2
3
4
5
6
7
8
9
10
11
12
import * as braze from "@braze/web-sdk";
const json = {
"song_name": "Solea",
"artist_name": "Miles Davis",
"album_name": "Sketches of Spain",
"genre": "Jazz",
"play_analytics": {
"count": 1000,
"top_10_listeners": true
}
};
braze.getUser().setCustomUserAttribute("most_played_song", json);
Mettre à jour
1
2
3
4
5
6
import * as braze from "@braze/web-sdk";
const json = {
"year_released": 1960
};
braze.getUser().setCustomUserAttribute("most_played_song", json, true);
Supprimer
1
2
import * as braze from "@braze/web-sdk";
braze.getUser().setCustomUserAttribute("most_played_song", null);
Capturer des dates en tant que propriétés d’objet
Pour capturer des dates en tant que propriétés d’objet, vous devez utiliser la clé $time. Dans l’exemple suivant, un objet « Important Dates » est utilisé pour capturer l’ensemble des propriétés d’objet birthday et wedding_anniversary. La valeur de ces dates est un objet avec une clé $time, qui ne peut pas être une valeur nulle.
Si vous n’avez pas capturé les dates en tant que propriétés d’objet initialement, nous vous recommandons de renvoyer ces données en utilisant la clé $time pour tous les utilisateurs. Sinon, cela pourrait entraîner des segments incomplets lors de l’utilisation de l’attribut $time. Cependant, si la valeur de $time dans un attribut personnalisé imbriqué n’est pas correctement formatée, l’ensemble de l’attribut personnalisé imbriqué ne sera pas mis à jour.
1
2
3
4
5
6
7
8
9
10
11
{
"attributes": [
{
"external_id": "time_with_nca_test",
"important_dates": {
"birthday": {"$time" : "1980-01-01"},
"wedding_anniversary": {"$time" : "2020-05-28"}
}
}
]
}
Pour les attributs personnalisés imbriqués, si l’année est inférieure à 0 ou supérieure à 3000, Braze ne stocke pas ces valeurs sur l’utilisateur.
Modèles Liquid
L’exemple de modèle Liquid suivant montre comment référencer les propriétés de l’objet d’attribut personnalisé enregistrées à partir de la requête API précédente et les utiliser dans vos messages.
Utilisez la balise de personnalisation custom_attribute et la notation par points pour accéder aux propriétés d’un objet. Spécifiez le nom de l’objet (et la position dans le tableau si vous référencez un tableau d’objets), suivi d’un point, puis du nom de la propriété.
{{custom_attribute.${most_played_song}[0].artist_name}} — “Miles Davis”
{{custom_attribute.${most_played_song}[0].song_name}} — “Solea”
{{custom_attribute.${most_played_song}[0].play_analytics.count}} — “1000”

Personnalisation
En utilisant la fenêtre modale Ajouter une personnalisation, vous pouvez également insérer des attributs personnalisés imbriqués dans vos messages. Sélectionnez Attributs personnalisés imbriqués comme type de personnalisation. Ensuite, sélectionnez l’attribut de niveau supérieur et la clé d’attribut.
Par exemple, dans la fenêtre modale de personnalisation ci-dessous, cela insère l’attribut personnalisé imbriqué d’un bureau de quartier local en fonction des préférences d’un utilisateur.

Vérifiez qu’un schéma a été généré si vous ne voyez pas l’option d’insertion d’attributs personnalisés imbriqués.
Régénérer les schémas
Une fois qu’un schéma a été généré, il peut être régénéré une fois toutes les 24 heures. Cette section décrit comment régénérer votre schéma. Pour des informations plus détaillées sur les schémas, consultez Générer un schéma à l’aide de l’explorateur d’objets imbriqués.
Pour régénérer le schéma de votre attribut personnalisé imbriqué :
- Accédez à Paramètres des données > Attributs personnalisés.
- Recherchez votre attribut personnalisé imbriqué.
- Dans la colonne Nom de l’attribut correspondant à votre attribut, sélectionnez pour gérer le schéma.
- Une fenêtre modale apparaîtra. Sélectionnez Régénérer le schéma.
L’option de régénération du schéma sera désactivée si moins de 24 heures se sont écoulées depuis la dernière régénération. La régénération du schéma ne détectera que les nouveaux objets et ne supprimera pas les objets qui existent déjà dans le schéma.
Pour réinitialiser le schéma d’un tableau d’objets avec un objet existant, vous devez créer un nouvel attribut personnalisé. La régénération du schéma ne supprime pas les objets existants.
Si les données n’apparaissent pas comme prévu après la régénération du schéma, il est possible que l’attribut ne soit pas ingéré assez fréquemment. Les données utilisateur sont échantillonnées à partir des données précédemment envoyées à Braze pour l’attribut imbriqué concerné. Si l’attribut n’est pas ingéré suffisamment, il ne sera pas pris en compte pour le schéma.
Déclencher des modifications d’attributs personnalisés imbriqués
Vous pouvez déclencher une action lorsqu’un objet d’attribut personnalisé imbriqué change. Cette option n’est pas disponible pour les modifications de tableaux d’objets. Si vous ne voyez pas l’option d’affichage de l’explorateur de chemins, vérifiez que vous avez généré un schéma.
Par exemple, dans une campagne basée sur une action, vous pouvez ajouter une nouvelle action de déclenchement pour Modification de la valeur d’un attribut personnalisé afin de cibler les utilisateurs qui ont modifié leurs préférences de bureau de quartier.

Comportement de segmentation avec les tableaux d’objets
Lorsque vous utilisez plusieurs filtres Nested Custom Attribute avec une logique ET pour segmenter un tableau d’objets, chaque filtre est évalué indépendamment sur tous les éléments du tableau. Un utilisateur est qualifié pour le segment si n’importe quel élément du tableau satisfait chaque filtre individuel — les filtres n’ont pas besoin de correspondre au même élément.
Par exemple, supposons qu’un utilisateur possède le tableau suivant :
1
2
3
4
5
6
{
"orders": [
{"product": "Shoes", "price": 80},
{"product": "Hat", "price": 25}
]
}
Un segment avec les filtres ET suivants :
orders[].priceest supérieur à 50orders[].priceest inférieur à 30
Cet utilisateur serait qualifié car le premier filtre correspond à l’élément « Shoes » (80 > 50) et le second filtre correspond à l’élément « Hat » (25 < 30). Même si aucun élément unique ne satisfait les deux conditions, l’utilisateur entre quand même dans le segment.
Si vous avez besoin que toutes les conditions correspondent au même élément dans un tableau, utilisez la segmentation multi-critères sur le même chemin, ou restructurez vos données pour éviter la correspondance inter-éléments.
Points de donnée
Chaque clé envoyée consomme un point de donnée. Par exemple, cet objet initialisé dans le profil utilisateur compte sept (7) points de donnée :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"attributes": [
{
"external_id": "user_id",
"most_played_song": {
"song_name": "Solea",
"artist_name": "Miles Davis",
"album_name": "Sketches of Spain",
"year_released": 1960,
"genre": "Jazz",
"play_analytics": {
"count": 1000,
"top_10_listeners": true
}
}
}
]
}
La mise à jour d’un objet d’attribut personnalisé à null consomme également un point de donnée.