Conditions

Vous pouvez exécuter une logique conditionnelle dans des scènes à l'aide des valeurs des objets du 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 mise en court-circuit si une expression est évaluée à "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 est évaluée à true
! 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

Valeurs booléennes

Les valeurs booléennes constantes suivantes sont acceptées:

Constante Description
true Doit être en minuscules
false Doit être en minuscules
!false Renvoie true. Il 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
< Moins de
<= 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 la valeur "true" si la valeur x est dans session.params.myList.
myList[x] Renvoie la valeur avec l'index 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 les cartes sont égales
session['params']['myMap']['one'] Affiche la valeur avec la clé spécifiée.
size(session.params.myMap) Renvoie la taille de la carte.

Modèle de données

Les objets suivants peuvent être utilisés dans les conditions d'une scène:

Syntaxe Description
intent Données du paramètre d'intent correspondant
scene Données de remplissage de cases
session Données de stockage de la session
user Données de l'espace de stockage utilisateur
home Données de l'espace de stockage de la maison
device Données sur la capacité et la localisation de l'appareil
canvas Données sur l'état du canevas
resources Données localisées du projet (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>"
    }
  }
}

Documentation de référence sur l'utilisation

Les exemples de syntaxe suivants supposent que vous utilisez un 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