Condições

É possível realizar uma lógica condicional em cenas usando valores dos objetos Modelo de dados. As seções a seguir descrevem a sintaxe válida para condições.

Operadores lógicos

Operador Descrição
&& Lógico AND As expressões internas são avaliadas de forma iterativa, e a avaliação passa a ser de curto-circuito se alguma expressão é avaliada como falsa.
|| OR lógico. As expressões internas são avaliadas de forma iterativa, e a avaliação passa a ser de curto-circuito se qualquer expressão é avaliada como verdadeira.
! NOT lógico. A avaliação da expressão interna é negada

Operadores numéricos e de strings

Os seguintes operadores numéricos e de strings são aceitos:

Operador Descrição
+ Adicionar números ou concatenação de strings
- Subtrair números
* Multiplicar números
/ Dividir números

booleanos

Os booleanos constantes abaixo têm suporte:

Constante Descrição
true Precisa estar em letras minúsculas
false Precisa estar em letras minúsculas
!false Ele muda para true. O nome precisa estar em letras minúsculas.

Operadores de comparação

Os seguintes operadores de comparação são fornecidos:

Operador Descrição
== Igual a
!= Diferente de
< Menor que
<= Menor igual a
> Maior que
>= Maior igual a

Listas e mapas

Dada uma lista chamada session.params.myList:

Sintaxe Descrição
x in session.params.myList Retorna verdadeiro se o valor x estiver em session.params.myList
myList[x] Retorna o valor no índice x de myList
size(session.params.myList) Retorna o tamanho de uma lista

Dado um mapa chamado session.params.myMap:

Sintaxe Descrição
session.params.myMap == {"one": 1, "two":2} Retorna true se os mapas forem iguais
session['params']['myMap']['one'] Retorna o valor com a chave especificada
size(session.params.myMap) Retorna o tamanho do mapa

Modelo de dados

Os seguintes objetos podem ser usados em condições de cena:

Sintaxe Descrição
intent Dados do parâmetro de intent correspondente
scene Dados de preenchimento de slots
session Dados de armazenamento de sessão
user Dados de armazenamento do usuário
home Dados de armazenamento do Google Home
device Capacidade do dispositivo e dados de localização
canvas Dados de estado da tela
resources Dados de recursos do projeto localizados (áudio, imagens, strings etc.)

Este é um snippet de exemplo do modelo de dados completo em 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>"
    }
  }
}

Referência de uso

Os exemplos de sintaxe a seguir pressupõem que você está trabalhando com o objeto session.params:

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

É possível realizar as seguintes operações condicionais:

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