制御コンポーネント

これらのYAMLモード制御コンポーネントは、ユーザー入力が事前定義済の値と一致するかどうかに基づいてフローをルーティングします。

System.ConditionEquals

このコンポーネントは、変数値に基づいてナビゲーションを変更します。

ノート

このコンポーネントは、ビジュアル・フロー・デザイナでは使用できません。かわりに、この目的のために「切替え」を使用できます。
このコンポーネントを使用して、値が一致する場合にダイアログ・フローを分岐します。このコンポーネントは、sourceまたはvariableプロパティに設定された値をvalueプロパティに格納された値と比較して、値ベースのルーティングを実行します。このコンポーネントは、一致(または一致しないこと)に基づいて、equalおよびnotequalアクションをトリガーします。次のスニペットでは、顧客はordersコンテキスト変数について抽出された入力がpizzaに一致した場合はorderPizza状態にルーティングされ、一致しない場合はorderPasta状態で始まる実行パスにルーティングされます。
  Check for Pizza:
    component: "System.ConditionEquals"
    properties:
      variable: "orders"
      value: "pizza"
    transitions:
      actions:
        equal:  "orderPizza"
        notequal: "orderPasta"
プロパティ 説明 必須?
variable 現在の値によってルーティングが決定される変数の名前。sourceプロパティも定義されている場合、ダイアログ・エンジンはvariableプロパティを無視します。 いいえ
source sourceプロパティは、variableプロパティにかわるものです。 いいえ
value sourceまたはvariableのいずれかのプロパティと比較される値。 はい

System.ConditionEqualsコンポーネントでApache FreeMarker式を使用する方法

Apache FreeMarker式を使用してvalueおよびsourceプロパティを定義することによって、一致基準を特定の値および書式に絞り込むことができます。例:
  • verifyCode:
        component: "System.ConditionEquals"
        properties:
          variable: "code"
          value: "${userEnteredCode.value}"
        transitions:
          actions:
            equal: "wrongCode"
            notequal: "${flow.value}"
    
  • conditionEquals:
        component:"System.ConditionEquals"
        properties:
          source: "${addressVariable.value.state} - ${addressVariable.value.country}"
          value: "CA - USA"
        transitions:
          actions:
            equal: goCalfifornia
            notequal: goSomewhereElse
  • main: true
    name: "Shoppingbot"
    context:
      variables:
        yesnoVar: "YES_NO"
        
    ...
    
     confirmBuy:
        component: "System.ConditionEquals"
        properties:
          source: "${yesnoVar.value.yesno}"
          value: "YES"
        transitions:
          actions:
            equal: "deviceDone"
            notequal: "cancelOrder"
      deviceDone:
        component: "System.Output"
        properties:
          text: "Your ${devices.value} is on its way."
        transitions:
          return: "done"
      cancelOrder:
        component: "System.Output"
        properties:
          text: "Thanks for your interest."
        transitions:
          return: "done"
  • context:
      variables:
        wordLength: "int"
        words: "string"
    states:
      askName:
        component: "System.Text"
        properties:
         prompt: "What is your name?"
         variable: "words"
      setVariable:
        component: "System.SetVariable"
        properties: 
          variable: "wordLength"
          value: "${words.value?length}"
      conditionEquals:
        component: "System.ConditionEquals"
        properties:
          source: "${(wordLength.value?number > 2)?then('valid', 'invalid')}"
          value: "valid"
        transitions:
          actions:
            equal: "checkFirstNameinDatabase"
            notequal: "inValidName"
      done:
        component: "System.Output"
        properties:
          text: "Done"
        transitions:
          return: "done"
      checkFirstNameinDatabase:
        component: "System.Output"
        properties:
          text: "Check the first name in the database."
        transitions:
          return: "done"
      inValidName:
        component: "System.Output"
        properties:
          text: "This name is not valid. It needs to be at least three letters."
        transitions:
          return: "done"

System.ConditionExists

このコンポーネントを使用して、指定した変数の存在をチェックします。値に従ってダイアログをルーティングするには、existsアクションおよびnotexistアクションを使用して遷移キーを定義します。

ノート

このコンポーネントは、ビジュアル・フロー・デザイナでは使用できません。かわりに、この目的のために「切替え」を使用できます。
プロパティ 説明 必須?
variable 変数の名前 はい
main: true
name: "HelloKids"
context:
  variables:
    foo: "string"
    lastQuestion: "string"
    lastResponse: "string"
states:
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        Talk: "checkUserSetup"
        unresolvedIntent: "checkUserSetup"
  checkUserSetup:
    component: "System.ConditionExists"
    properties:
      variable: "user.lastQuestion"
    transitions:
      actions:
        exists: "hellokids"
        notexists: "setupUserContext"
  setupUserContext:
    component: "System.CopyVariable"
    properties:
      from: "lastQuestion,lastResponse"
      to: "user.lastQuestion,user.lastResponse"
    transitions:
      ...
...

System.Switch

このコンポーネントを使用して、変数値に基づいて状態を切り替えます。

ノート

このトピックでは、このコンポーネントをYAMLモードで使用する方法について説明します。ビジュアル・フロー・デザイナでの使用方法の詳細は、「切替え」を参照してください。
System.ConditionEqualsコンポーネントと同様の値ベースのルーティングを有効にします。System.Switchコンポーネントは、値リストをvariableまたはsourceプロパティと比較して、実行パスを選択します。値が一致すると、コンポーネントは実行パスを開始する状態を指定するアクション遷移をトリガーします。変数に対して設定された現在の値がvaluesプロパティに定義されているアイテムのいずれとも一致しない場合は、NONE遷移を追加できます。予期しないアクションのダイアログ・フローの構成では、System.Switchコンポーネントによってスキル・ボットが不正なユーザー入力を適切に処理できるようにする方法を説明します。
switchOnCategory:
    component: "System.Switch"
    properties:
      variable: "category"
      values:
      - "Vehicle"
      - "Property"
      - "Other"
    transitions:
      actions:
        NONE: "ActionNoLongerAvailable"
        Vehicle: "getVehicleQuote"
        Property: "getPropertyQuote"
        Other: "getOtherQuote"
プロパティ 説明 必須?
variable 現在の値が切替え遷移の基礎として使用される変数。valuesプロパティを比較値のリストとして定義します。sourceプロパティも定義されている場合、ダイアログ・エンジンはvariableプロパティを無視します。 いいえ
source sourceプロパティは、variableプロパティにかわるものです。 いいえ
values sourceまたはvariableプロパティとの比較として使用される値リスト。
ノート

このプロパティは、コンポーネントのビジュアル・フロー・デザイナでは使用できません。Switchを参照してください。
はい

System.SwitchコンポーネントでApache FreeMarker式を使用する方法

Apache FreeMarker式を使用してvalueおよびsourceプロパティを定義することによって、一致基準を特定の値および書式に絞り込むことができます。たとえば、datestringなどの組込みのFreeMarker操作を使用して式を定義できます:
  switch2:
    component: "System.Switch"
    properties:
      source: "${startDate.value.date?string('dd-MM-yyyy')}"
      values:
      - "17-12-2017"
      - "18-12-2017"
    transitions:
      actions:
        "17-12-2017": goToday
        "18-12-2017": goTomorrow