조건

장면에서 Data model 객체 다음 섹션에서는 조건의 유효한 문법

논리 연산자

연산자 설명
&& 논리곱 내부 표현식은 반복적으로 평가되며 표현식이 false로 평가되면 평가가 단락됩니다.
|| 논리합(OR) 내부 표현식은 반복적으로 평가되며 true로 평가되는 표현식이 하나라도 있으면 평가가 단락됨
! 논리 NOT. 내부 표현식의 평가가 무효화됩니다.

숫자 및 문자열 연산자

다음과 같은 숫자 및 문자열 연산자가 지원됩니다.

연산자 설명
+ 숫자 또는 문자열 연결 추가
- 숫자 빼기
* 숫자 곱하기
/ 숫자 나누기

부울

다음과 같은 불리언 상수가 지원됩니다.

상수 설명
true 소문자여야 합니다.
false 소문자여야 합니다.
!false true로 판정합니다. 소문자여야 합니다.

비교 연산자

다음과 같은 비교 연산자가 제공됩니다.

연산자 설명
== 같음
!= 같지 않음
< 미만
<= 이하
> 초과
>= 이상

목록 및 지도

session.params.myList라는 목록이 지정된 경우:

구문 설명
x in session.params.myList x이 다음 위치에 있으면 true를 반환합니다. session.params.myList
myList[x] myList의 색인 x에 있는 값을 반환합니다.
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 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