本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用條件式分支來控制客戶在與機器人的對話中採取的路徑。您可以根據槽值、工作階段屬性、輸入模式和輸入文字記錄欄位的內容,或來自 Amazon Kendra 的回應來分支對話。
您最多可以定義四個分支。每個分支都有必須滿足的條件,Amazon Lex V2 才能遵循該分支。如果沒有任何分支滿足其條件,則會遵循預設分支。
當您定義分支時,您可以定義 Amazon Lex V2 在對應於該分支的條件評估為 true 時應採取的動作。您可以定義下列任何動作:
-
傳送給使用者的回應。
-
要套用至插槽的槽值。
-
目前工作階段的工作階段屬性值。
-
對話的下一個步驟。如需詳細資訊,請參閱建立對話路徑。

每個條件式分支都有布林表達式,Amazon Lex V2 必須滿足才能跟隨分支。您可以針對條件使用比較和布林運算子、函數和量化運算子。例如,如果 {age} 槽小於 24,則以下條件傳回 true。
{age} < 24
如果 {toppings} 多值槽包含「pineapple」一詞,則下列條件會傳回 true。
{toppings} CONTAINS "pineapple"
您可以結合多個比較運算子與布林運算子,以因應更複雜的條件。例如,如果 {make} 槽值為 "Honda" 且 {model} 槽值為 "Civic",則以下條件會傳回 true。使用括號來設定評估順序。
({make} = "Honda") AND ({model} = "Civic")
下列主題提供條件式分支運算子和函數的詳細資訊。
注意
2022 年 8 月 17 日,Amazon Lex V2 發佈了與使用者管理對話方式的變更。此變更可讓您更妥善地控制使用者在對話中採取的路徑。如需詳細資訊,請參閱Amazon Lex V2 中對話流程的變更。在 2022 年 8 月 17 日之前建立的機器人不支援對話方塊程式碼掛接訊息、設定值、設定後續步驟和新增條件。
比較運算子
Amazon Lex V2 支援下列條件的比較運算子:
-
等於 (=)
-
不等於 (!=)
-
小於 (<)
-
小於或等於 (<=)
-
大於 (>)
-
大於或等於 (>=)
使用比較運算子時,會使用下列規則。
-
左側必須是參考。例如,若要參考槽值,請使用
{slotName}
。若要參考工作階段屬性值,請使用[attribute]
。對於輸入模式和輸入文字記錄,您可以使用$.inputMode
和$.inputTranscript
。 -
右側必須是常數,且與左側相同類型。
-
任何參考尚未設定的屬性的表達式都會被視為無效,且不會進行評估。
-
當您比較多值插槽時,所使用的值是所有解譯值的逗號分隔清單。
比較是根據參考的槽類型。其解決方式如下:
-
字串 – 根據字串的 ASCII 表示法比較字串。比較不區分大小寫。
-
數字 – 數字型插槽會從字串表示法轉換為數字,然後進行比較。
-
日期/時間 – 根據時間序列比較以時間為基礎的槽。較早的日期或時間會被視為較小。對於持續時間,較短的期間會被視為較小。
布林值運算子
Amazon Lex V2 支援布林運算子結合比較運算子。它們可讓您建立類似下列的陳述式:
({number} >= 5) AND ({number} <= 10)
您可以使用下列布林運算子:
-
AND (&&)
-
OR (||)
-
非 (!)
量化器運算子
量化運算子會評估序列的元素,並判斷一或多個元素是否符合條件。
-
CONTAINS – 決定指定值是否包含在多值插槽中,如果是,則傳回 true。例如,如果使用者在其比薩上訂購鳳梨,則
{toppings} CONTAINS "pineapple"
傳回 true。
函數
函數必須以字串 開頭fn.
。函數的引數是槽、工作階段屬性或請求屬性的參考。Amazon Lex V2 提供兩個函數,用於從插槽、sessionAttribute 或 requestAttribute 的值取得資訊。
-
fn.COUNT() – 計算多值槽中的值數目。
例如,如果槽
{toppings}
包含值 "pepperoni, pineapple":fn.COUNT({toppings}) = 2
-
fn.IS_SET() – 如果在目前工作階段中設定槽、工作階段屬性或請求屬性,則值為 true。
根據先前的範例:
fn.IS_SET({toppings})
-
fn.LENGTH() – 值是目前工作階段中設定的工作階段屬性、槽值或槽屬性值的長度。此函數不支援多值插槽或複合插槽。
範例:
如果插槽
{credit-card-number}
包含值 "123456781234":fn.LENGTH({credit-card-number}) = 12
範例條件式表達式
以下是一些範例條件式表達式。注意: $.
代表 Amazon Lex JSON 回應的進入點。下列值$.
將在 Amazon Lex 回應中剖析,以擷取該值。Amazon Lex 回應中使用 JSON 路徑參考轉錄區塊的條件式表達式,將僅在支援 ASR 轉錄分數的相同區域支援。
值類型 | 使用案例 | 條件式表達式 |
---|---|---|
自訂插槽 | pizzaSize 槽值等於大 |
{pizzaSize} = "large" |
自訂插槽 | pizzaSize 等於大型或中型 |
{pizzaSize} = "large" OR {pizzaSize} = "medium" |
自訂插槽 | 使用 () 和 的表達式 AND/OR |
{pizzaType} = "pepperoni" OR {pizzaSize} = "medium" 或 {pizzaSize} = "small" |
自訂插槽 (多值插槽) | 檢查其中一個配料是否為 Onion | {toppings} CONTAINS "Onion" |
自訂插槽 (多值插槽) | 配料數量超過 3 個 | fn.COUNT({topping}) > 2 |
AMAZON.AlphaNumeric |
bookingID 是 ABC123 |
{bookingID} = "ABC123" |
AMAZON.Number |
年齡槽值大於 30 | {age} > 30 |
AMAZON.Number |
年齡槽值等於 10 | {age} = 10 |
AMAZON.Date |
dateOfBirth 1990 年之前的槽值 |
{dateOfBirth} < "1990-10-01" |
AMAZON.State |
destinationState 槽值等於 Washington |
{destinationState} = "washington" |
AMAZON.Country |
destinationCountry 槽值不是美國 |
{destinationCountry} != "united states" |
AMAZON.FirstName |
firstName 槽值為 John |
{firstName} = "John" |
AMAZON.PhoneNumber |
phoneNumber 槽值為 716767891932 |
{phoneNumer} = 716767891932 |
AMAZON.Percentage |
檢查百分比槽值是否大於或等於 78 | {percentage} >= 78 |
AMAZON.EmailAddress |
emailAddress 槽值為 userA@hmail.com |
{emailAddress} = "userA@hmail.com" |
AMAZON.LastName |
lastName 槽值為 Doe |
{lastName} = "Doe" |
AMAZON.City |
城市槽值等於西雅圖 | {city} = "Seattle" |
AMAZON.Time |
時間在晚上 8 點之後 | {time} > "20:00" |
AMAZON.StreetName |
streetName 槽值為 Boren Avenue |
{streetName} = "boren avenue" |
AMAZON.Duration |
travelDuration 槽值少於 2 小時 |
{travelDuration} < P2H |
輸入模式 | 輸入模式為語音 | $.inputMode = "Speech" |
輸入文字記錄 | 輸入文字記錄等於「我想要大型比薩」 | $.inputTranscript = "I want a large pizza" |
工作階段屬性 | 檢查 customer_subscription_type 屬性 | [customer_subcription_type] = "yearly" |
請求屬性 | 檢查 retry_enabled 旗標 | ((retry_enabled)) = "TRUE" |
Kendra 回應 | Kendra 回應包含常見問答集 | fn.IS_SET(((x-amz-lex:kendra-search-response-question_answer-question-1))) |
具有轉錄的條件式表達式 | 使用轉錄 JSON 路徑的條件式表達式 | $.transcriptions[0].transcriptionConfidence < 0.8 AND $.transcriptions[1].transcriptionConfidence
> 0.5 |
設定工作階段屬性 | 使用轉錄 JSON 路徑和槽值設定工作階段屬性 | [sessionAttribute] = "$.transcriptions..." AND
[sessionAttribute] = "{<slotName>}" |
設定槽值 | 使用工作階段屬性和轉錄 JSON 路徑設定槽值 | {slotName} = [<sessionAttribute>] AND
{slotName} = "$.transcriptions..." |
注意
slotName
是指 Amazon Lex 機器人中槽的名稱。如果槽未解析 (空),或槽不存在,則會在執行時間忽略指派。 sessionAttribute
是指客戶在建置時間設定的工作階段屬性名稱。