À propos des dialogues de composant et de cascade

S’APPLIQUE À : Kit de développement logiciel (SDK) v4

Les dialogues sont fournis dans quelques types différents. Cet article décrit les dialogues de composant, de cascade et d’invite. Pour plus d’informations sur les dialogues en général, consultez l’article de la bibliothèque de dialogues . Pour plus d’informations sur les dialogues adaptatifs, consultez l’introduction aux dialogues adaptatifs.

Une boîte de dialogue en cascade (ou cascade) définit une séquence d’étapes, ce qui permet à votre bot de guider un utilisateur par le biais d’un processus linéaire. Ces boîtes de dialogue sont conçues pour fonctionner dans le contexte d’une boîte de dialogue de composant.

Une boîte de dialogue composant est un type de boîte de dialogue conteneur qui permet aux boîtes de dialogue définies d’appeler d’autres dialogues dans l’ensemble, telles qu’une boîte de dialogue en cascade appelant des boîtes de dialogue ou une autre boîte de dialogue en cascade. Les dialogues de composant gèrent un ensemble de dialogues enfants , tels que des dialogues en cascade, des invites, etc. Vous pouvez concevoir une boîte de dialogue de composant pour gérer des tâches spécifiques et la réutiliser, dans le même bot ou sur plusieurs bots.

Les boîtes de dialogue d’invite (invites) sont des boîtes de dialogue conçues pour demander à l’utilisateur d’obtenir des types d’informations spécifiques, tels qu’un nombre, une date ou un nom, etc. Les invites sont conçues pour fonctionner avec des dialogues en cascade dans une boîte de dialogue de composant.

Dialogues de composants

Parfois, vous avez besoin d’écrire un dialogue réutilisable afin de l’exploiter dans différents scénarios, par exemple un dialogue d’adresse qui invite l’utilisateur à fournir des valeurs de rue, ville et code postal.

Le dialogue composant propose une stratégie qui permet de créer des dialogues indépendants pour gérer des scénarios spécifiques, en divisant un jeu de dialogues en éléments plus petits plus faciles à gérer. Chacun de ces éléments a son propre jeu de dialogues, ce qui permet d’éviter toute collision de nom avec le jeu de dialogues qui le contient. Pour plus d’informations, consultez la boîte de dialogue du composant.

Dialogues en cascade

Un dialogue en cascade est une implémentation spécifique d’un dialogue, qui est couramment utilisée pour recueillir des informations auprès de l’utilisateur ou pour le guider dans une série de tâches. Chaque étape de la conversation est implémentée comme une fonction asynchrone qui prend un paramètre de contexte d’étape en cascade (step). À chaque étape, le bot invite l’utilisateur à entrer (ou peut commencer une boîte de dialogue enfant, mais il s’agit souvent d’une invite), attend une réponse, puis transmet le résultat à l’étape suivante. Le résultat de la première fonction est transmis en tant qu’argument à la fonction suivante, et ainsi de suite.

Le diagramme suivant représente une séquence d’étapes en cascade et les opérations de pile qui se produisent. L’utilisation de la pile de dialogues est décrite ci-dessous dans la section sur l’utilisation des dialogues.

Représentation de la façon dont les messages mappent aux étapes en cascade.

Dans le cadre des étapes en cascade, le contexte du dialogue en cascade est stocké dans son contexte d’étape en cascade. Le contexte d’étape est similaire au contexte de boîte de dialogue et fournit l’accès au contexte de tour et à l’état actuels. Utilisez l’objet de contexte d’étape en cascade pour interagir avec un ensemble de dialogues défini dans une étape en cascade.

Vous pouvez gérer une valeur de retour à partir d’un dialogue, soit dans le cadre d’une étape en cascade dans un dialogue, soit depuis le gestionnaire de tour de votre bot, même si vous avez généralement besoin de vérifier uniquement l’état du résultat du tour à partir de la logique de tour de votre bot. Dans une étape en cascade, le dialogue fournit la valeur renvoyée dans la propriété résultat du contexte de l’étape en cascade.

Propriétés du contexte d’étape en cascade

Le contexte d’étape en cascade contient les propriétés suivantes :

  • Options : contient les informations d’entrée pour le dialogue.
  • Valeurs : contient les informations que vous pouvez ajouter au contexte, transmises aux étapes suivantes.
  • Résultat : contient le résultat de l’étape précédente.

En outre, la méthode suivante (NextAsync en C#, suivant en JavaScript et Python) continue à l’étape suivante de la boîte de dialogue en cascade au sein du même tour, ce qui permet à votre bot d’ignorer une certaine étape si nécessaire.

Invites

Les invites, au sein de la bibliothèque de dialogues, offrent un moyen simple de demander des informations à l’utilisateur et d’évaluer sa réponse. Par exemple, pour une invite de nombres, vous spécifiez la question ou les informations que vous demandez, et l’invite vérifie automatiquement si elle a reçu une réponse de nombre valide. Si c’est le cas, la conversation peut continuer; si ce n’est pas le cas, il repromira l’utilisateur pour une réponse valide.

Dans les coulisses, les invites constituent une boîte de dialogue en deux étapes. Tout d’abord, l’invite demande une entrée. Ensuite, elle retourne la valeur valide ou redémarre depuis le début avec une nouvelle invite.

Les invites comportent des options qui sont proposées lorsqu’elles sont appelées. Ces options vous permettent de spécifier le texte des invites, les invites de nouvelle tentative en cas d’échec de validation et les possibilités de réponse. En général, les propriétés d’invite et de nouvelle tentative sont des activités, bien qu’il y ait une certaine variation sur la façon dont cela est géré dans différents langages de programmation.

De plus, vous pouvez choisir d’ajouter une validation personnalisée pour votre invite au moment où vous la créez. Par exemple, supposons que nous voulions obtenir une taille, à l’aide d’une invite numérique, devant être supérieure à 2 mais inférieure à 12. L’invite vérifie d’abord s’il a reçu un nombre valide, puis exécute la validation personnalisée si elle est fournie. Si la validation personnalisée échoue, elle repromira l’utilisateur comme indiqué ci-dessus.

À la fin de l’invite, la valeur demandée obtenue est explicitement retournée. Lorsque cette valeur est retournée, nous pouvons être sûrs qu’elle a passé la validation d’invite intégrée et toute validation personnalisée supplémentaire qui a peut-être été fournie.

Pour des exemples d’utilisation des diverses invites, intéressez-vous à la manière d’utiliser la bibliothèque de dialogues pour recueillir une entrée utilisateur.

Types d’invites

Dans les coulisses, les invites constituent une boîte de dialogue en deux étapes. Tout d’abord, l’invite demande une entrée ; deuxièmement, il retourne la valeur valide ou redémarre à partir du haut avec un reprompt. La bibliothèque de dialogues offre différentes invites de base, chacune utilisée pour collecter un type de réponse différent. Les invites de base peuvent interpréter une entrée de langage naturel, comme « dix » ou « une dizaine » pour un nombre, ou « demain » ou un « vendredi à 10 h » pour une date-heure.

Prompt Description Retours
Invite de pièce jointe Demande une ou plusieurs pièces jointes, un document ou une image par exemple. Une collection d’objets Pièce jointe.
Invite de choix Demande un choix à partir d’un ensemble d’options. Un objet de choix trouvé.
Invite de confirmation Demande une confirmation. Valeur booléenne.
Invite de date et d’heure Demande une date et une heure. Une collection d’objets de résolution de date / heure.
Invite de nombre Demande un nombre. Une valeur numérique.
Invite de texte Demande une saisie de texte générale. Une chaîne.

Pour inviter un utilisateur à saisir une entrée, définissez une invite à l’aide de l’une des classes intégrées, text prompt, par exemple, et ajoutez-la à votre ensemble de dialogues. Les invites ont des ID fixes devant être uniques au sein d’un ensemble de boîte de dialogue. Vous pouvez avoir un validateur personnalisé pour chaque invite, et pour certaines d’entre elles, vous pouvez spécifier des paramètres régionaux par défaut.

Paramètres régionaux d’invite

Les paramètres régionaux sont utilisés pour déterminer le comportement spécifique à la langue des invites choix, confirmer, date-heure, et nombre. Pour toute entrée donnée de l’utilisateur, si le canal fournit une propriété paramètres régionaux dans le message de l’utilisateur, elle est utilisée. Sinon, les paramètres régionaux par défaut de l’invite sont utilisés s’ils sont définis, soit en les fournissant lors de l’appel du constructeur de l’invite ou bien en les définissant ultérieurement. Si aucun de ces paramètres régionaux n’est fourni, l’anglais (« en-us ») est utilisé comme paramètres régionaux.

Les paramètres régionaux sont un code ISO 639 de deux, trois ou quatre caractères qui représente une famille de langues ou de langues.

Options d’invite

Le deuxième paramètre de la méthode prompt du contexte pas à pas prend un objet prompt options qui possède les propriétés suivantes.

Propriété Description
Prompt L’activité initiale à envoyer à l’utilisateur, pour demander son entrée.
Invite de nouvelle tentative Activité à envoyer à l’utilisateur si sa première entrée n’a pas été validée.
Choices Une liste des choix que l’utilisateur peut sélectionner, pour une utilisation avec une invite de choix.
Validations Paramètres supplémentaires à utiliser avec un validateur personnalisé.
Style Définit la façon dont les choix d’une invite de choix ou de confirmation seront présentés à un utilisateur.

Vous devez toujours spécifier l’activité d’invite initiale à envoyer à l’utilisateur, et une invite de nouvelles tentatives pour les instances lorsque l’entrée de l’utilisateur ne valide pas.

Si l’entrée de l’utilisateur n’est pas valide, l’invite de nouvelle tentative est envoyée à l’utilisateur ; si aucune nouvelle tentative n’a été spécifiée, l’invite initiale est utilisée. Toutefois, si une activité est renvoyée à l’utilisateur à partir du validateur, aucune demande de nouvelle tentative n’est envoyée.

Validation de l’invite

Vous pouvez valider la réponse à une invite avant de retourner la valeur à l’étape suivante de la cascade. Une fonction du validateur possède un paramètre de contexte de validateur d’invite et retourne une valeur booléenne indiquant si l’entrée passe la validation. Le contexte de validateur d’invite inclut les propriétés suivantes :

Propriété Description
Contexte Le contexte de tour actuel pour le bot.
Reconnu Un résultat du module de reconnaissance de l’invite qui contient des informations sur l’entrée de l’utilisateur, comme traitées par le module de reconnaissance.
Options Contient les options de l’invite qui ont été fournies dans l’appel pour démarrer l’invite.

Le résultat du module de reconnaissance de l’invite a les propriétés suivantes :

Propriété Description
Réussi Indique si le module de reconnaissance a été en mesure d’analyser l’entrée.
Valeur La valeur renvoyée du module de reconnaissance. Si nécessaire, le code de validation peut modifier cette valeur.

Utilisation de dialogues

Les dialogues peuvent être considérés comme une pile programmatique, que nous appelons pile de dialogues, avec le gestionnaire de tour comme dirigeant et comme élément de secours si la pile est vide. L’élément le plus haut de cette pile est considéré comme le dialogue actif, et le contexte de dialogue dirige toutes les entrées vers le dialogue actif.

Lorsqu’un dialogue commence, il est poussé sur la pile et est maintenant le dialogue actif. Il reste le dialogue actif jusqu’à ce qu’il se termine, il est supprimé par la méthode de remplacement du dialogue , ou un autre dialogue est envoyé sur la pile (par le gestionnaire de tour ou le dialogue actif lui-même) et devient le dialogue actif. Lorsque ce nouveau dialogue se termine, il est retiré de la pile et le dialogue suivant devient à nouveau le dialogue actif. Il est ainsi possible de répéter un dialogue ou de créer une branche de conversation, comme décrit ci-dessous.

Vous pouvez commencer ou continuer un dialogue racine à l’aide de la méthode d’extension de dialogue d’exécution . À partir du code du bot, l’appel de la méthode d’extension d’exécution de dialogue continue la boîte de dialogue existante ou démarre une nouvelle instance du dialogue si la pile est actuellement vide. Le contrôle et l’entrée utilisateur accèdent à la boîte de dialogue active sur la pile.

La méthode d’exécution nécessite un accesseur de propriété d’état pour accéder à l’état du dialogue. L’accesseur est créé et utilisé de la même façon que les autres accesseurs d’état, mais il est créé comme sa propre propriété basée sur l’état de la conversation. Pour plus d’informations sur la gestion de l’état, consultez la rubrique sur la gestion de l’état. L’utilisation de l’état du dialogue est présentée dans le guide pratique sur le flux de conversation séquentiel.

À partir d’un dialogue, vous avez accès au contexte de dialogue et pouvez l’utiliser pour démarrer d’autres dialogues, mettre fin au dialogue actuel et effectuer d’autres opérations.

Pour démarrer un dialogue

À partir d’un dialogue en cascade, transmettez l’ID de dialogue du dialogue que vous souhaitez commencer dans le contexte du dialogue en cascade à l’aide du dialogue de début, de l’invite ou de la méthode de dialogue de remplacement.

  • Les méthodes de dialogue d’invite et de début poussent une nouvelle instance du dialogue référencé en haut de la pile.
  • La méthode replace dialog fait sortir le dialogue actuel de la pile, puis envoie le dialogue de remplacement en haut de la pile. Le dialogue remplacé est annulé et les informations contenues dans cette instance sont supprimées.

Utilisez le paramètre options pour passer les informations à la nouvelle instance du dialogue. Les options transférées dans le nouveau dialogue sont accessibles via la propriété options du contexte de n’importe quelle étape du dialogue. Pour plus d’informations, consultez comment créer un flux de conversation avancé à l’aide de branches et de boucles.

Pour continuer un dialogue

Dans un dialogue en cascade, utilisez la propriété valeurs du contexte d’étape pour conserver l’état entre les tours. Toute valeur ajoutée à cette collection dans un tour précédent reste disponible dans les tours suivants. Pour plus d’informations, consultez comment créer un flux de conversation avancé à l’aide de branches et de boucles.

Pour terminer un dialogue

Dans un dialogue en cascade, utilisez la méthode de dialogue de fin pour mettre fin à un dialogue en le dépilant de la pile. La méthode de dialogue de fin peut retourner un résultat facultatif au contexte parent (tel que le dialogue qui l’a appelé ou le gestionnaire de tour du bot). Cette dernière est souvent appelée à partir du dialogue pour mettre fin à son instance actuelle.

Vous pouvez appeler la méthode end dialog depuis n’importe quel emplacement où vous avez un contexte de dialogue, mais pour le bot, elle aura été appelée à partir du dialogue actif actuel.

Conseil

Il est recommandé d’appeler explicitement la méthode de dialogue de fin à la fin du dialogue.

Pour effacer tous les dialogues

Si vous souhaitez dépiler tous les dialogues, vous pouvez effacer la pile de dialogues en appelant la méthode cancel all dialogs du contexte de dialogue.

Répéter un dialogue

Vous pouvez remplacer un dialogue par lui-même, ce qui crée une boucle, à l’aide de la méthode replace dialog. Il s’agit d’un excellent moyen de gérer les interactions complexes et une technique pour gérer les menus.

Notes

Si vous avez besoin de conserver l’état interne du dialogue actuel, vous devez transmettre les informations à la nouvelle instance du dialogue lors de l’appel à la méthode replace dialog. Ensuite, vous devez initialiser le dialogue de manière appropriée.

Créer une branche de conversation

Le contexte du dialogue maintient la pile de dialogue et suit l’étape suivante de chaque dialogue sur la pile. Sa méthode begin dialog crée un enfant et envoie un dialogue par push sur le dessus de la pile, et sa méthode end dialog fait sortir de la pile le dialogue du dessus. La méthode end dialog est généralement appelée dans la boîte de dialogue qui se termine.

Un dialogue peut démarrer un nouveau dialogue au sein du même ensemble en appelant la méthode de démarrage de dialogue du contexte et en fournissant l’ID du nouveau dialogue. Le nouveau dialogue devient alors le dialogue actuellement actif. Le dialogue original est toujours sur la pile, mais les appels de la méthode de poursuite du dialogue du contexte de dialogue ne sont envoyés qu’au dialogue du dessus de la pile, le dialogue actif. Lorsqu’un dialogue est sorti de la pile, le contexte du dialogue passe à la prochaine étape sur la cascade sur la pile, là où il a laissé le dialogue original.

Ainsi, vous pouvez créer une branche au sein de votre flux de conversation en incluant une étape dans un dialogue. Cette étape permet de choisir sous condition un dialogue à démarrer parmi l’ensemble des dialogues disponibles.

Informations supplémentaires