Condiciones

Puedes llevar a cabo una lógica condicional en escenas con valores del Objetos de 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 evaluación tiene un cortocircuito si alguna expresión se evalúa como falsa.
|| Lógico OR. Las expresiones internas se evalúan de forma iterativa y la evaluación tiene un cortocircuito si alguna expresión se evalúa como verdadera
! Lógico NOT. Se niega la evaluación de la expresión interna.

Operadores numéricos y de cadena

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

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

Booleano

Se admiten los siguientes 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) Devuelve el tamaño de una lista

Dado 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'] Devuelve el valor con la clave especificada
size(session.params.myMap) Devuelve el tamaño del mapa

Modelo de datos

Se pueden usar los siguientes objetos en las condiciones de escena:

Sintaxis Descripción
intent Datos del parámetro de intent coincidente
scene Datos de llenado de ranuras
session Datos de almacenamiento de la sesión
user Datos del almacenamiento del usuario
home Datos del almacenamiento de Home
device Datos de ubicación y capacidad del dispositivo
canvas Datos del estado del lienzo
resources Datos de recursos del 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

Los siguientes ejemplos de sintaxis suponen que estás trabajando 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