Conditions

You can carry out conditional logic in scenes using values from the Data model objects. The following sections describe the valid syntax for conditions.

Logical operators

Operator Description
&& Logical AND. Inner expressions are evaluated iteratively, and the evaluation is short-circuited if any expression evaluates to false.
|| Logical OR. Inner expressions are evaluated iteratively, and the evaluation is short-circuited if any expression evaluates to true
! Logical NOT. The evaluation of the inner expression is negated

Numerical and string operators

The following numerical and string operators are supported:

Operator Description
+ Add numbers or string concatenation
- Subtract numbers
* Multiply numbers
/ Divide numbers

Booleans

The following constant booleans are supported:

Constant Description
true Must be lowercase
false Must be lowercase
!false Evaluates to true . Must be lowercase.

Comparison operators

The following comparison operators are provided:

Operator Description
== Equals
!= Not equals
< Less than
<= Less than equals
> Greater than
>= Greater than equals

Lists and maps

Given a list named session.params.myList :

Syntax Description
x in session.params.myList Returns true if the value x is in session.params.myList
myList[x] Returns the value at index x of myList
size(session.params.myList) Returns the size of a list

Given a map named session.params.myMap :

Syntax Description
session.params.myMap == {"one": 1, "two":2} Returns true if maps are equal
session['params']['myMap']['one'] Returns the value with specified key
size(session.params.myMap) Returns the map size

Data model

The following objects can be used within scene conditions:

Syntax Description
intent Matched intent parameter data
scene Slot-filling data
session Session storage data
user User storage data
home Home storage data
device Device capability and location data
canvas Canvas state data
resources Localized project resources (audio, images, strings, etc.) data

The following is an example snippet of the full data model in 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>" 
  
 } 
  
 } 
 } 
 

Usage reference

The following syntax examples assumes you are working with session.params object:

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

You can carry out the following conditional operations:

  // 
  
 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 
 
Create a Mobile Website
View Site in Mobile | Classic
Share by: