翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
条件分岐を使用すると、顧客がボットとの会話を進めるパスを制御できます。スロット値、セッション属性、入力モードの内容、入力文字起こしフィールド、または Amazon Kendra からの応答に基づいて会話を分岐できます。
最大で 4 つのブランチを定義できます。各ブランチには、Amazon Lex V2 がそのブランチに従うために満たさなければならない条件があります。どのブランチも条件が満たされない場合、デフォルトブランチが実行されます。
ブランチを定義するときは、そのブランチに対応する条件が true と評価された場合に Amazon Lex V2 が実行するアクションを定義します。次のいずれかを使用してアクションに定義できます。
-
ユーザーに送信された応答。
-
スロットに適用するスロット値。
-
現在のセッションのセッション属性値。
-
会話の次のステップ。詳細については、「会話パスの作成」を参照してください。
各条件付きブランチには、Amazon Lex V2 がそのブランチに従うために満たさなければならないブール式があります。条件に使用できる比較演算子、ブール演算子、関数、および量指定演算子があります。たとえば、{age} スロットが 24 未満の場合、次の条件は true を返します。
{age} < 24
{toppings} 複数値スロットに「パイナップル」という単語が含まれている場合、次の条件は true を返します。
{toppings} CONTAINS "pineapple"
複数の比較演算子を 1 つのブール演算子と組み合わせると、より複雑な条件を作成できます。たとえば、{make} スロット値が「ホンダ」で {model} スロット値が「シビック」の場合、次の条件は true を返します。括弧を使用して評価順序を設定します。
({make} = "Honda") AND ({model} = "Civic")
次のトピックでは、条件分岐演算子と関数について詳しく説明します。
注記
2022 年 8 月 17 日、Amazon Lex V2 はユーザーとの会話の管理方法の変更をリリースしました。この変更により、ユーザーが会話の中でたどるパスをより細かく制御できるようになりました。詳細については、「Amazon Lex V2 の会話フローの変更 V2」を参照してください。2022 年 8 月 17 日より前に作成されたボットは、ダイアログコードフックメッセージ、値の設定、次のステップの設定、条件の追加をサポートしていません。
比較演算子
Amazon Lex V2 では、条件について次の比較演算子がサポートされています。
-
等しい (=)
-
等しくない (!=)
-
未満 (<)
-
以下 (<=)
-
Greater than (>)
-
以上 (>=)
比較演算子を使用するときには、以下のルールが使用されます。
-
左側はリファレンスである必要があります。たとえば、スロット値を参照するには、
{slotName}
を使用します。セッション属性値を参照するには、[attribute]
を使用します。入力モードと入力文字起こしには、$.inputMode
と$.inputTranscript
を使用します。 -
右側は定数で、左側と同じ型でなければなりません。
-
設定されていない属性を参照する式はすべて無効として扱われ、評価されません。
-
複数の値を持つスロットを比較する場合、使用される値は、解釈されるすべての値をカンマで区切ったリストです。
比較は参照のスロットタイプに基づいて行われます。それらは以下のように解決されます。
-
文字列 — 文字列は ASCII 表現に基づいて比較されます。比較では、大文字小文字を区別しません。
-
数値 — 数値ベースのスロットは、文字列表現から数値に変換されて比較されます。
-
日付/時刻 — 時間ベースのスロットは時系列に基づいて比較されます。日付または時刻が早いほど小さいとみなされます。期間については、期間が短いほど短いとみなされます。
ブール演算子
Amazon Lex V2 は、比較演算子を組み合わせるブール演算子をサポートしています。以下のようなステートメントを作成できます。
({number} >= 5) AND ({number} <= 10)
以下のブール演算子を使用することができます。
-
AND (&&)
-
OR (||)
-
NOT (!)
数量演算子
数量演算子はシーケンスの要素を評価し、1 つ以上の要素が条件を満たすかどうかを判断します。
-
CONTAINS — 指定された値が複数の値を持つスロットに含まれているかどうかを判断し、含まれている場合は true を返します。たとえば、ユーザーがピザにパイナップルのトッピングを注文した場合、
{toppings} CONTAINS "pineapple"
は true を返します。
関数
関数には文字列 fn.
をプレフィックスとして付ける必要があります。関数への引数は、スロット、セッション属性、またはリクエスト属性への参照です。Amazon Lex V2 は、スロットの値から情報を取得するための 2 つの関数、sessionAttribute と requestAttribute を提供します。
-
fn.Count() — 複数値を持つスロット内の値の数をカウントします。
たとえば、スロット
{toppings}
に「ペパロニ、パイナップル」 という値が含まれている場合: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 スロット値が「L サイズ」と等しい |
{pizzaSize} = "large" |
カスタムスロット | pizzaSize が「L サイズ」または「M サイズ」と等しい |
{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 スロット値が 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 スロット値がボレン通り |
{streetName} = "boren avenue" |
AMAZON.Duration |
travelDuration スロット値が 2 時間未満 |
{travelDuration} < P2H |
入力モード | 入力モードは音声 | $.inputMode = "Speech" |
文字起こしを入力する | 入力文字起こしは「L サイズのピザが欲しい」と等しい | $.inputTranscript = "I want a large pizza" |
セッション属性 | check customer_subscription_type attribute | [customer_subcription_type] = "yearly" |
リクエスト属性 | check retry_enabled flag | ((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
は、構築時に顧客が設定したセッション属性の名前を指します。