Struttura flusso finestra di dialogo in modalità YAML
La definizione OBotML è suddivisa in tre parti principali: context
, defaultTransitions
e states
. Definire le variabili disponibili nella sessione all'interno del nodo context
. La definizione del flusso stesso è descritta nella sezione states
.
Il flusso della finestra di dialogo viene descritto di seguito.
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"
...
Nota
Nella versione della piattaforma precedente alla 20.12, il flusso della finestra di dialogo inizia con il nodo
Nella versione della piattaforma precedente alla 20.12, il flusso della finestra di dialogo inizia con il nodo
metadata
, che contiene un nodo platformVersion
. A partire dalla versione 20.12 della piattaforma, questi nodi non sono più validi.
Il nodo di contesto
Le variabili definite nel nodo context
possono essere di tipo primitivo, ad esempio int
, string
, boolean
, double
o float
. È possibile definire una variabile come mappa, ovvero un oggetto JSON, oppure utilizzare le variabili per descrivere la gestione degli errori.
Come illustrato dal seguente snippet della definizione del flusso della finestra di dialogo PizzaBot, è possibile assegnare un nome alle variabili per le entità incorporate o personalizzate (che in questo caso sono le variabili
PizzaSize
e PizzaCrust
). Oltre alle entità incorporate e alle entità personalizzate, è anche possibile dichiarare una variabile per l'entità nlpresult
, che contiene l'intento risolto dall'input utente. Queste variabili vengono applicate all'intero flusso. Come scrivere i flussi di finestre di dialogo in OBotML indica come assemblare le diverse parti del flusso della finestra di dialogo. È inoltre possibile definire l'ambito dei valori delle variabili utente per consentire al bot di riconoscere le preferenze utente e persistere dopo la prima conversazione. In Variabili con ambito utente nei flussi di finestre di dialogo YAML vengono descritte queste variabili.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
Il nodo defaultTransitions
È possibile impostare le transizioni in due posizioni: come parte delle definizioni dei componenti negli stati del flusso della finestra di dialogo o nel nodo
defaultTransitions
. Questo nodo imposta la navigazione globale. Ad esempio:defaultTransitions
next: "..."
error: "..."
actions:
action_name1: "..."
action_name2: "..."
La transizione predefinita funge da fallback in quanto viene attivata quando non sono definite transizioni all'interno di uno stato o le condizioni necessarie per attivare una transizione non possono essere soddisfatte.Utilizzare il nodo
defaultTransitions
per definire l'instradamento che consente al bot skill di gestire in modo normale le azioni utente impreviste. In particolare, puoi usarlo per consentire al tuo skill bot di reagire in modo appropriato quando un utente tocca un'opzione in una risposta precedente invece di una delle opzioni presentate nella risposta corrente (e più appropriata) del bot. Come mostrato dall'azione NONE
nello snippet seguente, è possibile configurare questa transizione per l'instradamento a uno stato che gestisce tutte le azioni impreviste.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"
Il nodo degli stati
Nelle finestre di dialogo basate su YAML è possibile definire ogni bit di finestra di dialogo e le relative operazioni come sequenza di stati transitori, che gestiscono la logica all'interno del flusso della finestra di dialogo. Per attivare l'azione, ogni nodo
state
all'interno della definizione OBotML assegna un nome a un componente che fornisce le funzionalità necessarie in quel punto della finestra di dialogo. Gli Stati sono essenzialmente costruiti attorno ai componenti. Contengono proprietà specifiche del componente e definiscono le transizioni ad altri stati che vengono attivati dopo l'esecuzione del 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"
Una definizione di stato può includere le transizioni specifiche del componente o le transizioni next
, error
, actions
o return
standard (descritte in Navigazione dei flussi e transizioni) che è possibile definire per qualsiasi componente. Le transizioni impostate all'interno degli stati possono essere sostituite dalle transizioni globali definite nel nodo defaultTransitions
.
PizzaBot include una sequenza di nodi
state
che verificano l'età di un cliente. Questi stati includono componenti che acquisiscono il valore intero fornito dall'utente, lo controllano e quindi restituiscono una stringa di testo come appropriato. Per avviare il processo, il componente dello stato askage
richiede l'input utente, quindi passa allo stato checkAge
, il cui componente AgeChecker
convalida l'input utente. In questo caso, la finestra di dialogo si trova in un punto preciso: la chiave transitions
definisce gli stati block
o allow
. Se viene attivato lo stato allow
, l'utente può continuare. Le definizioni di stato successive tengono traccia dell'input dell'utente per conservare il contesto dell'utente fino al completamento dell'ordine. Se l'input utente fa sì che il componente AgeChecker
attivi l'azione block
, tuttavia, la conversazione termina per l'utente minorenne perché la finestra di dialogo passa allo stato 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"