Condições

Você pode executar a lógica condicional em cenas usando valores do Objetos de modelo de dados. As seções a seguir descrevem a sintaxe válida das condições.

Operadores lógicos

Operador Descrição
&& Lógico AND Expressões internas são avaliadas iterativamente, estará em curto-circuito se alguma expressão for avaliada como falsa.
|| OR lógico. Expressões internas são avaliadas iterativamente, A avaliação entrará em curto-circuito se alguma expressão for avaliada como verdadeira
! NOT lógico. A avaliação da expressão interna é negada

Operadores numéricos e de string

Há suporte para os seguintes operadores numéricos e de string:

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 são compatíveis:

Constante Descrição
true Precisa ser minúsculo
false Precisa ser minúsculo
!false Ele muda para true. 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 "true" 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 objetos a seguir podem ser usados em condições de cena:

Sintaxe Descrição
intent Dados de parâmetro de intent correspondente
scene Dados de preenchimento de slot
session Dados de armazenamento da sessão
user Dados de armazenamento do usuário
home Dados de armazenamento do Google Home
device Dados de localização e capacidade do dispositivo
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 presumem 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