条件

次の値を使用して、シーンで条件付きロジックを実行できます。 データモデル オブジェクト。以降のセクションでは、 指定する必要があります。

論理演算子

演算子 説明
&& 論理 AND。内部式は反復的に評価され、 いずれかの式が false と評価された場合、評価は省略されます。
|| 論理 OR。内部式は反復的に評価され、 いずれかの式が true と評価された場合、評価は短絡されます。
! 論理 NOT。内部の式の評価は否定されます

数値演算子と文字列演算子

次の数値演算子と文字列演算子がサポートされています。

演算子 説明
+ 数値または文字列の連結を追加する
- 引き算を行う
* かけ算をする
/ 割り算をする

ブール値

次の定数ブール値がサポートされています。

定数 説明
true 小文字でなければなりません
false 小文字でなければなりません
!false true と評価されます。小文字のみを使用できます。

比較演算子

次の比較演算子が用意されています。

演算子 説明
== 等しい
!= 等しくない
< 次より小さい
<= 次の値以下
> 次より大きい
>= 次の値以上

リストとマップ

session.params.myList という名前のリストがあるとします。

構文 説明
x in session.params.myList x が次の場所にある場合に true を返します。 session.params.myList
myList[x] myList のインデックス x の値を返します
size(session.params.myList) リストのサイズを返します

session.params.myMap という名前のマップがあるとします。

構文 説明
session.params.myMap == {"one": 1, "two":2} マップが等しい場合は true を返します。
session['params']['myMap']['one'] 指定されたキーの値を返します
size(session.params.myMap) 地図のサイズを返します。

データモデル

シーン条件内で使用できるオブジェクトは次のとおりです。

構文 説明
intent 一致したインテント パラメータのデータ
scene スロット充填データ
session セッション ストレージ データ
user ユーザー ストレージのデータ
home ホーム ストレージのデータ
device デバイスの機能位置情報のデータ
canvas キャンバスの状態データ
resources ローカライズされたプロジェクト リソース(音声、画像、文字列など)データ

JSON の完全なデータモデルのスニペットの例を次に示します。

{
  "intent": {
    "params": {
      "<param_name>": {
        "original": "five people",
        "resolved": 5
      }
    }
   },
  "session": {
    "params": {
      "<session_params_key>": "<session_params_value>"
    }
  },
  "scene": {
    "slots": {
      "status": "FINAL",
      "params": {
        "<slot_name>": "<slot_value>"
      }
    }
  },
  "user": {
    "params": {
      "<user_params_key>": "<user_params_value>"
    },
    "permissions": [
      "DEVICE_PRECISE_LOCATION"
    ],
    "accountLinkingStatus": "LINKED",
    "verificationStatus": "VERIFIED",
    "lastSeenTime": {
      "seconds": 123,
      "nanos": 456
    },
    "engagement": {
      "pushNotificationIntents": [
        "intent1",
        "intent2"
      ]
    }
  },
  "home": {
    "params": {
      "<home_params_key>": "<home_params_value>"
    }
  },
  "canvas": {
    "state": {
      "<canvas_state_key>": "<canvas_state_value>"
    }
  },
  "device": {
    "capabilities": [
      "SPEECH",
      "RICH_RESPONSE",
      "LONG_FORM_AUDIO",
      "INTERACTIVE_CANVAS"
    ],
    "currentLocation": {
      "coordinates": {
        "latitude": 37.422,
        "longitude": -122.084
      },
      "postalAddress": {
        "revision": 0,
        "regionCode": "US",
        "languageCode": "en",
        "postalCode": "94043",
        "sortingCode": "",
        "administrativeArea": "California",
        "locality": "Mountain View",
        "sublocality": "",
        "addressLines": ["1600 Amphitheatre Parkway"],
        "recipients": [],
        "organization": ""
      }
    }
  },
  "resources": {
    "strings": {
      "<resource_string_key>": "<resource_string_value>"
    },
    "images": {
      "<resource_image_key>": "<resource_image_value>"
    }
  }
}

使用リファレンス

次の構文例は、Terraform を使用して session.params オブジェクトの場合:

session.params = {
  "flag": true,
  "count": 10,
  "name": "john smith",
  "myList": [1, 2, 3],
  "myMap": {"one": 1, "two":2}
}

次の条件操作を実行できます。

// numbers and boolean logic
session.params.count > 0 && session.params.count < 100    // AND
session.params.count == 0 || session.params.count != 5    // OR
!(session.params.count <= 0)         // NOT

// booleans
!false                      // true constant
session.params.flag         // boolean variable
session.params.flag == true // explicitly compare with true constant

// strings
session.params.name == "john smith"  // double quotes supported
session.params.name == 'john smith'  // single quotes supported
session.params.name.contains("john") // substring
session.params.name + "!!!" == "john smith!!!" // string concatenation
session.params.name < "abc"          // compares lexicographically
size(session.params.name) == 10      // length of string

// lists
1 in session.params.myList        // "contains in list" operator
session.params.myList[0] == 1     // "index into list" operator
size(session.params.myList) == 3  // returns number of elements in the list

// maps
session.params.myMap == {"one": 1, "two":2} // compare map with json
session['params']['myMap']['one'] == 1      // index using square brackets
size(session.params.myMap) == 2             // number of entries in the map