Flux

Un flux est une partie du flux de dialogue de brique qui définit l'interaction avec l'utilisateur pour effectuer une tâche ou une partie d'une tâche que l'utilisateur souhaite effectuer.

Voici des exemples typiques de flux :

  • Flux orientés intention, où chaque intention définie dans la brique est associée à un flux, par exemple "Order Pizza", "Send Money" ou "Create Expense".
  • Flux de support ou utilitaires pour des tâches telles que l'autorisation utilisateur, l'intégration de nouveaux utilisateurs, la journalisation ou la fourniture d'une assistance utilisateur. Ces flux peuvent être appelés à partir de plusieurs flux.

    Par exemple, vous pouvez avoir un sous-flux Créer un compte que vous appelez à partir de flux tels que Order Pizza ou Send Money.

Types de flux

D'une manière générale, les flux se décomposent en types suivants :

  • Flux principal.
  • Flux d'intention.
  • Flux pour les événements intégrés et les transitions système.
  • Sous-flux pouvant être utilisés par les flux de niveau supérieur.

Flux principal

Avec les flux de dialogue créés dans le concepteur de flux visuel, chaque flux de dialogue dispose d'un flux principal unique qui est utilisé pour configurer les éléments suivants :

  • Mappages entre les événements et les flux.
  • Variables de contexte globales pouvant être utilisées dans tous les flux de la brique.

    Lorsque vous accédez à une telle variable avec une expression Freemarker, vous ajoutez le préfixe skill. au nom de la variable dans l'expression.

    Ces variables de niveau brique sont effacées après l'expiration de la session utilisateur. L'expiration de session est configurée au niveau du canal et est généralement de 24 heures par défaut.

Le flux principal n'est pas vraiment un flux en tant que tel. Il s'agit plutôt du centre de contrôle de la brique, à partir duquel les utilisateurs sont dirigés vers des flux spécialisés mis en correspondance avec les intentions résolues. La configuration de flux principale inclut la variable skill.system.nlpresult prédéfinie qui est remplie avec des résultats de correspondance d'intention et d'entité chaque fois qu'une intention est résolue, ce qui permet de transmettre le contrôle à des flux individuels.

Flux d'intentions

Lorsque vous concevez des flux de dialogue avec le concepteur de flux visuel, vous créez des flux que vous mettez ensuite en correspondance avec vos intentions. Toutes les intentions standard (c'est-à-dire les intentions qui ne sont pas des intentions de réponse) doivent être liées à un flux.

Pour les intentions de réponse, vous pouvez utiliser l'une des approches suivantes (ou une combinaison) :

  • Créez un flux unique et mettez-le en correspondance avec l'événement intégré Intention de réponse.
  • Créer des flux individuels pour des intentions de réponse spécifiques.

    Cette approche vous permet d'avoir des invites ou des questions spécifiques pour précéder et/ou suivre chaque réponse.

Remarque

Vous avez également la possibilité de ne fournir aucun flux pour les intentions de réponse, auquel cas la réponse est donnée à l'utilisateur sans que le flux de dialogue soit directement impliqué.

Flux d'utilitaire pour les événements intégrés et les transitions de système

Vous pouvez créer des flux déclenchés par les événements intégrés de la brique (telles que l'intention de réponse et l'erreur de boîte de dialogue), les événements personnalisés et les transition système (telles que Autoriser l'utilisateur et Erreur de boîte de dialogue).

Sous-flux personnalisés

Vous pouvez également créer des flux qui ne sont pas mis en correspondance avec une intention spécifique ou basés sur des événements intégrés (ou des transitions système) mais qui peuvent être appelés par d'autres flux.

Par exemple, dans une brique d'un restaurant, vous pouvez avoir un flux Afficher le menu qui peut être appelé au milieu d'un flux de commande si un utilisateur en fait la demande.

Variables et portée

Dans le concepteur de flux visuel, les variables pour peuvent être définies à deux niveaux :

  • dans un flux individuel. Les variables définies à ce niveau ne sont accessibles qu'à partir du flux dans lequel elles sont définies.

    Il est impossible d'accéder directement à une variable de portée de flux en dehors du flux où elle est définie, même à partir de sous-flux ou de flux appelants. Toutefois, vous pouvez définir des paramètres d'entrée et de sortie pour un flux afin de transmettre des valeurs aux variables définies dans le flux et à partir de celles-ci.

    A la fin du flux, les valeurs des variables sont réinitialisées.

    La plupart de vos variables doivent être définies à ce niveau. En utilisant régulièrement des variables de flux, vous rendez vos flux plus autonomes, ce qui les rend plus faciles à réutiliser, plus faciles à tester isolément et moins susceptibles d'être affectés par des bugs dans d'autres flux.

  • Dans le flux principal. Les variables définies ici ont une portée (globale) à l'échelle de la brique, ce qui signifie que tous les flux de la brique peuvent y accéder.

    Les valeurs de ces variables globales sont conservées lors de la session de l'utilisateur avec la brique. Les variables sont effacées à la fin de la session utilisateur avec la brique, ce qui se produit lorsque l'une des opérations suivantes se produit :

    • L'utilisateur ferme la fenêtre de discussion.
    • La session expire après une période d'inactivité (dont la valeur est définie au niveau du canal et qui est généralement de 24 heures).
    • Dans le contexte d'un assistant numérique, l'utilisateur quitte la brique ou atteint un état qui appelle directement une autre brique.
      Remarque

      Lorsque l'utilisateur interrompt une conversation avec une entrée non séquentielle et qu'il est temporairement acheminé vers une autre brique, l'assistant numérique reste dans le contexte de la brique d'origine et ses variables ne sont pas automatiquement effacées. Dans ce cas, si l'utilisateur revient à la brique d'origine après l'interruption, les variables contiennent leurs valeurs. Si l'utilisateur choisit de ne pas revenir à la brique d'origine, la brique d'origine est quittée et les variables sont effacées.

    Vous devez limiter votre utilisation de ces variables d'étendue de brique aux variables qui nécessitent un contexte partagé. Par exemple, dans une brique de livraison d'aliments, vous pouvez avoir besoin d'une variable de niveau brique pour la liste de toutes les commandes passées par un utilisateur au cours d'une session.

Remarque

Dans les composants Réponse commune et Définir une variable, vous pouvez également créer des variables de portée utilisateur ou de profil. Dans ce cas, vous créez les variables à l'aide de la liste déroulante directement dans la propriété Variable du composant (pas le bouton Créer en regard de la propriété). Reportez-vous à Autres types de variable.

Les valeurs de variable doivent correspondre au type déclaré pour la variable. Si une valeur qui ne correspond pas au type déclaré d'une variable est affectée, une erreur d'exécution se produit.

Remarque

Dans le concepteur visuel de flux, une valeur initiale peut être affectée aux variables lorsqu'elles sont déclarées. (Ceci est différent dans les flux de dialogue basés sur YAML, où vous devez utiliser un composant System.SetVariable pour définir la valeur initiale.)

Notes pour les développeurs utilisés pour les flux de dialogue basés sur YAML

Si vous êtes habitué à concevoir des flux de dialogue à l'aide de l'éditeur de code OBotML, vous devez connaître les éléments suivants concernant les flux que vous créez à l'aide du concepteur visuel de flux :

  • Aucune transition return n'est disponible dans le concepteur visuel de flux.

    Lorsque le dernier état d'un flux est atteint, les variables du flux sont effacées automatiquement (bien que toutes les variables de niveau brique restent actives jusqu'à la fin de la session).

  • Les transitions d'état peuvent uniquement être définies via les actions de transition ou de transition next.

    Lorsque vous utilisez le concepteur pour insérer un état dans un flux, les transitions next appropriées sont insérées dans cet état et dans l'état précédent.

    Les transitions implicites basées sur la séquence des états ne sont pas autorisées. Si aucune transition correspondante n'est trouvée, une erreur d'exécution est générée.

  • Il n'est pas possible d'utiliser directement des expressions FreeMarker pour définir de manière conditionnelle les états cible pour les transitions dans un composant. Pour spécifier l'état cible de manière conditionnelle, insérez un composant Switch dans le flux pour contenir l'expression et définir les transitions d'action en fonction du résultat de l'expression.

Concevoir des flux

Créer un flux

Pour pouvoir mapper n'importe quel type d'événement, qu'il s'agisse d'un événement d'intention pour un flux transactionnel ou d'un événement intégré pour un flux utilitaire, vous devez d'abord créer le flux lui-même. La mise en correspondance que vous affectez à un flux détermine si sa portée s'étend à l'ensemble de la brique ou uniquement à un flux.

Pour créer un flux, cliquez sur + Ajouter un flux.

L'éditeur est alimenté avec un noeud de début de flux Icône de démarrage de la boîte de dialogue.. Vous construisez le flux d'ici. L'éditeur inclut également le noeud Events où vous définissez les sous-flux pour les événements de transition système qui gèrent les erreurs de dialogue, les messages utilisateur désordonnés, les entrées utilisateur inattendues et l'authentification.
Description de l'image df-2-0-initial-flow.png
Description de l'image df-2-0-initial-flow.png

Votre flux peut se terminer sans état de fin de flux réel (implicitement), mais si vous avez défini des paramètres de sortie qui transmettent les valeurs requises à un autre flux, vous devez ajouter un état de fin de flux Icône Fin du flux., qui spécifie ces paramètres de sortie.

Conseil :

Cliquez sur Valider, puis vérifiez les résultats lorsque vous créez un flux.

.

Créer les variables de niveau brique

Si vous devez créer une variable accessible par tous les flux, votre premier arrêt avant de créer l'un des flux réels consiste à créer une variable de brique dans la page Variables de brique du flux principal :
  1. Sélectionnez Flux principal > Variable de compétence.
  2. Cliquez sur + Ajouter une variable, puis renseignez la boîte de dialogue.
  3. Sélectionnez le type de variable en tant qu'entité, type primitif, liste (tableau JSON) ou correspondance (objet JSON). Si la variable fait référence à une entité (personnalisée ou intégrée), renseignez la boîte de dialogue en nommant la variable pour l'entité sélectionnée.
    Remarque

    Vous devez créer des variables pour toutes les variables définies ou créées dans des gestionnaires d'événements d'entité ou des composants personnalisés.
  4. Si nécessaire, saisissez une valeur initiale (par défaut). Il peut s'agir d'une valeur unique (par exemple, false, pour une valeur booléenne ou 4 pour un entier), d'une expression (par exemple, list.ManageAccounts.addAccount pour une chaîne) ou d'un objet JSON, qui place les clés et les valeurs entre guillemets doubles ("), comme illustré par l'objet de liste suivant :
    [
     {
      "pizzaType":"Veggie",
      "price":"10 USD"
      } 
    ]
    Ce fragment de code illustre la valeur par défaut d'une variable de type de liste dans un tableau.

    Conseil :

    Si vous définissez une valeur initiale pour une variable, vous n'aurez pas besoin d'ajouter un état Set Variable dans le flux pour lui donner une valeur initiale.

Désigner un état de début

Vous pouvez utiliser le menu pour continuer à ajouter ou supprimer des états, ou pour réaffecter l'état de démarrage, ou le noeud de démarrage Il s'agit d'une image de l'icône de démarrage du noeud., du flux. Par exemple, si vous ajoutez un état précédent au noeud de début, vous pouvez l'affecter en tant qu'état de début.
Remarque

L'état de démarrage est le premier état à s'exécuter dans un flux. Si d'autres états précèdent l'état de démarrage, le flux ignore ces états, les laissant non exécutés.


Ajouter un état


Description de l'image df-2-0-initial-flow.png
Description de l'illustration df-2-0-initial-flow.png

A partir du noeud de début du flux, vous pouvez créer votre état en cliquant d'abord sur le menu icône du menu Add State, puis en insérant un état sélectionné dans la boîte de dialogue Ajouter un état, ouverte en cliquant sur Ajouter un état de début.
Description de l'image df-2-0-add-state-dialog.png
Description de l'illustration df-2-0-add-state-dialog.png

Insérer un état entre des états

Pour insérer un état entre deux états existants :

Modifier les propriétés d'un état

Cliquez sur un état pour ouvrir son éditeur de propriétés, dans lequel vous définissez la configuration et les transitions des composants.
Description de l'image df-2-0-start-state-properties.png
Description de l'illustration df-2-0-start-state-properties.png

L'éditeur de propriétés de l'état de sortie, par exemple, est un composant de message d'envoi pour la sortie d'une chaîne.
Voici la description de df-2-0-start-state-component-page.png :
Description de l'illustration df-2-0-start-state-component-page.png

Suppression d'états

Vous pouvez supprimer un état en survolant la mosaïque correspondante, en cliquant sur icône de menu, puis en sélectionnant Supprimer.

AVERTISSEMENT :

La suppression d'un état peut avoir des conséquences inattendues. Si vous supprimez un état, celui-ci est entièrement supprimé de chaque emplacement où il apparaît dans le flux. Si vous supprimez le mauvais état, vous pouvez le restaurer.
Pour supprimer une séquence d'états :
  1. Choisissez Supprimer les états dans le menu.

  2. Cliquez sur Supprimer dans la boîte de dialogue de confirmation.

    Si vous avez supprimé les états erronés, cliquez sur Annuler.
    Il s'agit d'une image de la boîte de dialogue Annuler.

Conseil :

Si vous souhaitez simplement supprimer une occurrence d'un état dans un flux, vous pouvez le déconnecter de cette partie du flux en modifiant la valeur de la transition vers cet état à partir de l'état précédent.

Restaurer un état supprimé

Si vous supprimez accidentellement un état et que vous réalisez que vous le souhaitez, vous pouvez le restaurer tant que vous restez dans le concepteur de flux visuel et que vous n'avez apporté aucune autre modification. Pour ce faire, procédez comme suit :

  1. Localisez la boîte de dialogue confirmant que l'état a été supprimé. Elle doit apparaître en bas à gauche de l'écran et ressembler à la capture d'écran suivante :

  2. Cliquez sur Annuler.

Reconnecter un état déconnecté

Au cours du développement, vous pouvez provoquer une rupture entre les états en modifiant une transition. A ce stade, la partie du flux qui est coupée du flux est mise en attente dans une mosaïque nommée Déconnecté, qui apparaît sous la mosaïque Evénements.



Vous pouvez reconnecter une partie d'un flux déconnecté à un flux de travail en indiquant le nom d'un état déconnecté en tant que transition dans le flux de travail. Pour ce faire, procédez comme suit :

  1. Si vous ne savez pas quels états ont été déconnectés, cliquez deux fois sur la mosaïque Déconnecté pour afficher les états qui ont été déconnectés du flux.
  2. Sélectionnez la mosaïque de l'état à partir duquel vous souhaitez passer à l'état actuellement déconnecté pour ouvrir son inspecteur de propriétés.
  3. Dans l'inspecteur de propriétés, sélectionnez l'onglet Transitions.
  4. Si vous utilisez la transition suivante, sélectionnez l'état déconnecté dans la liste déroulante Modification d'état suivante.
  5. Si vous utilisez une transition d'action, cliquez sur Modifier (Icône Modifier) pour la transition à utiliser pour l'état et remplacez la valeur de Transition par par l'état auquel vous souhaitez vous connecter.

Insérer un nouveau premier état

Vous devrez peut-être insérer un état avant le noeud de démarrage.Il s'agit d'une image de l'icône du noeud de départ.. Par exemple, après avoir construit votre flux, vous pouvez savoir que vous devez le réviser car il commence au mauvais point. Par exemple, votre flux démarre brusquement : son noeud de démarrage est un état qui appelle un service REST nécessitant une entrée utilisateur, mais aucun état précédent ne permet de collecter cette entrée utilisateur. En outre, comme il s'agit d'un noeud de début, aucune ligne de transition ne vous permet d'insérer un état. Pour ajouter un état avant le noeud de démarrage, vous devez utiliser l'option Ajouter l'état précédent. Pour ajouter un état avec cette option :
  1. Positionnez le pointeur de la souris sur l'état du noeud de démarrage pour appeler le menu l'icône de menu.
  2. Choisissez Ajouter l'état précédent.

  3. Sélectionnez un modèle dans la boîte de dialogue Ajouter un état. Vous pouvez choisir la transition Next par défaut ou créer une action de transition que vous pourrez configurer ultérieurement dans l'éditeur de propriétés.

  4. Après avoir inséré l'état précédent, vous pouvez l'affecter en tant que noeud de début en choisissant Définir l'état de début dans le menu.

Copier les états

Vous pouvez copier et coller un ou plusieurs états dans une autre partie du flux ou dans un flux distinct au sein de la brique.
  1. Cliquez sur le menu icône du menu Add State de l'état à copier, puis choisissez Copier les états. Votre sélection peut inclure un seul état, ou une branche entière, en fonction de la position de l'état et de la relation avec d'autres états.
    Option Copier les états

  2. Sélectionnez le flux cible (flux en cours ou autre flux au sein de la brique). Cliquez ensuite sur Copier. Si vous sélectionnez un flux distinct, toutes les variables associées à la sélection seront copiées dans ce flux.

  3. Ouvrez le noeud Déconnecté, puis définissez une transition qui connecte le ou les états au flux. Si vous créez un flux en fonction des états copiés, choisissez Définir l'état de démarrage pour l'état sélectionné.

    Remarque

    Les états copiés dans le flux en cours sont différenciés des états originaux par un 1. Par exemple, la copie de cancelOrder est cancelOrder1.