YAMLモードのダイアログ・フロー構造

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


yaml_sections.pngの説明が続きます

ダイアログ・フローは、次のようにレイアウトされています:

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よりも前のプラットフォーム・バージョンでは、ダイアログ・フローはmetadataノード(platformVersionノードを含む)から始まります。プラットフォーム・バージョン20.12以降では、これらのノードは非推奨です。

contextノード

contextノード内で定義する変数は、intstringbooleandoubleまたは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"
状態定義には、コンポーネント固有の遷移、または任意のコンポーネントに定義できる標準の遷移nexterroractionsまたは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"