Skip to content

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 :

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
  }
}}

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
    }
  ]
}

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.

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"}
      }
    }
  ]
}

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”

Utilisation de Liquid pour intégrer le nom d'une chanson et le nombre de fois qu'un auditeur l'a écoutée dans un message

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.

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é :

  1. Accédez à Paramètres des données > Attributs personnalisés.
  2. Recherchez votre attribut personnalisé imbriqué.
  3. Dans la colonne Nom de l’attribut correspondant à votre attribut, sélectionnez pour gérer le schéma.
  4. 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.

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.

Paramètres de réception d'une campagne basée sur une action avec un déclencheur de modification de la valeur d'un attribut personnalisé pour les préférences imbriquées.

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[].price est supérieur à 50
  • orders[].price est 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
        }
      }
    }
  ]
}
New Stuff!