A Estrutura do Fluxo de Diálogo no Modo YAML
A definição do OBotML é dividida em três partes principais: context
, defaultTransitions
e states
. Você define as variáveis que estão disponíveis na sessão no nó context
. A definição do fluxo em si é descrita na seção states
.
Este é o layout do fluxo de caixas de diálogo:
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"
...
Observação
Na versão da plataforma anterior à 20.12, o fluxo de caixas de diálogo começa com o nó
Na versão da plataforma anterior à 20.12, o fluxo de caixas de diálogo começa com o nó
metadata
, que contém um nó platformVersion
. A partir da versão 20.12 da plataforma, esses nós estão obsoletos.
O Nó context
As variáveis que você define no nó context
podem ser tipos primitivos, como int
, string
, boolean
, double
ou float
. Você pode definir uma variável como mapa, que é um objeto JSON, ou pode usar variáveis para descrever o tratamento de erros.
Conforme ilustrado pelo seguinte trecho de código da definição de fluxo de caixas de diálogo PizzaBot, você pode nomear variáveis para entidades incorporadas ou personalizadas (que nesse caso são as variáveis
PizzaSize
e PizzaCrust
). Com entidades incorporadas e as entidades personalizadas, você também pode declarar uma variável para a entidade nlpresult
, que contém a intenção resolvida da entrada do usuário. Essas variáveis têm como escopo o fluxo inteiro. Como eu Gravo Fluxos de Caixas de Diálogo no OBotML? informa como montar as diversas partes do fluxo de caixas de diálogo. Você também pode definir como escopo os valores de variáveis do usuário para permitir que seu bot reconheça o usuário e persista as preferências dele após a primeira conversa. Variáveis com Escopo do Usuário em Fluxos de Caixas de Diálogo YAML descreve essas variáveis.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
O Nó defaultTransitions
Você pode definir transições em dois locais: como parte das definições do componente nos estados do fluxo de caixas de diálogo ou no nó
defaultTransitions
. Esse nó define a navegação global. Por exemplo :defaultTransitions
next: "..."
error: "..."
actions:
action_name1: "..."
action_name2: "..."
A transição padrão age como fallback no sentido de que é acionada quando não há transições definidas em um estado ou as condições exigidas para acionar uma transição não podem ser atendidas.Use o nó
defaultTransitions
para definir o roteamento que permitirá ao seu bot de habilidades tratar de forma natural ações inesperadas do usuário. Especificamente, você pode usá-lo para permitir que seu bot de habilidades reaja adequadamente quando um usuário tocar em uma opção de uma resposta anterior, em vez de em uma das opções apresentadas na resposta atual (e mais adequada) do bot. Conforme mostrado pela ação NONE
no trecho de código a seguir, você pode configurar essa transição para rotear para um estado que trate todas as ações inesperadas.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"
O Nó states
Em caixas de diálogo baseadas em YAML, você define cada bit da caixa de diálogo e suas operações relacionadas como sequência de estados transitórios, que gerenciam a lógica no fluxo de caixas de diálogo. Para dar uma pista da ação, cada nó
state
da definição do OBotML nomeia um componente que oferece a funcionalidade necessária nesse ponto da caixa de diálogo. Os estados são essencialmente criados ao redor dos componentes. Elas contêm as propriedades específicas do componente e definem as transições para outros estados que são acionadas após a execução do componente. state_name:
component: "component_name"
properties:
component_property: "value"
component_proprety: "value"
transitions:
actions:
action_string1: "go_to_state1"
action_string2: "go_to_state2"
Uma definição de estado pode incluir as transições específicas do componente ou as transições padrão next
, error
, actions
ou return
(descritas em Navegação e Transições de Fluxo) que você pode definir para qualquer componente. As transições definidas nos estados podem ser substituídas pelas transições globais definidas no nó defaultTransitions
.
O PizzaBot inclui uma sequência de nós
state
que verificam a idade de um cliente. Esses estados incluem componentes que usam o valor inteiro fornecido pelo usuário, verificam esse valor e depois geram uma string de texto, conforme apropriado. Para iniciar o processo, o componente do estado askage
solicita a entrada do usuário e, em seguida, muda para o estado checkAge
, cujo componente AgeChecker
valida a entrada do usuário. Aqui, a caixa de diálogo está em uma flutuação: sua chave transitions
define os estados block
ou allow
. Se o estado allow
for acionado, o usuário poderá continuar. As definições de estado subsequentes rastrearão a entrada do usuário para preservar o contexto do usuário até que ele conclua seu pedido. Se a entrada do usuário fizer com que o componente AgeChecker
dispare a ação block
, no entanto, a conversa será encerrada para o usuário menor de idade, uma vez que a caixa de diálogo muda para o estado 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"