Warunki

Logi warunkowe możesz przeprowadzać w scenach, używając wartości z parametru modelu danych, W sekcjach poniżej prawidłową składnię warunków.

Operatory logiczne

Operator Opis
&& Logiczne ORAZ. Wyrażenia wewnętrzne są oceniane iteracyjnie, a jeśli dowolne wyrażenie zwróci wartość fałsz, oznacza to, że jest zwarciem.
|| Logiczne LUB. Wyrażenia wewnętrzne są oceniane iteracyjnie, a jeśli dowolne wyrażenie zwraca wartość prawda
! Logiczne NIE. Ocena wyrażenia wewnętrznego jest negowana

Operatory liczbowe i ciągowe

Obsługiwane są te operatory numeryczne i ciągowe:

Operator Opis
+ Dodaj liczby lub konkatenację ciągów znaków
- Odejmij liczby
* Pomnóż liczby
/ Podziel liczby

Wartość logiczna

Obsługiwane są te stałe wartości logiczne:

Stała Opis
true Nazwa musi być zapisana małymi literami.
false Nazwa musi być zapisana małymi literami.
!false Zwraca wartość true. Nazwa musi być zapisana małymi literami.

Operatory porównania

Dostępne są te operatory porównania:

Operator Opis
== Równa się
!= Inne od
< To mniej niż
<= Mniejsze niż lub równe
> To więcej niż
>= Większe niż lub równe

Listy i mapy

Dla listy o nazwie session.params.myList:

Składnia Opis
x in session.params.myList Zwraca wartość prawda, jeśli wartość x jest równa session.params.myList
myList[x] Zwraca wartość w indeksie x z myList
size(session.params.myList) Zwraca rozmiar listy

Dla mapy o nazwie session.params.myMap:

Składnia Opis
session.params.myMap == {"one": 1, "two":2} Zwraca wartość true, jeśli mapy są równe
session['params']['myMap']['one'] Zwraca wartość z określonym kluczem
size(session.params.myMap) Zwraca rozmiar mapy

Model danych

W warunkach scenerii można używać tych obiektów:

Składnia Opis
intent Dane o parametrach intencji dopasowanej
scene Dane dotyczące wypełniania przedziałów
session Dane miejsca na dane sesji
user Miejsce na dane użytkownika
home Dane przechowywania danych w domu
device Dane o możliwościach i lokalizacji urządzenia
canvas Dane stanu kanwy
resources Dane zlokalizowanych zasobów projektu (dźwięku, obrazów, ciągów tekstowych itp.)

Poniżej znajdziesz przykładowy fragment pełnego modelu danych w formacie 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>"
    }
  }
}

Informacje o wykorzystaniu

W podanych niżej przykładach składni zakładamy, że pracujesz z session.params obiektem:

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

Możesz przeprowadzać te operacje warunkowe:

// 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