# Accéder à la mémoire de votre chatbot

Lorsqu'il discute avec ses interlocuteurs, votre bot peut utiliser les informations qu'il a récoltées au fil de la conversation ou en exécutant des workflows. Informations stockées au sein d'attributs ou de tags (cf. la documentation correspondante pour plus de détails sur le fonctionnement général de la mémoire), qui pourront être utilisées au sein de message de resources ou en entrée d'autres workflow.

Si la manière de lire le contenu des ces types de mémoires peut varier, la manière globale d'y accéder est d'utiliser l'écriture suivante : { abcd }. Cette notation aussi appelée "écriture moustaches" permet au bot de savoir qu'il ne doit pas afficher strictement le texte qu'on lui donne à savoir "{ abcd }", mais l'information stockée dans l'attribut ou le tag nommé "abcd".

# 1. Lire le contenu des Attributs

# a) Attributs simples (texte)

Les attributs simples sont des attributs qui contienne du texte tel qu'une adresse email, un nom, une date de naissance, etc.

Par exemple, si vous avez un attribut "prenom", accéder à sa valeur se fait aussi facilement que

{prenom}

Et au sein d'un message d'une de vos resources, cela pourrait donner

Bonjour {prenom}, comment puis-je vous aider ?

Le message affiché à l'utilisatrice Raymonde serait alors : "Bonjour Raymonde, comment puis-je vous aider ?"

# b) Attributs structurés (Objets)

Un attribut "structuré" est une structure de données qui permet de stocker plusieurs informations. Ce type de données est généralement obtenu via une "Smart Resource" ou suite à un appel à une API tierce (consultez les documentations dédiées pour plus d'information sur ces sujets).

Par exemple, un attribut "identite" peut stocker le nom, le prénom et la date de naissance d'un utilisateur. Pour accéder à chacune de ces informations il faut utiliser la notation suivante.

{identite.prenom} (ou {identite.nom}, ou ...)

# 2. Lire le contenu des Tags

Alors que les Attributs sont destinés à stocker une information (attribut simple) ou un regroupement d'information (attribut structuré), les Tags servent à stocker une liste d'informations.

# a) Tags simples

Un tag simple est une liste d'information dont chaque élément est (le plus souvent) du texte. Ce type d'information est notamment généré par l'activation de la fonctionnalité "Demander une liste de réponses" des Resources. Voici par exemple un tag "favorite_sports" :

["running", "skateboarding", "curling"]

Pour accéder à chacune des ces réponses dans un message, il faut utiliser l'écriture suivante :

Vous aimez pratiquer le {tag.favorite_sports.0}, le {tag.favorite_sports.1} et le {tag.favorite_sports.2}

⚠️ Comme vous le constatez sur l'exemple, la numérotation des éléments d'un tag commence à 0. Donc pour accédez au premier élément il faut utiliser l'index "0", pour le second l'index "1", etc.

Vous pouvez également directement accéder à la liste complète des éléments d'un tag en utilisant l'écriture suivante : {tag.favorite_sports} (ou {tag.favorite_sports.[]}). Comme par exemple dans le texte de message suivant:

Voici les sports favoris que vous avez saisis : {tag.favorite_sports}

Ce qui donnera dans la conversation : "Voici les sports favoris que vous avez saisis : running,skateboarding,curling"

🔆 Notez que la deuxième notation ({tag.favorite_sports.[]}) peut être utilisée pour afficher une liste de boutons à partir des contenus d'un tag. Par exemple, la ressource ci-dessous (et en réglant les bons paramètres associés ; cf. la doc dédiée) :

Produira le résultat suivant dans la conversation :

b) Tags avancés

Nous l'avons vu précédemment, un tag n'est rient d'autre qu'une liste de valeur. Dans leur version simple les tags sont des listes de valeurs textuelles. Mais ces valeurs peuvent être plus complexes.

  • Tags dont les valeurs sont des listes :

Vous pourriez en effet avoir envie de stocker (où recevoir depuis une API) des données se présentant comme ceci :

favorite_sports: [[basket, handball], [skateboarding, basejumping]]

Vous pourrez alors accéder aux informations de ce tag de la manière suivante : (par exemple pour récupérer la valeur "basejumping") :

{tag.favorite_sports.1.1}
  • Tags dont les valeurs sont des Objets (comme des "attributs structurés", quoi)

Lorsque vous recevez une liste de données en provenance d'API, c'est souvent sous ce format :

[{"name": "running", "frequency": "twice a week"}{"name": "skateboarding", "frequency": "once a month"},{"name": "curling", "frequency": "daily"}]

Pour accéder aux données individuelles, il vous faut alors utiliser une combinaison de tout ce que nous venons de voir, à savoir :

I do {tag.favorite_sports.1.name} as a hobby, {tag.favorite_sports.1.frequency}.

Une autre notation similaire vous sera très utile, par exemple pour définir une liste de boutons (un peu comme nous avons vu plus haut) ou encore alimenter les différentes sections d'un carousel : {tag.favorite_sports.[].name} (par exemple, si nous voulons avoir la liste des noms des sports pratiqués)

Dans le cas du paramétrage d'un carousel, le paramétrage suivant :

Donnera le résultat suivant :

# 3. Utiliser une variable pour accéder à une valeur (champ) dans un tag (ou un attribut structuré)

Cette partie s'adresse à ceux qui sont très à l'aise 💪 avec ce que nous venons de voir.

Jusqu'à présent on a vu comment accéder à un champ d'attribut dont nous connaissions le nom, ou encore à un item dans un tag avec une position explicitement donnée.

C'est à dire que si nous avons un tableau :

tag.favorite_sports = ["running", "skateboarding", "curling"]

vous savez désormais que écrire {tag.favorite_sports.1} lors de la configuration d'un message va afficher "skateboarding" dans la conversation.

Mais imaginons que vous avez demandé à l'utilisateur de vous fournir la position du sport à afficher, via l'attribut position_sport (cet attribut peut donc contenir la valeur, 0, 1 ou 2). Comment faire pour utiliser cet attribut pour afficher l'item correspondant ? Eh bien accrochez-vous bien : vous pouvez utiliser des "moustaches à l'intérieur de moustaches" 🤯. Concrètement, et pour mettre fin au suspens, pour afficher le sport correspondant à la position choisie par l'utilisateur, il "suffit" d'écrire :

{tag.favorite_sports.{position_sport}

Pour bien comprendre, il suffit de se dire que cette écriture est interprétée en deux étapes (en démarrant avec l'écriture ci-dessus ; et pour l'exemple, disons que l'utilisateur a choisi la position 2):

  1. {position_sport} est évaluée => on obtient alors {tag.favorite_sports.2}
  2. {tag.favorite_sports.2} est évaluée => on obtient "curling" 🎺 🥁 🏆 👏

Après ce cas simple, voyons un cas un peu plus complexe mais qui plus proche de la réalité.

Imaginions que vous ayez stocké la liste des revenus mensuels d'une entreprise (MRR) dans le tag "mrr" et que vous voulez afficher le revenu d'un mois choisi par l'utilisateur (stocké dans l'attribut "month"). Pour ce faire, vous pouvez rédiger votre message de la sorte :

Hey Bernard, you want to know how much money your company earned on {month} ; here it is : {tag.mrr.{month} €

Ce qui pourrait produire le résultat suivant dans la conversation :

Hey Bernard, you want to know how much money your company earned on november ; here it is : 250 000 000 €

Pas si compliqué, hein ! 😉