Structure du flux de dialogue en mode YAML
La définition OBotML est divisée en trois parties principales : context
, defaultTransitions
et states
. Vous devez définir les variables disponibles dans la session au sein du noeud context
. La définition du flux elle-même est décrite dans la section states
.
Le flux de dialogue se présente comme suit :
main: true
name: "HelloKids"
context:
variables:
variable1: "entity1"
variable2: "error"
...
States
state1:
component: "a custom or built-in component"
properties:
property1: "component-specific property value"
property2: "component-specific property value"
transitions:
actions:
action1: "value1"
action2: "value2"
state2:
component: "a custom or built-in component"
properties:
property1: "component-specific property value"
property2: "component-specific property value"
transitions:
actions:
action1: "value1"
action2: "value2"
...
Remarque
Dans les versions de plate-forme antérieures à la version 20.12, le flux de dialogue commence par le noeud
Dans les versions de plate-forme antérieures à la version 20.12, le flux de dialogue commence par le noeud
metadata
, qui contient un noeud platformVersion
. A partir de la version 20.12 de la plate-forme, ces noeuds sont en phase d'abandon.
Noeud context
Les variables définies dans le noeud context
peuvent être des types primitifs tels que int
, string
, boolean
, double
ou float
. Vous pouvez définir une variable en tant que correspondance, à savoir un objet JSON, ou vous pouvez utiliser des variables pour décrire le traitement des erreurs.
Comme l'illustre le fragment de code suivant de la définition du flux de dialogue de PizzaBot, vous pouvez nommer les variables des entités intégrées ou personnalisées (qui, dans le cas présent, sont les variables
PizzaSize
et PizzaCrust
). Outre les entités intégrées et personnalisées, vous pouvez également déclarer une variable pour l'entité nlpresult
, qui contient l'intention résolue à partir de la saisie utilisateur. Ces variables sont appliquées à l'ensemble du flux. Comment écrire des flux de dialogue dans OBotML ? explique comment assembler les différentes parties du flux de dialogue. Vous pouvez également définir la portée des valeurs de variable utilisateur afin de permettre à votre bot de reconnaître l'utilisateur et de conserver ses préférences après la première conversation. Ces variables sont décrites dans Variables de niveau utilisateur dans les flux de dialogue YAML.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
Noeud defaultTransitions
Vous pouvez définir des transitions à deux endroits : dans les définitions de composant des états du flux de dialogue ou dans le noeud
defaultTransitions
. Ce noeud définit la navigation globale. Par exemple :defaultTransitions
next: "..."
error: "..."
actions:
action_name1: "..."
action_name2: "..."
La transition par défaut fait office de solution de secours car elle est déclenchée lorsqu'aucune transition n'est définie dans un état, ou lorsque les conditions requises pour déclencher une transition ne peuvent pas être satisfaites.Utilisez le noeud
defaultTransitions
pour définir l'acheminement permettant à votre brique de gérer sans erreur les actions utilisateur inattendues. Vous pouvez notamment l'utiliser pour permettre à votre brique de réagir de façon appropriée lorsqu'un utilisateur touche l'option d'une réponse précédente au lieu de l'une des options présentées dans la réponse en cours (la plus appropriée) du bot. Comme indiqué par l'action NONE
dans le fragment de code suivant, vous pouvez configurer cette transition de façon à acheminer la conversation vers un état gérant toutes les actions inattendues.defaultTransitions:
error: "globalErrorHandler"
...
globalErrorHandler:
component: System.Switch
properties:
source: "${system.errorState}"
values:
- "getOrderStatus"
- "displayOrderStatus"
- "createOrder"
transitions:
actions:
NONE: "unhandledErrorToHumanAgent"
getOrderStatus: "handleOrderStatusError"
displayOrderStatus: "handleOrderStatusError"
createOrder: "handleOrderStatusError"
Noeud states
Dans les boîtes de dialogue basées sur YAML, vous pouvez définir chaque partie du dialogue et ses opérations associées sous la forme d'une séquence d'états transitoires qui gèrent la logique du flux de dialogue. Pour ce faire, chaque noeud
state
de votre définition OBotML nomme un composant fournissant les fonctionnalités requises à cette étape du dialogue. Les états sont essentiellement basés sur les composants. Ils contiennent des propriétés propres à un composant et définissent des transitions vers d'autres états déclenchés après l'exécution du composant. state_name:
component: "component_name"
properties:
component_property: "value"
component_proprety: "value"
transitions:
actions:
action_string1: "go_to_state1"
action_string2: "go_to_state2"
Une définition d'état peut inclure les transitions propres au composant ou les transitions standard next
, error
, actions
et return
(décrites dans Navigation dans le flux et transitions) que vous pouvez définir pour un composant. Les transitions définies dans des états peuvent être remplacées par les transitions globales définies dans le noeud defaultTransitions
.
PizzaBot inclut une séquence de noeuds
state
qui vérifient l'âge d'un client. Ces états incluent des composants qui acceptent une valeur entière fournie par l'utilisateur, qui la vérifient et qui génèrent la chaîne de texte appropriée. Pour lancer le processus, le composant de l'état askage
demande la saisie utilisateur, puis passe à l'état checkAge
, dont le composant AgeChecker
valide la saisie utilisateur. Ici, le dialogue se trouve à une intersection : sa clé transitions
définit les états block
ou allow
. Si l'état allow
est déclenché, l'utilisateur peut continuer. Les définitions d'état suivantes assurent le suivi de la saisie utilisateur afin de conserver le contexte de l'utilisateur jusqu'à ce qu'il ait fini de passer sa commande. Toutefois, si à la suite de la saisie utilisateur, le composant AgeChecker
déclenche l'action block
, la conversation est terminée pour l'utilisateur qui ne respecte pas le critère d'âge, car le dialogue passe à l'état underage
.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
cheese: "CheeseType"
iResult: "nlpresult"
...
askage:
component: "System.Output"
properties:
text: "How old are you?"
transitions:
next: checkage
checkage:
component: "AgeChecker"
properties:
minAge: 18
transitions:
actions:
allow: "crust"
block: "underage"
crust:
component: "System.List"
properties:
options: "Thick,Thin,Stuffed,Pan"
prompt: "What crust do you want for your Pizza?"
variable: "crust"
transitions:
...
underage:
component: "System.Output"
properties:
text: "You are too young to order a pizza"
transitions:
return: "underage"