Condiciones

Puedes llevar a cabo una lógica condicional en las escenas con valores de los objetos Modelo de datos. En las siguientes secciones, se describe la sintaxis válida para las condiciones.

Operadores lógicos

Operador Descripción
&& AND lógico. Las expresiones internas se evalúan de forma iterativa y la evaluación hace cortocircuito si alguna expresión se evalúa como falsa.
|| Lógica OR. Las expresiones internas se evalúan de forma iterativa y la evaluación hace cortocircuito si alguna expresión se evalúa como verdadera.
! Lógica NOT. Se anula la evaluación de la expresión interna.

Operadores numéricos y de cadenas

Se admiten los siguientes operadores numéricos y de cadena:

Operador Descripción
+ Agregar números o concatenación de cadenas
- Restar números
* Multiplicar números
/ Dividir números

Booleanos

Se admiten los siguientes valores booleanos constantes:

Constante Descripción
true Debe estar en minúscula
false Debe estar en minúscula
!false Se evalúa como true. Debe estar en minúscula.

Operadores de comparación

Se proporcionan los siguientes operadores de comparación:

Operador Descripción
== Es igual a
!= No igual a
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que

Listas y mapas

Dada una lista llamada session.params.myList:

Sintaxis Descripción
x in session.params.myList Muestra true si el valor x está en session.params.myList
myList[x] Muestra el valor del índice x de myList
size(session.params.myList) Muestra el tamaño de una lista

En un mapa llamado session.params.myMap:

Sintaxis Descripción
session.params.myMap == {"one": 1, "two":2} Muestra true si los mapas son iguales.
session['params']['myMap']['one'] Muestra el valor con la clave especificada.
size(session.params.myMap) Muestra el tamaño del mapa

Modelo de datos

Pueden usarse los siguientes objetos en las condiciones de escena:

Sintaxis Descripción
intent Datos de parámetros de intent coincidentes
scene Datos de relleno de ranuras
session Datos del almacenamiento de la sesión
user Datos del almacenamiento del usuario
home Datos del almacenamiento de Home
device Datos de capacidad y ubicación del dispositivo
canvas Datos del estado del lienzo
resources Datos de recursos de proyecto localizados (audio, imágenes, cadenas, etc.)

El siguiente es un fragmento de ejemplo del modelo de datos completo en 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>"
    }
  }
}

Referencia de uso

En los siguientes ejemplos de sintaxis, se supone que trabajas con el objeto session.params:

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

Puedes realizar las siguientes operaciones condicionales:

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