# Variables

## Comment utiliser les variables

Explorons ce que sont les variables et comment les utiliser efficacement lors de la création de chatbots dans MaviBot.

{% hint style="danger" %}
**Veuillez prendre en compte les limites système suivantes pour les variables et les constantes dans un seul projet :**

**Variables de modèle :**

* **Quantité maximale :** 100 variables
* **Longueur maximale du nom :** 100 caractères

**Constantes du projet :**

* **Quantité maximale :** 50 constantes
* **Longueur maximale du nom :** 100 caractères
* **Longueur maximale de la valeur :** 5 000 caractères
  {% endhint %}

Une variable est un emplacement de stockage nommé pour des données, identifié par une étiquette textuelle unique.

<div data-with-frame="true"><figure><img src="/files/d0068fc2bf92c26c5581a61c1949797598d2059c" alt=""><figcaption></figcaption></figure></div>

&#x20;                                          *Fig. 1 : Une variable nommée `total`, stockant un montant de paiement*.

MaviBot propose plusieurs types de variables :

1. [Variables intégrées ](#built-in-variables)
2. [Variables système](#system-variables)&#x20;
3. Variables définies par l'utilisateur — ce sont celles que vous créez vous-même dans le projet.

**Déclarer une variable** signifie attribuer une valeur à un conteneur nommé. Autrement dit, une instruction comme ***a=0*** est la déclaration de la variable ***a***. Nous venons d'indiquer au constructeur que nous allons stocker un nombre dans la variable ***a***, et pour l'instant, cette valeur est ***0***.

**Attribuer une valeur à une variable** a le même sens.

Les expressions **« attribuer à une variable la valeur d'une fonction »** ou **« définir une variable égale à une fonction »** sont également couramment utilisées. Le principe est le même : au lieu d'attribuer une valeur précise, vous attribuez le résultat d'une fonction. Par exemple : **s\_id = tg\_send\_message(platform\_id, "Hello!")** Dans ce cas, le résultat de la fonction sera stocké dans la variable.

**Réinitialiser une variable** signifie lui attribuer la valeur **0**.

[**Fonctions et méthodes**](/doc/fr/chatbot/functions/variables.md#functions-for-working-with-variables)  sont des ensembles de commandes prédéfinis, configurés à l'avance par MaviBot. La plupart des fonctions nécessitent des paramètres - des valeurs que la fonction ou la méthode peut comprendre. Une fois que le bot reçoit les paramètres nécessaires, il exécute une commande spécifique.

**`tg_send_message(platform_id, "Hello!")` —** cette fonction envoie le message « Hello! » dans Telegram.

<div data-with-frame="true"><figure><img src="/files/cb15d3a08f3fc115f9b0f69f43670200363205fd" alt=""><figcaption></figcaption></figure></div>

<p align="center"><em>Fig. 2. Exemple d'une variable nommée text1 attribuée à une fonction.</em></p>

### <mark style="color:red;">**RÈGLES DE TRAVAIL AVEC LES VARIABLES :**</mark>

1. Le nom d'une variable ne peut commencer que par **une lettre**; il ne peut pas commencer par un chiffre.

   **Age1 - ✅ correct**  &#x20;

   1Age - ❌ <mark style="color:red;">incorrect</mark>

   **age1 -** **✅ correct**   <mark style="color:blue;">- option recommandée</mark> <br>
2. Une variable ne peut pas contenir d'espaces ni de caractères spéciaux, à l'exception du trait de soulignement (\_).

   **Name\_Surname - ✅ correct** &#x20;

   Name Surname - ❌ <mark style="color:red;">incorrect</mark>

   **nameSurname** **- ✅ correct**   <mark style="color:blue;">- option recommandée</mark><br>

   Les mots réservés des langages de programmation ne peuvent pas être utilisés comme noms de variables, par exemple : print, true, false, count, sum, etc.<br>
3. <mark style="color:$primary;">Il est</mark> <mark style="color:red;">**strictement interdit**</mark> <mark style="color:$primary;">d'utiliser</mark> d'utiliser les noms des variables intégrées et système pour les variables définies par l'utilisateur. Vous pouvez trouver la liste de ces variables ici. <mark style="color:red;">**lien**</mark>
4. <mark style="color:blue;">**Nous recommandons :**</mark>
   * Utilisez des noms de variables en latin (anglais).
   * Utilisez des noms de variables courts mais parlants, par exemple : totalSum, pay\_name, <mark style="color:red;">**ns**</mark>, name\_client, etc.

### Comment obtenir la valeur d'une variable

Placez le nom de la variable entre accolades **#{}**. Vous pouvez ainsi faire référence à sa valeur dans le champ du texte du message. Cependant, dans le champ « Calculatrice », vous devez faire référence à la valeur de la variable simplement par son nom, sans syntaxe supplémentaire.

{% hint style="danger" %}
Le **#{}** construction permet de récupérer la valeur d'une variable. Elle est utilisée dans le champ « Texte du message » pour insérer la valeur de la variable dans le texte.
{% endhint %}

Exemple :

<div data-with-frame="true"><figure><img src="/files/6fefa93f889b402a141c750c235bed22867eda65" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="success" %}
Le système prend en charge les variables imbriquées, où la valeur d'une variable fait partie du nom d'une autre variable. Par exemple : **#{q#{test#{i}}}**
{% endhint %}

Dans le champ « Calculatrice », référez-vous aux variables par leur nom sans utiliser la notation #{}. Par exemple, si nous avons deux variables : price (sum) et quantity (num).

`num = 10`

`sum = 1500`

<div data-with-frame="true"><figure><img src="/files/0d96fd078a8ac61e1d80f14dd0071dfbc04d565e" alt=""><figcaption></figcaption></figure></div>

### Comment afficher le montant total&#xD;

Saisissez ce qui suit dans la calculatrice :

`total_sum = sum1 * num2` **✅ correct**

<div data-with-frame="true"><figure><img src="/files/a2d7ba9084ecd4a8ce390842a0c2d3f10329755c" alt=""><figcaption></figcaption></figure></div>

**Comment&#x20;*****ne pas*****&#x20;le faire :**

`total_sum = #{sum1} * #{num2}` - ❌ <mark style="color:red;">incorrect</mark>

### Comment supprimer une variable du bot

Pour supprimer (effacer) une variable, saisissez l'une des lignes suivantes dans le champ « Calculatrice » :\
YourVariableName =\
ou\
YourVariableName = ""

Après le signe égal, laissez soit un espace, soit utilisez des guillemets doubles (ou simples).

{% hint style="warning" %} <mark style="color:red;">**Veuillez noter !**</mark> Il est important d'utiliser le bon préfixe pour indiquer à quel endroit appartient la variable.

Pour les variables au niveau du projet (stockées dans les paramètres du projet), utilisez le préfixe **project :**\
Exemple :&#x20;*project.YourVariableName =*&#x20;ou&#x20;*project.YourVariableName = ""*

Pour les variables au niveau du client, utilisez le préfixe **client** :\
Exemple :&#x20;*client.YourVariableName =* ou&#x20;*client.YourVariableName = ""*

Pour les variables au niveau de l'affaire, aucun préfixe n'est nécessaire.
{% endhint %}

## Variables intégrées

Voici la liste des variables intégrées :

**#{none}** - ignorer le message

**#{api\_key}** - jeton API utilisé dans les appels à l'API Salebot

**#{attachment\_url}** - contient le lien vers la pièce jointe

**#{attachments}** - un tableau JSON des URL des pièces jointes provenant du message de l'utilisateur

**#{avatar}** - lien vers l'avatar de l'utilisateur (affiché dans la section « Clients »)

**#{client\_id}** - identifiant du client dans le constructeur, également utilisé dans les requêtes API

**#{client\_type}** - le type de messagerie d'où provient le client (valeurs décrites \[ici])

**#{current\_date}** - date actuelle au format jj.mm.aaaa, basée sur le fuseau horaire du projet

**#{current\_time}** - heure actuelle au format hh:mm, basée sur le fuseau horaire du projet

**#{custom\_answer}** - la réponse reçue du serveur spécifié dans le champ « URL de réponse du serveur »

**#{message\_from\_outside}** - type du message entrant. Valeurs possibles :\
\&#xNAN;*message régulier = 0*\
*message envoyé via API = 1*\
*notification de rappel (fond jaune dans le dialogue) = 3*\
*notification de téléphonie (fond bleu clair dans le dialogue) = 5* \
*Cette variable est générée à chaque message entrant mais n'apparaît pas dans la fiche client.*\
*Vous pouvez l'utiliser dans le champ « Variable de comparaison » pour configurer des conditions pour les déclencheurs et les connexions de blocs.*

**#{date\_of\_creation}** - date à laquelle l'utilisateur a été ajouté au bot ou l'a contacté pour la première fois

**#{full\_name}** - nom complet de l'utilisateur (prénom et nom)

**#{group}** - bot auquel le client est lié (affiché comme « Lié au bot » dans la fiche client)

**#{main\_client\_id}** - identifiant du client principal parmi un groupe de fiches client liées

**#{message\_id}** - identifiant de l'état actuel de la conversation avec le client (par défaut NONE)

**#{messenger}** - nom de la messagerie d'où provient le client

\#{name} - prénom de l'utilisateur

\#{next\_day} - date de demain au format jj.mm.aaaa (utile pour planifier des messages)

**#{order\_id}** - identifiant de la commande (ID du client et ID interne de la commande séparés par un tiret)

**#{order}** - contenu de la commande soumise par l'utilisateur

**#{platform\_id}** - identifiant du client dans la plateforme de messagerie

**#{question}** - message envoyé par l'utilisateur

**#{timestamp}** - horodatage actuel, millisecondes incluses

**#{time\_of\_creation}** - heure à laquelle l'utilisateur a été ajouté au bot ou l'a contacté pour la première fois

**#{wa\_bot}** - numéro WhatsApp auquel l'utilisateur a envoyé un message (utile pour le transfert vers les champs CRM et la répartition des leads entre les responsables)

**#{weekday}** - jour de la semaine sous forme de nombre (lundi = 1, mardi = 2, etc.)

#### **valeurs de client\_type**

<table><thead><tr><th width="195.3359375">Valeur</th><th width="211.8125">Messagerie</th></tr></thead><tbody><tr><td>1  </td><td>pour Telegram </td></tr><tr><td>2  </td><td>pour Viber</td></tr><tr><td>3  </td><td>pour Facebook</td></tr><tr><td>5  </td><td>pour le chat en ligne</td></tr><tr><td>10</td><td>pour Instagram</td></tr><tr><td>14 </td><td>e-mail </td></tr><tr><td>16</td><td>Compte Telegram Business </td></tr><tr><td>21</td><td>Compte Telegram</td></tr><tr><td>22</td><td>TikTok</td></tr></tbody></table>

## Variables système

Le système génère automatiquement diverses variables d'exécution pendant le fonctionnement d'un bot. Vous pouvez utiliser ces variables lors de la création de votre bot. Voici une liste de celles qui pourraient vous être utiles.

{% hint style="info" %}
Vous pouvez trouver des variables système supplémentaires dans la documentation. Elles se trouvent dans les sections pertinentes à leur utilisation.
{% endhint %}

**phone** - numéro de téléphone

**notSubscribed** - si la variable vaut 1, le client s'est désabonné des messages et ne recevra plus aucun message

**clientBlocked** - le client est bloqué, et le bot ne fonctionne pas pour lui

**story\_url** - identifiant de la story Instagram à laquelle le client a répondu

**viewed\_page** - page depuis laquelle l'utilisateur écrit dans le chat en ligne

**wa\_bot** - numéro de téléphone du bot WhatsApp

{% hint style="info" %}
Pour savoir quelles variables peuvent être créées lors du paiement, consultez les guides d'intégration des services de paiement dans la section «[Système de paiement](/doc/fr/paiement.md) ».
{% endhint %}

## Variables personnalisées

Les variables personnalisées sont divisées en :

* Variables du projet (également appelées variables communes)
* [Variables client](#custom-variables)&#x20;
* [Variables d'affaire](#key-deal-variables) (également appelées variables régulières)
* [Constantes](#how-to-set-constant-variables)&#x20;

Chaque type de variable sera expliqué ci-dessous.

{% hint style="info" %}
Veuillez éviter d'utiliser les mêmes noms pour différents types de variables afin d'éviter toute confusion lorsque le Builder affiche ou utilise une valeur différente de celle attendue.
{% endhint %}

{% hint style="info" %}
Lors de l'attribution d'une valeur à une variable, il est important de préciser son type en utilisant le préfixe approprié :

**client.** (pour les variables client) et **project.** (pour les variables de projet). Aucun préfixe n'est utilisé pour les variables d'affaire.

Le préfixe est omis lors de la récupération de la valeur d'une variable.

Exemple :&#x20;Imaginons que vous vouliez créer une variable de projet appelée like pour servir de compteur des likes de vos clients.

**project.like = 0 - déclaration, effectuée une seule fois**

Dans le bloc où vous devez compter les likes, écrivez :&#x20;**project.like = like + 1**
{% endhint %}

{% hint style="info" %}
Ordre de priorité des variables :&#x20;les variables d'affaire ont la priorité la plus élevée, suivies des variables client, puis des variables de projet.
{% endhint %}

#### **Identifiant de messagerie (platform\_id)**

**Identifiant de messagerie (platform\_id)** est l'identifiant de l'utilisateur/de la discussion/du canal dans la messagerie. Pour le trouver, ouvrez la conversation avec le client souhaité dans la section « Clients ». Sur la droite de la fenêtre de chat, accédez à l'onglet «**À propos du client** - **Variables système »** ou à l'onglet «**Tous »** .

Le **`platform_id`** est une variable permanente générée par le système représentant l'identifiant unique de messagerie de l'utilisateur.

* **Persistance :** Cet identifiant reste constant pour un utilisateur. Même si vous supprimez son enregistrement du constructeur, son `platform_id` sera le même lors de la réinscription.
* **Origine :** L'identifiant est attribué par la plateforme de messagerie (par exemple Telegram, WhatsApp) lorsque l'utilisateur interagit pour la première fois avec le bot.

L'exemple suivant montre comment le `platform_id` apparaît dans une fiche client.

<div data-with-frame="true"><figure><img src="/files/e593ae6502a277ddbde7362225909fa642959d7d" alt="" width="563"><figcaption></figcaption></figure></div>

La variable platform\_id existe pour les utilisateurs ordinaires ainsi que pour les communautés, les canaux et les chats.

Pour obtenir la **platform\_id** (identifiant de messagerie) d'un canal Telegram dont le bot est administrateur, envoyez simplement un message au canal depuis votre compte personnel. Cela créera automatiquement une discussion entre le bot et le canal.

Vous pouvez copier la valeur du **platform\_id** du canal dans la section « À propos du client ».

Dans Telegram, l'identifiant de messagerie des canaux commence toujours par un signe moins (-). Lors de l'utilisation des fonctions, veillez à inclure la valeur entière, y compris le signe moins.&#x20;

## Comment utiliser les variables

Les variables peuvent être utilisées dans les déclencheurs, les commandes, les réponses des utilisateurs, les blocs, et plus encore. Voyons un exemple concret lors de la création d'un tunnel pour une agence immobilière.

Alors, créons un bloc Départ :

<div data-with-frame="true"><figure><img src="/files/bdc4a71537f9742b336baa243930f5ceaa249e03" alt=""><figcaption></figcaption></figure></div>

**Étape 1 : Créer le bloc « Merci »**

Créez un nouveau bloc avec un message remerciant l'utilisateur pour sa contribution.

**Étape 2 : Configurer la transition**

Sur la connexion menant à ce bloc, configurez le déclencheur suivant :

1. Activez le bouton **« L'utilisateur saisit des données »** .
2. Dans l’onglet **Dans le champ « Saisie de données », saisissez le nom de la variable :** Le texte saisi par l'utilisateur est stocké dans la variable **`name`**.

<div data-with-frame="true"><figure><img src="/files/d37e950cccd6ae7aa66342568444893e0e76bf5c" alt=""><figcaption></figcaption></figure></div>

. **`Name`** Cette valeur peut être réutilisée dans n'importe quel bloc suivant en appelant la variable avec la syntaxe `#{Name}` comme suit : `Bienvenue, #{Name} !`.

<div data-with-frame="true"><figure><img src="/files/78398e039a64bf400c40ceed946e1acb13b9f12e" alt=""><figcaption></figcaption></figure></div>

Le bot fonctionnera comme suit :

<div data-with-frame="true"><figure><img src="/files/e6f69a0682dfbe94af7bcc0a5730883bb638f0c6" alt="" width="563"><figcaption></figcaption></figure></div>

Maintenant, compliquons un peu la tâche.&#x20;

Dans ce même bloc, nous demanderons à l'utilisateur s'il est intéressé par un logement primaire (neuf) ou secondaire (revente) :

<div data-with-frame="true"><figure><img src="/files/113fb3ea75de40c6ff68c09eb5ba67212822fed9" alt=""><figcaption></figcaption></figure></div>

Ensuite, créez des connexions à partir des boutons « Logement primaire » et « Logement secondaire » dans le bloc « Chat ».

<div data-with-frame="true"><figure><img src="/files/903d36e130be759ec5099a0470ab2c9b06de4ab4" alt=""><figcaption></figcaption></figure></div>

Voyons maintenant la deuxième façon d'utiliser des variables dans les blocs.

Sélectionnez le bon bloc et saisissez le texte suivant dans le champ « Calculatrice » :&#x20;**client\_interest = Primary housing**. Dans le bloc de gauche, saisissez :&#x20;**client\_interest = Secondary housing**.

<div data-with-frame="true"><figure><img src="/files/c643acae5b1818a067066159cf99da9afe1e0f22" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/324fac10e109612eb58c943f486492d5a2d73e8e" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Une variable est attribuée à l'utilisateur lorsqu'il passe à l'un de ces blocs. Nous pourrons l'utiliser plus tard lors de la création d'une commande.
{% endhint %}

Ensuite, dans ces blocs, nous demanderons au client son budget pour l'achat d'un bien immobilier, et nous créerons deux autres blocs avec des flèches menant à ceux-ci en fonction des déclencheurs de réponse du client.

<div data-with-frame="true"><figure><img src="/files/b3edb376e05d652ab1bc79d9b2ebc1cbca48759b" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/b457f900941e0518a6942433c5c0fa900ac7f2ce" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/81be100649ad77e3b5fecbb3bdf17a837261897b" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/50e8df7e4017de4e0af9dc574c03187fd6b4045a" alt=""><figcaption></figcaption></figure></div>

À partir du bloc **« Quel est votre budget ? »**, créez une connexion et définissez une condition de déclenchement pour segmenter les utilisateurs en fonction de leur saisie.

1. Dans les paramètres de la connexion, activez la case à cocher **« L'utilisateur saisit des données »**.
2. Attribuez un nom de variable (par exemple, `budget`) pour stocker la réponse du client.
3. Dans l’onglet **champ « Variable »** utilisez la variable intégrée `#{question}` (qui contient le dernier message de l'utilisateur) pour créer une condition.
   * **Exemple :** `#{question} <= 1000000`

<div data-with-frame="true"><figure><img src="/files/8b759862cb512a10d86c80aa67a3564a9875f9a3" alt=""><figcaption></figcaption></figure></div>

{% hint style="warning" %}
Pour toutes les connexions vers les blocs **« Leads »** activez **« L'utilisateur saisit des données »** et définissez la variable.
{% endhint %}

Vous pouvez également définir une variable supplémentaire directement dans le bloc **« Leads »** pour fournir des informations plus complètes sur l'affaire.

<div data-with-frame="true"><figure><img src="/files/5f0497959ce68cc0c405b35d4a755169dcc72f32" alt=""><figcaption></figcaption></figure></div>

Maintenant, changez le type des deux derniers blocs en « Leads » et voyez le résultat :

Testons maintenant le flux en action :

<div data-with-frame="true"><figure><img src="/files/00b28fe5dd076c273165c18179b70db85eec0163" alt="" width="375"><figcaption></figcaption></figure></div>

Vous pouvez consulter l'affaire créée et les données enregistrées du client en allant dans la section **« Clients »** et en ouvrant la conversation correspondante. Les variables d'affaire y seront visibles.

<div data-with-frame="true"><figure><img src="/files/ba683e44194342fcab2fd0efa42fd295152168e8" alt=""><figcaption></figcaption></figure></div>

Vous savez maintenant comment utiliser les variables d'au moins trois façons différentes :

1. Attribuer des noms de variables aux données saisies par l'utilisateur (par exemple, « Nom », « Budget »)
2. Attribuer une valeur à une variable lors du passage à un bloc (par exemple, client\_interest = Primary housing)

## Comment afficher les variables

Pour afficher les variables d'un client, accédez à la section **« Clients »** et ouvrez sa fiche client.

<div data-with-frame="true"><figure><img src="/files/c89fe55b3dadca4e149f0f0e899143b42ab678ba" alt=""><figcaption></figcaption></figure></div>

Les variables sont affichées sous forme de liste dans la fiche client :

* Chaque variable occupe sa propre ligne.
* Le **nom de la variable** est affiché à gauche.
* Sa **value** valeur correspondante

**Pour modifier une variable :**

Survolez sa ligne dans la liste pour faire apparaître un bouton d'action. En cliquant sur ce bouton, vous pouvez :

* Modifier le nom de la variable.
* Modifier la valeur de la variable.
* Supprimer complètement la variable.

<div data-with-frame="true"><figure><img src="/files/5961344c27a3db76e4d68e8804a789e8b16c286d" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/8f8b50f63098336f7d5b52669326f3c498e9d9bf" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Les variables système ne peuvent pas être modifiées !
{% endhint %}

## Comment définir les variables client

{% hint style="info" %}
Les variables client ne sont pas supprimées, réinitialisées ni perdues lors de l'utilisation du bloc « Fin de la collecte de données » (bloc rouge).
{% endhint %}

Une variable client peut être définie de deux manières : explicitement et implicitement.\
Une manière explicite de définir une variable consiste à la définir dans le champ « Calculatrice » de l'un des blocs du tunnel.&#x20;

Exemple : `client.age = 28` ou `client.age = 28 :`

<div data-with-frame="true"><figure><img src="/files/5ad5b2122b85fafd9ca14c92410b0d7fb6bd9768" alt="" width="563"><figcaption></figcaption></figure></div>

La manière implicite consiste à définir une variable dans le champ de saisie des données de la flèche.

Exemple :

Créons un bloc où nous demandons le nom du client, et créons aussi un bloc en dessous :

<div data-with-frame="true"><figure><img src="/files/749b10350bbb36f43a3925db65a5e185a8374aa3" alt="" width="563"><figcaption></figcaption></figure></div>

Ensuite, accédez aux paramètres de la connexion et activez l'option « L'utilisateur saisit des données ».

<div data-with-frame="true"><figure><img src="/files/9d4367b77ae56c165c11de008bf238baf3fd4737" alt="" width="563"><figcaption></figcaption></figure></div>

Utilisez la `client.` préfixe lors du nommage de votre variable (par exemple, `client.name`) pour stocker la saisie de l'utilisateur. Cette variable pourra ensuite être référencée dans les messages ultérieurs comme `#{client.name}`.

<div data-with-frame="true"><figure><img src="/files/21b7691b1021edaab9362979866a2a81348e95c6" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="success" %}
Les variables client sont utilisées exactement comme les variables ordinaires dans le constructeur, mais sans le **client** préfixe.
{% endhint %}

## Comment définir les variables de projet

{% hint style="info" %}
Les variables globales ne sont pas supprimées, réinitialisées ni perdues lors de l'utilisation du bloc « Leads » (bloc rouge).
{% endhint %}

Les variables globales sont accessibles à tous les utilisateurs du bot. Elles sont idéales pour contrôler le comportement du bot ou faciliter les interactions entre différents utilisateurs.

**Exemple de cas d'utilisation :**\
Un utilisateur peut publier un article dans un canal de marketplace en définissant une variable (par exemple, `project.latest_listing`), et tous les autres utilisateurs peuvent le voir et y répondre.

#### **Syntaxe d'attribution**

Pour créer ou mettre à jour une variable globale, utilisez le `project.` préfixe dans la Calculatrice :

**Exemples :**

* `project.product_shop = 28`
* `project.age = 28`

<div data-with-frame="true"><figure><img src="/files/c58c2aaee3f4213c9dfbbcd55e61cf8d6ed7e317" alt=""><figcaption></figcaption></figure></div>

Elles peuvent être utilisées sans aucun préfixe.

Voyons comment les données sont affichées dans le tableau.

<div data-with-frame="true"><figure><img src="/files/af8e09f12b60fec818e8b985462b7961dba5150c" alt=""><figcaption></figcaption></figure></div>

Exécutez maintenant le bloc « Start » en mode test.

<div data-with-frame="true"><figure><img src="/files/87e4a24c4dd1e3a6c7ea934d9d82fe07f5ff8bec" alt="" width="375"><figcaption></figcaption></figure></div>

Nous pouvons voir les données qui ont été écrites dans la variable depuis le tableau dans le message envoyé par le bot. Comme nous avons fait référence à la variable dans le message à l'aide de la syntaxe `#{}` , les données qu'elle contenait ont été affichées dans le chat du bot.

{% hint style="info" %}
Plus de détails sur la façon de travailler avec la fonction get\_records\_from\_table() sont expliqués dans l'article «[Assistant IA avec le tableau MaviBot](/doc/fr/chatbot/ai/tables.md)".
{% endhint %}

Le `project.` préfixe a permis à la fonction d'écrire directement les données du tableau dans les variables globales du projet, accessibles dans les **« Variables »** section.

<div data-with-frame="true"><figure><img src="/files/7f73ad87e32168b04ab25e7cab714d68dc317629" alt=""><figcaption></figcaption></figure></div>

Vous pouvez modifier les variables du projet dans les paramètres du projet.

### Exemple : utilisation des variables du projet

Créez un système qui attribue un numéro séquentiel à chaque nouveau client qui entre dans le bot.

**Mise en œuvre :**

1. Accédez à vos **Paramètres du projet**.
2. Créez une nouvelle variable de projet (par exemple, `project.client_counter`).

<div data-with-frame="true"><figure><img src="/files/acf7c17bc3b8f8599959c0b077a227c01f6467b7" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/1c20b3225d541859d50b12ab418192f88e5cff6a" alt=""><figcaption></figcaption></figure></div>

3. Définissez sa valeur initiale (par exemple, `0`) ce qui signifie **« Aucun client dans le bot »**:

<div data-with-frame="true"><figure><img src="/files/0a6f0b954d72d613851b0cddc528466c40ca5ee4" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/2f0a823b35ecf593271b3f23d49d11e8534ccfa9" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/b92c63bd416edf3c322b451fbbc43c1e8db4baaa" alt="" width="563"><figcaption></figcaption></figure></div>

Dans le bloc de départ du bot, ajoutez une logique qui :

1. Incrémente la valeur de la variable du projet de 1.
2. Attribue la nouvelle valeur à une variable spécifique au client pour l'utilisateur actuel.

<div data-with-frame="true"><figure><img src="/files/1a06a92544fa6079a33929f0367a112e2011e7db" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
N'oubliez pas de mettre en place une restriction afin que le compteur ne puisse pas être incrémenté deux fois pour le même client.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/dbd3ee0b707c3dac67d06c5c8af1c0a3d37669c0" alt="" width="563"><figcaption></figcaption></figure></div>

## Comment définir les variables constantes

Les constantes sont des valeurs fixes qui restent inchangées (ou changent rarement) tout au long du cycle de vie d'un projet.

**Différence clé par rapport aux variables globales :**

Contrairement aux variables globales, les constantes sont **spécifiques au client**. Si la valeur d'une constante est modifiée, la modification ne s'applique qu'à la session de ce client individuel.

**Cas d'utilisation courants :**

Les constantes sont idéales pour stocker des données statiques telles que :

* Les prix des produits et les remises clients
* Les jetons d'intégration et les clés API
* Les coordonnées du vendeur ou du support
* Toute autre valeur de configuration fixe

### Exemple : utilisation de variables constantes

Par exemple, la remise d'un client pourrait être de 10 % par défaut, mais passer à 25 % lors de la saisie d'un code promotionnel.

Dans « Paramètres du projet » → « Constantes », saisissez : Discount : 10

<div data-with-frame="true"><figure><img src="/files/73f533e6aeb1015ea8ecffb504115f64b7afd141" alt=""><figcaption></figcaption></figure></div>

Pour saisir un code promotionnel, ajoutez un bloc « Déclencheur », dans lequel nous attribuons à la variable **discount** la valeur 25.

<div data-with-frame="true"><figure><img src="/files/8141772fa16af6d2342a80f72475aca055f07e43" alt=""><figcaption></figcaption></figure></div>

Affichez la variable qui montre le montant de la remise dans le bloc vert :

<div data-with-frame="true"><figure><img src="/files/8bdd130e3499db8f45526256e88fc1a5ae765a61" alt=""><figcaption></figcaption></figure></div>

**Étape 1 : Configurer la transition automatique**\
Créez une connexion avec un **minuteur de zéro seconde** depuis le bloc gris. Cela garantit que la remise est appliquée immédiatement et que le client passe au message du bloc de départ.

**Étape 2 : Tester le flux**\
Maintenant, écrivez un message au bot pour déclencher et tester toute la séquence.

<div data-with-frame="true"><figure><img src="/files/8ad99730e682e2d30d05e2e088db3e81357c3866" alt="" width="563"><figcaption></figcaption></figure></div>

La remise standard est de 10 % sans code promotionnel. Cependant, la saisie d'un code promotionnel valide change la situation.

<div data-with-frame="true"><figure><img src="/files/a0d028d9d9ef1a063ee175f888caa45609f2eda8" alt="" width="563"><figcaption></figcaption></figure></div>

Ainsi, après avoir saisi le code promotionnel, la variable « discount » pour ce client est devenue 25. <br>

Cela s'est produit parce qu'une affectation comme discount = 25 a défini la valeur de la variable d'affaire, au lieu de modifier la valeur de la constante portant le même nom.

## Variables d'affaire clés

**name** - nom de l'affaire. Le terme **Name** est utilisé pour la version internationale du projet.

**description** - description de l'affaire. **Description** est utilisé dans la version internationale du projet

**budget** - montant de l'affaire (nombre).

Pour modifier des variables à l'aide de la requête API /set\_order\_vars, vous devez utiliser les noms de ce[guide exactement comme indiqués](#how-to-set-client-variables), y compris la casse et la version du projet.

## Limites

{% hint style="warning" %}
Longueur maximale du nom de variable : 500 caractères

Longueur maximale de la valeur de variable : 100 000 caractères

Nombre maximal de variables par client ou affaire : 1 000 caractères.
{% endhint %}

## Comment bien travailler avec les variables

### *Quand faut-il encadrer la valeur d'une variable de guillemets ?*

*Par exemple, <mark style="color:yellow;">**client\_id = 1202020202**</mark> ou <mark style="color:green;">**client\_id = '1202020202'**</mark>?*

Les deux syntaxes sont fonctionnellement correctes. L'utilisation de guillemets autour d'une valeur n'affecte que sa mise en évidence visuelle dans l'éditeur de calculatrice.

Cependant, suivre des conventions de codage cohérentes améliore la lisibilité et la maintenance :

* **Omettez les guillemets** pour **les valeurs** numériques `(par exemple,`).
* **discount = 25** pour **Utilisez des guillemets** numériques `chaîne de caractères`).

<div data-with-frame="true"><figure><img src="/files/dc0ab356f51e700eecb8c41e35b692058ffebd45" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/5fc1ca319af65c2fa7c811e122b2dda865a33720" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/797f7e0f187b67e4554c2692eaf3273823e619eb" alt=""><figcaption></figcaption></figure></div>

*Quelle est la syntaxe correcte pour transmettre à des fonctions des identifiants tels que l'ID client, l'ID du site, l'ID du bloc ou l'ID du certificat — doivent-ils être encadrés de guillemets ?*

<div data-with-frame="true"><figure><img src="/files/35f4112998dcb6abc70880e025b8df403693e94f" alt="" width="563"><figcaption></figcaption></figure></div>

Un ID ne doit pas être encadré de guillemets lorsqu'il est transmis à une méthode ou à une fonction :

<div data-with-frame="true"><figure><img src="/files/21f43ca16b107a95d88c661c618b3df95ffe4bc8" alt=""><figcaption></figcaption></figure></div>

### Que faut-il utiliser : des guillemets doubles ou des guillemets simples ?

Il n’y a aucune différence entre l’utilisation de guillemets simples ou doubles, mais nous recommandons d’utiliser des guillemets doubles. De cette façon, par exemple, lorsqu’on insère une variable dans une chaîne, la variable sera mise en évidence dans une couleur différente, ce qui la rendra plus facile à repérer.

<div data-with-frame="true"><figure><img src="/files/c317aed7ddc5e8496c0912e8d5271dcee43fccd0" alt=""><figcaption></figcaption></figure></div>

### Comment faut-il placer les espaces ?&#x20;

Est-ce que cela fonctionne de la même façon s’il y a un espace entre la variable et le signe égal (par exemple, *<mark style="color:blue;">ans="yes"</mark>, <mark style="color:purple;">ans = "yes"</mark>, <mark style="color:orange;">ans= "yes"</mark>, <mark style="color:red;">ans ="yes"</mark>?*

<div data-with-frame="true"><figure><img src="/files/df2ebb6dfb1cfa909f1a0ab0c9c16a84b1c33694" alt=""><figcaption></figcaption></figure></div>

L’espacement n’affecte pas le fonctionnement des méthodes, des variables ou des fonctions. Cependant, il est recommandé d’utiliser des espaces dans le code afin d’améliorer la lisibilité.

### Comment écrire correctement des commentaires dans la calculatrice

{% hint style="success" %}
**Pour plus de détails sur la manière d’écrire des commentaires dans la Calculatrice, veuillez consulter** [**cet article**](/doc/fr/chatbot/functions/calculatrice.md)**.**
{% endhint %}

## Comment comparer des variables

Vous pouvez contrôler le déroulement du chatbot en comparant les valeurs des variables. Cela vous permet de créer une logique conditionnelle, par exemple vérifier l’âge d’un utilisateur pour des raisons de conformité légale ou acheminer les interactions en fonction de la plateforme de messagerie de l’utilisateur.

{% hint style="info" %}
Voici comment répartir l’entonnoir [par différents messagers ou par différents comptes du même messager, expliqué ici.](/doc/fr/faq/faq.md#how-can-i-split-a-funnel-by-messengers)
{% endhint %}

#### **Opérateurs pris en charge :**

"**+**": addition \
"**-**"': soustraction \
"**\***" *multiplication* \
"**/**": *division*\
"**%**'"*: reste de la division* \
"**^**" "**\*\***": exponentiation \
"**et**" "**ET**" "**&&**": ET logique \
"**ou**" "**OU**" "**||**": OU logique

Opérateurs de comparaison :\
"**==**" — égal à\
"**!=**" — différent de\
"**>**" — supérieur à\
"**<**" — inférieur à \
"**>=**" — supérieur ou égal à\
"**<=**" — inférieur ou égal à

{% hint style="warning" %}
**IMPORTANT !** \
Pour vérifier que **la balise de variable intégrée** (la balise de lancement du bot) n’est pas présente dans la fiche du client, utilisez la méthode de comparaison suivante :\
\
`tag == "NONE"`
{% endhint %}

Les variables doivent être comparées dans la condition, dans le champ "Variable" (à la fois dans les paramètres de connexion et dans les paramètres du bloc) :

**Exemple de comparaison de variable dans le champ "Variable" d’un bloc de déclenchement.**

<div data-with-frame="true"><figure><img src="/files/eecaa4fa4c5297371ffe8dcb3a50bb34d54eea88" alt=""><figcaption></figcaption></figure></div>

**Exemple de comparaison de variable dans le champ "Variable" d’une connexion de bloc.**

<div data-with-frame="true"><figure><img src="/files/a2f7280416ed8578c81b188a5d8b0e02db16d251" alt=""><figcaption></figcaption></figure></div>

#### **Comment les variables et les déclencheurs fonctionnent ensemble**

Pour qu’une connexion soit activée, **les deux déclencheurs doivent être satisfaits**:

1. La condition dans le **« Déclencheur »** .
2. La logique de comparaison dans le **champ « Variable »** .

#### **Comprendre le champ "Variable"**

Si vous saisissez uniquement un nom de variable (par ex., `client_type`) dans le **champ « Variable »** champ sans expression, le système vérifie la *présence* ou *véracité* de la valeur de la variable. Il ne la **ne pas** compare pas à la saisie brute de l’utilisateur.

**Exemple :**\
La configuration ci-dessous vérifie si le client vient de WhatsApp en confirmant que la `client_type` variable est égale à `6` (où `6` représente WhatsApp).

`client_type == 6`

<div data-with-frame="true"><figure><img src="/files/455bd33f671512f9b6241a8dd5886d7a91eb301d" alt="" width="563"><figcaption></figcaption></figure></div>

L’exemple ci-dessous fonctionne de manière identique :

<div data-with-frame="true"><figure><img src="/files/d7e090f528fc0e4dc01867cda339125bbc47324d" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
Veuillez noter ! \
Vous ne pouvez pas spécifier plusieurs valeurs pour la comparaison d’une variable dans le champ "Déclencheur".

<img src="/files/c792227155935e36543c15a0f7e8248e722e879a" alt="" data-size="original">

Ceci est incorrect !

Si vous devez comparer plusieurs variables, spécifiez leurs valeurs dans le champ "Variable".

Ces options sont correctes.

<img src="/files/cc937bee5b65ff6cc4aad9d91c997d55408f8c19" alt="" data-size="original">
{% endhint %}

{% hint style="info" %}
client\_type == 3 transition if the variable value equals **3**\
attachments != None transition if the variable contains any value\
attachments == None transition if the variable is not set\
product\_quantity >= 100 transition if the product quantity is greater than or equal to **100**\
product\_quantity <= 100 transition if the product quantity is less than or equal to **100**\
name == "John" transition if the variable name equals John

Pour vérifier si une variable est vide ou non, utilisez les expressions :\
\&#xNAN;**"#{value}" == ""**  \
**"#{value}" != ""** <br>

(où **value** est le nom de la variable).

Le résultat de l’opération de comparaison renvoie une valeur booléenne : **True** ou **Faux**.
{% endhint %}

{% hint style="warning" %}
Longueur maximale de l’expression : 1000 caractères
{% endhint %}

{% hint style="warning" %}
La valeur par défaut sera renvoyée comme résultat lors d’une tentative de comparaison de valeurs de types différents.

"==" - Faux                       "<" - Faux\
"!=" - Vrai                          ">=" - Faux \
">" - Faux                          "<=" - Faux
{% endhint %}

{% hint style="warning" %}
**IMPORTANT !** \
Pour vérifier que **la balise de variable intégrée** (la balise de lancement du bot) n’est pas présente dans la fiche du client, utilisez la méthode de comparaison suivante :\
\
`tag == "NONE"`
{% endhint %}

**Exemple :** un bot qui vérifie l’âge d’un utilisateur (`âge`).

* Si `age < 18`, il envoie un message pour les mineurs.
* Si `age >= 18`, il envoie un message pour les adultes.

<div data-with-frame="true"><figure><img src="/files/583c2c3dbc064aa68ee544b6b9c69e487864ed07" alt=""><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/53f57c5180c55dfc295928bb3e171e2023e42d3f" alt=""><figcaption></figcaption></figure></div>

Notez que le flux comprend un bloc sans déclencheur, avec des connexions temporisées qui en partent.&#x20;

Ce bloc est intentionnellement conçu pour montrer comment créer des flux dans lesquels le bot réagit non pas aux actions de l’utilisateur, mais aux résultats du calcul. À la première étape, la réponse est enregistrée dans une variable, puis la comparaison a lieu. Le délai sur les flèches est réglé sur 0 pour une réponse instantanée.

La comparaison **"Âge >= 18"** peut aussi s’exprimer comme **"supérieur ou égal à 18".**

<div data-with-frame="true"><figure><img src="/files/3bad5c2319ca2ee9c15a7e16eae3c2fd0dce4570" alt=""><figcaption></figcaption></figure></div>

{% hint style="danger" %}
Veuillez noter les erreurs dans les déclencheurs :

<img src="/files/011c7e0158b217a7648ccdb638a9cb253b1084a2" alt="" data-size="original">

<img src="/files/76ca011524850d9f2977f6e55f03b802c3c207d8" alt="" data-size="original">

<img src="/files/9f75e5095f1972fb36f6a5fd5c4b63a3657e770d" alt="" data-size="original">

**Un nombre ne peut pas être simultanément supérieur à, inférieur à et égal à 18 !**

Ces déclencheurs n’ont aucun sens. Tout nombre est soit inférieur à 18, supérieur à 18, soit égal à 18.
{% endhint %}

{% hint style="warning" %} <mark style="color:red;">**Important !**</mark>&#x20;

Les déclencheurs logiques avec des variables doivent être écrits dans le <mark style="color:red;">**champ « Variable »**</mark> champ, et non dans le champ "Déclencheur" !
{% endhint %}

Par exemple, dans l’image ci-dessous, le bloc sera déclenché si <mark style="color:green;">**la variable phone est renseignée**</mark> (c.-à-d. différente de **None**):

<div data-with-frame="true"><figure><img src="/files/957bbcfcfc8a28558eb1a4192c509e05340ab52c" alt="" width="563"><figcaption></figcaption></figure></div>

L’exemple suivant montre comment combiner des opérateurs :

<div data-with-frame="true"><figure><img src="/files/5b309ebfb631d1e58bb365c4d5c04c16b04751db" alt=""><figcaption></figcaption></figure></div>

Si le client possède une variable d’âge avec une valeur comprise entre 18 et 99, le bloc sera déclenché. Si la variable est absente, ou si l’âge est inférieur à 18 ou supérieur à 99, le bloc ne s’activera pas.

{% hint style="warning" %}
Remarque !&#x20;

Si vous comparez une variable à une valeur entre guillemets, assurez-vous qu’il n’y a pas d’espace entre les guillemets et la valeur ; sinon, le bloc peut ne pas se déclencher ou se comporter de manière incorrecte !

<mark style="color:green;">**Correct**</mark> (sans espace <mark style="color:red;">**avant le guillemet**</mark> ou <mark style="color:red;">**après la valeur my\_new\_bot**</mark>):

<img src="/files/0526e956ce7c7b1903a691257daa0a2e2a9f6f36" alt="" data-size="original">

<mark style="color:red;">**Incorrect**</mark> (avec un espace avant le guillemet) :

<img src="/files/5a2ac89fc8ce2f11bbf3cc2ccea830e0f0f7deca" alt="" data-size="original">
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/fr/chatbot/functions/variables.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
