Condizioni

Puoi eseguire la logica condizionale nelle scene utilizzando i valori Oggetti modello dei dati. Le seguenti sezioni descrivono una sintassi valida per le condizioni.

Operatori logici

Operatore Descrizione
&& AND logico. Le espressioni interne vengono valutate in modo iterativo la valutazione è in cortocircuito se qualsiasi espressione restituisce false.
|| OR logico. Le espressioni interne vengono valutate in modo iterativo la valutazione è in cortocircuito se una qualsiasi espressione restituisce true
! NOT logico. La valutazione dell'espressione interna è negata

Operatori numerici e di stringa

Sono supportati i seguenti operatori numerici e di stringa:

Operatore Descrizione
+ Aggiungi numeri o concatenazione di stringhe
- Sottrarre numeri
* Moltiplicare numeri
/ Dividere numeri

Booleano

Sono supportati i seguenti valori booleani costanti:

Costante Descrizione
true Deve essere minuscolo
false Deve essere minuscolo
!false Restituisce true. Deve essere in minuscolo.

Operatori di confronto

Sono disponibili i seguenti operatori di confronto:

Operatore Descrizione
== Uguale a
!= Diverso da
< Minore di
<= Minore o uguale a
> Maggiore di
>= Maggiore o uguale a

Elenchi e mappe

Dato un elenco denominato session.params.myList:

Sintassi Descrizione
x in session.params.myList Restituisce true se il valore x è in session.params.myList
myList[x] Restituisce il valore nell'indice x di myList
size(session.params.myList) Restituisce la dimensione di un elenco

Data una mappa denominata session.params.myMap:

Sintassi Descrizione
session.params.myMap == {"one": 1, "two":2} Restituisce true se le mappe sono uguali
session['params']['myMap']['one'] Restituisce il valore con la chiave specificata
size(session.params.myMap) Restituisce le dimensioni della mappa

Modello dei dati

All'interno delle condizioni della scena possono essere utilizzati i seguenti oggetti:

Sintassi Descrizione
intent Dati del parametro di intenzione con corrispondenza
scene Dati di compilazione degli slot
session Dati di archiviazione della sessione
user Dati di spazio di archiviazione dell'utente
home Dati dello spazio di archiviazione della casa
device Capacità del dispositivo e dati sulla posizione
canvas Dati sullo stato del canvas
resources Dati delle risorse di progetto localizzate (audio, immagini, stringhe e così via)

Di seguito è riportato un esempio di snippet del modello di dati completo 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>"
    }
  }
}

Riferimento all'utilizzo

I seguenti esempi di sintassi presuppone che tu stia lavorando con session.params oggetto:

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

Puoi eseguire le seguenti operazioni condizionali:

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