【AWS】Lexボットの作成方法についてまとめてみた

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

少し時間が空きましたが、以前の記事で
AmazonConnectのコンタクトフローからLexボットを呼び出す方法について記載しました。

https://qiita.com/Aichi_Lover/items/748a0f469378235d258f

・・・がそもそもLexボットについてあまり詳しく書けていなかったので、
**今回はLexボットの作成方法について記事にしたいと思います！**
Lexについて勉強中の方の参考になれば幸いです。
(*^^)v

# 2.用語の説明
Lexボットを作成するにあたり、基本的な用語の説明をします。

## 2.1.インテント
インテントとは直訳すると「意図」のことで、
Lexが顧客に対して投げかける質問の内容や、予想される顧客の反応等を設定し、
Lexと顧客の一連のやり取りを記述しておくことができます。

また、1つのボットに対してインテントを複数作り、処理を分けることができます。

:::note info
例
以下の画像のインテントを作成した場合
「BookCar」はレンタカーを予約するためのインテント
「BookHotel」はホテルを予約するためのインテント
となります。

※Bookは「本」という名詞ではなく「予約する」という動詞です

|![300_インテントイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/28f76013-ae8e-6461-01bb-5a344d7bd82b.png)|
|:--|
:::

## 2.2.サンプル発声
サンプル発声とは、インテントごとに設定する項目で、
顧客がどのような発声をしたらそのインテントの処理を開始するかを設定します。
また、完全一致ではなく、顧客の発声をLexが分析し、設定した内容に近いかどうか判定します。

:::note info
以下の画像の設定では、顧客が「ホテルを予約したい」と発声すると、
「BookHotel」に設定したやり取りが開始されます。
:::

|![305_サンプル発声イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c952efe0-537b-0dc0-56fb-a0c830945b3e.png)|
|:--|

## 2.3.スロット
スロットとはLexから顧客への質問1つと予想される顧客の反応1つがセットになったものです。
インテントに対して複数設定することができます。

また、予想される顧客の反応をスロットタイプと言います。

:::note info
画像では以下のスロットが設定されています。

|スロットNo  | 顧客への質問 | 予想される顧客の反応|
|--- | --- | ---|
|1  | どちらの都市に滞在しますか？ | &lt;city&gt;（都市名を回答）|
|2  | 何日にチェックインしますか？ | &lt;date&gt;（チェックイン日を回答）|
|3  | 何泊しますか？| &lt;number&gt;（宿泊日数を回答）|

:::

|![310_会話フローイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/241161b1-2120-aad2-5b45-0ec54678175b.png)|
|:--|

# 3.ボットの作成
では、いよいよボットの作成に入ります♪

今回は例として、（会員情報としてDB等に登録されている）住所を変更したいという顧客に対して、
新しい住所を聞くボットを作成したいと思います。

## 3.1.基本設定
3.1.1.AWSのマネジメントコンソールにログインします。

3.1.2.Lexの管理画面にて、「ボットを作成」を選択します。

|![010_ボットを作成を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/1cee7172-9da3-b537-f7fe-039341cfcb2a.png)|
|:--|

3.1.3.以下の表のとおりに設定し、「次へ」を選択します。

|項目  | 設定値|
|--- | ---|
|作成方法  | 空のボットを作成します。|
|ボット名  | （任意）|
|IAMアクセス許可  | 基本的な Amazon Lex 権限を持つロールを作成します。<br>（2回目以降は既存のロールを使用してもOKです。）|
|自動オンラインプライバシー保護法 | いいえ|

:::note warn
自動オンラインプライバシー保護法の項目を「はい」にすると、
CloudWatchへログを出力することができなくなります。
:::

|![020_ボットの設定_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/12133514-ec86-f995-7bc0-740b50ea2aae.png)|
|:--|

|![030_ボットの設定_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/8d4080cc-9188-4f50-f709-776e1153faf1.png)|
|:--|

3.1.4.言語は日本語を選択し、ボイスボットの場合はボイスの種類を選択し、「完了」を選択します。

|![040_ボットの設定_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cefc8b0a-0b8a-aa5f-ec96-bb3daddb3d73.png)|
|:--|

3.1.5.ボットが作成されます。

## 3.2.インテントの作成
ボットが作成されると自動的に「NewIntent」という名前のインテントが作成されるので、
次はそれを編集していきます。

3.2.1.インテント名を処理が分かりやすい名前に修正します。

|![050_インテント名を修正.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/7dd90d9a-358e-0c99-1ae7-a3323046c506.png)|
|:--|

3.2.2.サンプル発話を入力し、「発話を追加」を選択します。

|![060_サンプル発話を設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/bb58d067-9484-06c1-2aa3-065b5fe46fd6.png)|
|:--|

3.2.3.「スロットを追加」を選択します。

|![070_スロットを追加を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/a702622a-809a-bace-0771-c105adf87c6e.png)|
|:--|

3.2.4.名前・スロットタイプ・プロンプトを入力し、「追加」を選択します。

:::note info
以下の画像では住所を受け取るためのスロットタイプである
「AMAZON.StreetName」を選択しています。
:::

|![080_スロットの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/8806ffcc-0cf9-ae92-05c8-fb7f100ae663.png)|
|:--|

3.2.5.Confirmationをアクティブにし、確認メッセージを設定します。

:::note info
{NewAddress}の部分の様に{★スロット名★}とすることで、
スロットで受け取った値を使用することができます。
:::

|![090_Confirmationの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c444bfb8-2c8a-7d03-06ff-47bd88c0086d.png)|
|:--|

:::note warn
本来であればこの後の処理として、
DBを更新する処理（DBを更新するLambda等を起動する）が必要ですが、今回は省略します。
:::

3.2.6.最後に、画面右下の「インテントを保存」を選択し、「構築」を選択します。

|![100_インテントを保存、構築.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/a504e241-f7c0-9937-e7c6-409b42de860e.png)|
|:--|

3.2.7.「テスト」を選択することで、Lexの動作を確認することができます。

:::note info
下側にメッセージ（画像の青色のメッセージで表示されている内容）を
入力しエンターキーを押すと、
Lexが自動で応答し、画像の白色のメッセージが表示されます。
:::

|![110_テストを実施.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/0e21d8f0-b517-db0d-33e4-da662b192548.png)|
|:--|

# 4.おわりに
ここまで読んで下さり、ありがとうございます！！！
(^^)

Lexでチャットボットやボイスボットが作れて、色々楽しかったです！
次回も何かしらAWSに関することを記事にしたいと思います♪
(:3_ヽ)_