はじめに
LexとConnectを連携してサービスを作る際、Lexについて調べましたので、まとめます。
- lex ボット
- エイリアスで、本番・開発などのバージョンを分けられる
- インテント:ボットの設定
- 発話
- ユーザーがこのインテントを呼び出そうとするフレーズを設定
- 例、タクシーを予約したいのですが、予約、タクシー
- ユーザーがこのインテントを呼び出そうとするフレーズを設定
- スロット
- スロットは、パラメータ・変数のようなもので、1つのインテントに、0個以上のスロットを定義することができる。
- プロンプト
- Lexがユーザに入力を促すための台詞を決める。
- 例、いつのご予約ですか?、何台必要ですか?
- 最大再試行回数を設定できる
- 聞き方のバリエーションが増やせる。どこにいますか?町名を教えて下さい。など
- Lexがユーザに入力を促すための台詞を決める。
- スロットタイプ
- https://docs.aws.amazon.com/ja_jp/lex/latest/dg/howitworks-builtins-slots.html
- 組み込みタイプは、awsで設定済み。日付など
- カスタムタイプは、自身で設定。2つ設定タイプがある
- 組み込みタイプを限定的にする場合。
- 中国というワードに対して、中華人民共和国、中華、は中国と同義にするといった設定もできる。
- 読み方を複数指定すると、人による間違いもフォローできる
- 確認プロンプトと応答拒否
- 全てのスロットで、必要情報を聞き出した後、ユーザーに必要情報を確認するように促すためのボットの発言内容
- 例、{startDate}に{time}から {number}名様で予約します。
- {startDate}、{time}、{number}、はスロットでユーザーが答えた情報
- ユーザーの「はい」「いいえ」によって、connectでのフローを変える
- 全てのスロットで、必要情報を聞き出した後、ユーザーに必要情報を確認するように促すためのボットの発言内容
- フルフィルメント
- インテントを処理している際に、当該インテントに定義されたスロットが、全て入力された状態をさします。 通常は、このタイミングで、インテントの目的となるビジネスロジックをlambda等で実行する事になります。
- Lambda 関数でできること
- バリデーション
- 店が閉店21時の場合、予約時間22時はできませんので、「本日の営業は、21時までです。何時に受け取りますか」というようなレスポンスを返すことが可能になります。
- 別のインテントへの遷移や、ビジネスロジックを実行
- 「発注処理」(メール送信とか、APIコールなど)。予約情報を通知する
- バリデーション
- 応答を閉じる
- インデントを閉じるときのメッセージを設定
- 連携
- slackボット、Facebookボットが構築できる
- connect
- 発話によって、インテントを使い分けることができる
- ユーザーが「予約」と回答すると、予約のインテント。「予約変更」と回答すると、予約変更のインテント。
- 発話によって、インテントを使い分けることができる
- 発話