תנאים

אפשר להפעיל לוגיקה מותנית בסצנות באמצעות ערכים אובייקטים של מודל נתונים. בקטעים הבאים מתוארים את התחביר החוקי של התנאים.

אופרטורים לוגיים

מפעיל תיאור
&& ווגם לוגי. ביטויים פנימיים מוערכים באופן חזרתי, אם ביטוי כלשהו מקבל את הערך False, יש קיצור דרך.
|| לוגי או לוגי. ביטויים פנימיים מוערכים באופן חזרתי, אם ביטוי כלשהו שווה ל-true
! לוגי NOT. ההערכה של הביטוי הפנימי מתבטלת

אופרטורים מספריים ומחרוזות

האופרטורים המספריים והמחרוזות הבאים נתמכים:

מפעיל תיאור
+ הוספת מספרים או שרשור מחרוזות
- החסירו בין מספרים
* הכפילו מספרים
/ בצעו חילוק של מספרים

בוליאני

הערכים הבוליאניים הקבועים הבאים נתמכים:

קבוע תיאור
true חייב להיות באותיות קטנות.
false חייב להיות באותיות קטנות.
!false מתבצעת הערכה ל-true. צריך להשתמש באותיות קטנות.

אופרטורים להשוואה

אלו האופרטורים הבאים להשוואה:

מפעיל תיאור
== שווה ל-
!= לא שווה ל-
< פחות מ-
<= פחות מ- או שווה ל-
> גדול מ-
>= גדול מ- או שווה ל-

רשימות ומפות

נתונה רשימה בשם session.params.myList:

תחביר תיאור
x in session.params.myList הפונקציה מחזירה true אם הערך x נמצא ב- session.params.myList
myList[x] מחזירה את הערך באינדקס x של myList
size(session.params.myList) החזרת הגודל של רשימה

מתן מפה בשם session.params.myMap:

תחביר תיאור
session.params.myMap == {"one": 1, "two":2} הפונקציה מחזירה את הערך true אם המפות שוות
session['params']['myMap']['one'] החזרת הערך עם המפתח שצוין
size(session.params.myMap) מחזיר את גודל המפה

מודל נתונים

ניתן להשתמש באובייקטים הבאים במסגרת תנאי סצנה:

תחביר תיאור
intent נתונים של פרמטר Intent תואם
scene נתונים של מילוי משבצות
session נתונים של אחסון סשנים
user נתוני נפח האחסון של המשתמש
home נתוני האחסון בבית
device נתוני יכולות ומיקום של המכשיר
canvas נתונים לגבי מצב לוח הציור
resources משאבי פרויקט שהותאמו לשוק המקומי (נתוני אודיו, תמונות, מחרוזות וכו')

לפניכם קטע קוד לדוגמה של מודל הנתונים המלא ב-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>"
    }
  }
}

מסמך עזר בנושא שימוש

דוגמאות התחביר הבאות מבוססות על ההנחה שאתם עובדים עם אובייקט session.params:

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

אפשר לבצע את הפעולות המותנות הבאות:

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