תנאים

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

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

מפעיל התיאור
&& לוגי AND. ביטויים פנימיים נבדקים באופן חזרתי, וההערכה היא קצרה אם ביטוי כלשהו מקבל ערך לא נכון.
|| OR לוגי. ביטויים פנימיים נבדקים באופן איטרטיבי, וההערכה היא קצרה אם ביטוי כלשהו מוערך כ-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 נתוני פרמטר של כוונת רכישה תואמת
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