Conditions

Vous pouvez exécuter une logique conditionnelle dans des scènes en utilisant les valeurs des Objets Modèle de données Les sections suivantes décrivent la syntaxe valide pour les conditions.

Opérateurs logiques

Opérateur Description
&& Logical AND (Opérateur logique ET) Les expressions internes sont évaluées de manière itérative et l'évaluation est court-circuit si une expression prend la valeur false.
|| Opérateur logique OU. Les expressions internes sont évaluées de manière itérative et l'évaluation est mise en court-circuit si une expression prend la valeur "true"
! Opérateur logique NOT. L'évaluation de l'expression interne est annulée.

Opérateurs numériques et de chaîne

Les opérateurs numériques et de chaîne suivants sont acceptés:

Opérateur Description
+ Ajouter des nombres ou une concaténation de chaînes
- Soustraire des nombres
* Multiplier des nombres
/ Diviser des nombres

Booléen

Les constantes booléennes suivantes sont acceptées:

Constante Description
true Doit être en minuscules
false Doit être en minuscules
!false Prend la valeur true. Doit être en minuscules.

Opérateurs de comparaison

Les opérateurs de comparaison suivants sont fournis:

Opérateur Description
== Est égal(e) à
!= Différent de
< Inférieur à
<= Inférieur ou égal à
> Supérieur à
>= Supérieur ou égal à

Listes et cartes

À partir d'une liste nommée session.params.myList:

Syntaxe Description
x in session.params.myList Renvoie "true" si la valeur x est comprise dans session.params.myList
myList[x] Renvoie la valeur avec l'indice x de myList
size(session.params.myList) Affiche la taille d'une liste.

À partir d'une carte nommée session.params.myMap:

Syntaxe Description
session.params.myMap == {"one": 1, "two":2} Renvoie true si la valeur de la carte est égale à
session['params']['myMap']['one'] Renvoie la valeur avec la clé spécifiée
size(session.params.myMap) Affiche la taille de la carte

Modèle de données

Les objets suivants peuvent être utilisés dans des conditions de scène:

Syntaxe Description
intent Données du paramètre d'intent correspondant
scene Données de remplissage d'emplacements
session Données de stockage de session
user Données d'espace de stockage utilisateur
home Données d'espace de stockage personnel
device Données sur la fonction et la localisation de l'appareil
canvas Données d'état du canevas
resources Données de ressources de projet localisées (audio, images, chaînes, etc.)

Voici un exemple d'extrait du modèle de données complet au format 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>"
    }
  }
}

Référence d'utilisation

Les exemples de syntaxe suivants supposent que vous travaillez avec l'objet session.params:

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

Vous pouvez effectuer les opérations conditionnelles suivantes:

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