本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
向分支對話添加條件
您可以使用條件分支來控制客戶通過與機器人交談的路徑。您可以根據插槽值、工作階段屬性、輸入模式和輸入成績單欄位的內容,或 Amazon Kendra 的回應來分支對話。
您最多可以定義四個分支。每個分支都有必須滿足的條件,Amazon Lex V2 才能跟隨該分支。如果沒有任何分支滿足其條件,則會遵循默認分支。
定義分支時,您可以定義 Amazon Lex V2 在與該分支對應的條件評估為真時應採取的動作。您可以定義下列任何動作:
-
傳送給使用者的回應。
-
要套用至狹槽的槽值。
-
目前階段作業的階段作業屬性值。
-
交談中的下一個步驟。如需詳細資訊,請參閱 建立交談路徑。
每個條件分支都有一個布林運算式,Amazon Lex V2 必須滿足該分支。您可以在條件中使用比較和布林運算子、函數和量詞運算子。例如,如果 {age} 插槽小於 24,則下列條件會傳回 true。
{age} < 24
如果 {澆頭} 多值插槽包含單詞「菠蘿」,則以下條件返回 true。
{toppings} CONTAINS "pineapple"
對於更複雜的條件,您可以將多個比較運算子與布林運算子結合。例如,如果 {make} 槽值是「本田」和 {模型} 槽值是「思域」下面的條件返回 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 表示法進行比較。比較不區分大小寫。
-
Nu@@ mbers — 以數字為基礎的槽會從字串表示轉換成數字,然後進行比較。
-
日期/時間 — 以時間為基礎的時段會根據時間序列進行比較。較早的日期或時間被認為較小。對於持續時間,較短的週期被認為是較小的。
布林值運算子
Amazon Lex V2 支持布爾運算符結合比較運算符。它們可讓您建立類似下列內容的陳述式:
({number} >= 5) AND ({number} <= 10)
您可以使用下列布林運算子:
-
與 (&&)
-
或者(
-
不(!)
數量詞運算子
數量詞運算子會評估序列的項目,並判斷一或多個項目是否滿足條件。
-
包含 — 確定指定的值是否包含在多值插槽中,如果是,則傳回 true。例如,如果用戶在他們的比薩餅上訂購了菠蘿,則
{toppings} CONTAINS "pineapple"
返回 true。
函數
函數必須加上字串fn.
的前綴。該函數的參數是一個插槽,會話屬性,或請求屬性的引用。Amazon Lex V2 提供兩種功能,可從插槽、工作階段屬性或要求屬性的值取得資訊。
-
Fn.count () — 計算多值插槽中的值數目。
例如,如果插槽
{toppings}
包含值「意大利辣香腸,菠蘿」:fn.COUNT({toppings}) = 2
-
Fn.is_set () — 如果在目前工作階段中設定插槽、工作階段屬性或要求屬性,則值為 true。
根據前面的例子:
fn.IS_SET({toppings})
-
fn.length ()-value 是在當前會話中設置的會話屬性,插槽值或插槽屬性的值的長度。此功能不支援多值插槽或複合插槽。
範例:
如果插槽
{credit-card-number}
包含值「123456781234」:fn.LENGTH({credit-card-number}) = 12
條件運算式範例
以下是一些條件運算式範例。注意:$.
代表 Amazon Lex JSON 響應的入口點。下列值$.
將在 Amazon Lex 回應中進行剖析,以擷取值。只有在支援 ASR 轉錄分數的相同語言環境中,才支援使用對 Amazon Lex 回應中轉錄區塊的 JSON 路徑參照的條件運算式。
值類型 | 使用案例 | 條件運算式 |
---|---|---|
自定義插槽 | pizzaSize 插槽值等於大 |
{pizzaSize} = "large" |
自定義插槽 | pizzaSize 等於大或中 |
{pizzaSize} = "large" 或 {pizzaSize} = "medium" |
自定義插槽 | 使用() 和的表達式 AND/OR |
{pizzaType} = "pepperoni" 或{pizzaSize} = "medium" 或 {pizzaSize} = "small" |
自訂插槽 (多值插槽) | 檢查其中一個澆頭是否是洋蔥 | {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 插槽值等於華盛頓 |
{destinationState} = "washington" |
AMAZON.Country |
destinationCountry 插槽值不是美國 |
{destinationCountry} != "united states" |
AMAZON.FirstName |
firstName 插槽值是約翰 |
{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 插槽值是博仁大道 |
{streetName} = "boren avenue" |
AMAZON.Duration |
travelDuration 插槽值小於 2 小時 |
{travelDuration} < P2H |
輸入模式 | 輸入模式為語音 | $.inputMode = "Speech" |
輸入成績單 | 輸入成績單等於「我想要一個大披薩」 | $.inputTranscript = "I want a large pizza" |
階段屬性 | 檢查客戶訂閱類型屬性 | [customer_subcription_type] = "yearly" |
請求屬性 | 檢查已啟用重新嘗試的旗標 | ((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 機器人中插槽的名稱。如果插槽未解析 (null),或插槽不存在,則會在執行時間忽略指派。 sessionAttribute
指的是由客戶在構建時設置的會話屬性的名稱。