AI-generated Key Takeaways
-
Conditional logic in scenes can be carried out using values from Data model objects.
-
Supported operators include logical, numerical, string, and comparison operators.
-
Boolean constants
true,false, and!falseare supported. -
Syntax for working with lists and maps is provided for checks like containment, indexing, and size.
-
The data model includes objects like
intent,scene,session,user,home,device,canvas, andresources.
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


