YAMLモードのダイアログ・フロー構造
OBotMLの定義は、context
、defaultTransitions
およびstates
の3つの主要部分に分かれます。セッション全体で使用できる変数は、context
ノード内で定義します。フロー自体の定義は、states
セクションに記述されます。

ダイアログ・フローは、次のようにレイアウトされています:
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"
...
ノート
20.12よりも前のプラットフォーム・バージョンでは、ダイアログ・フローは
20.12よりも前のプラットフォーム・バージョンでは、ダイアログ・フローは
metadata
ノード(platformVersion
ノードを含む)から始まります。プラットフォーム・バージョン20.12以降では、これらのノードは非推奨です。
contextノード
context
ノード内で定義する変数は、int
、string
、boolean
、double
またはfloat
などのプリミティブ型です。変数をマップ(JSONオブジェクト)として定義するか、変数を使用してエラー処理を記述できます。
次のPizzaBotダイアログ・フロー定義のスニペットに示すように、組込みエンティティまたはカスタム・エンティティの変数を指定できます(この場合は
PizzaSize
変数およびPizzaCrust
変数)。組込みエンティティおよびカスタム・エンティティに加えて、ユーザー入力から解決されるインテントを保持するnlpresult
エンティティの変数を宣言することもできます。これらの変数のスコープはフロー全体となります。OBotMLでダイアログ・フローを記述する方法では、ダイアログ・フローの様々な部分を構築する方法について説明しています。ユーザー変数値をスコープ指定して、最初の会話の後、ボットがユーザーを認識し、ユーザー・プリファレンスを保持できるようにすることもできます。「YAMLダイアログ・フローのユーザー・スコープ変数」では、これらの変数について説明しています。main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
defaultTransitionsノード
遷移は2つの場所(ダイアログ・フローの状態内でコンポーネント定義の一部として、または
defaultTransitions
ノード)で設定できます。このノードでは、グローバル・ナビゲーションを設定します。例:defaultTransitions
next: "..."
error: "..."
actions:
action_name1: "..."
action_name2: "..."
デフォルトの遷移は、状態内に遷移が定義されていない場合や、遷移のトリガーに必要な条件を満たしていない場合にトリガーされるという点で、フォールバックとして機能するものです。defaultTransitions
ノードを使用して、スキル・ボットが予期しないユーザー・アクションを正常に処理できるルーティングを定義します。特に、これを使用すると、ボットの現在の(より適切な)返信で表示されているオプションのいずれかではなく、以前の返信のオプションをユーザーがタップした場合でも、スキル・ボットが適切に対応できるようになります。次のスニペットのNONE
アクションに示すように、この遷移を、予期しないすべてのアクションを処理する状態にルーティングするように構成できます。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"
statesノード
YAMLベースのダイアログでは、ダイアログの各部分とその関連操作を、ダイアログ・フロー内のロジックを管理する一連の一時的な状態として定義します。アクションを指示するために、OBotMLの定義内の各
state
ノードには、ダイアログのそのポイントで必要とされる機能を提供するコンポーネントを指定します。状態は基本的にコンポーネントを中心に構築されます。これらにはコンポーネント固有のプロパティが含まれ、コンポーネントの実行後にトリガーされる他の状態への遷移を定義します。 state_name:
component: "component_name"
properties:
component_property: "value"
component_proprety: "value"
transitions:
actions:
action_string1: "go_to_state1"
action_string2: "go_to_state2"
状態定義には、コンポーネント固有の遷移、または任意のコンポーネントに定義できる標準の遷移next
、error
、actions
またはreturn
(フロー・ナビゲーションおよび遷移を参照)が含まれます。状態内に設定された遷移は、defaultTransitions
ノードで定義されたグローバル遷移でオーバーライドできます。
PizzaBotには、顧客の年齢を確認する一連の
state
ノードが含まれています。これらの状態には、ユーザーが入力した整数値を取得してチェックし、必要に応じてテキスト文字列を出力するコンポーネントが含まれています。プロセスを開始するには、askage
状態のコンポーネントがユーザー入力をリクエストし、checkAge
状態に移行し、AgeChecker
コンポーネントがユーザー入力を検証します。ここでダイアログの分岐点になります。transitions
キーはblock
状態またはallow
状態を定義します。allow
状態がトリガーされると、ユーザーは続行できます。後続の状態定義は、ユーザー入力をトラッキングして、オーダーが完了するまで、そのユーザーのコンテキストを保持します。ただし、ユーザー入力によってAgeChecker
コンポーネントがblock
アクションをトリガーすると、ダイアログが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"