AWSを活用してLINEチャットボットを作ってみた!②
こんにちは、宮内です。
前回は、LINEボットの作成とLambdaの連携まで説明しました。
今回は、Amazon Lexを利用したチャットボットの作成について説明します。
Amazon Lexとは
Amazon Lexは、音声やテキスト(自然言語)を使用した会話型インターフェースを構築するサービスです。
今回の通知サービスでは、利用者の登録機能で使用します。
利用者の登録処理では、ユーザから取得する画像や氏名といった情報を保持する必要がありますが、Lambdaだけではデータの保持ができないため、Amazon Lexを利用して管理します。
Amazon Lexの概要は、以下のページを参照ください。
aws.amazon.com
Amazon Lex V2でボット開発
Amazon Lexには、V1とV2の2つのバージョンが存在しており、どちらも日本語対応しています。
V1とV2では利用可能なAPIが異なっているなど、仕様の違いはありますが、どちらのバージョンでも開発可能です。
今回は、Amazon Lex V2を利用してチャットボットを作成します。
ボット作成
Amazon Lexのコンソール画面にある、「ボットを作成」をクリックします。
※V1でボットを作成する場合は、左側のメニューにある「V1コンソールに戻る」をクリックします。
ボットの作成方法は、空のボットを選択します。
ボット名と作成するボットの説明を入力します。
今回、IAMロールは基本的なAmazon Lex権限を持つロールを作成します。
児童オンラインプライバシー保護法(COPPA)に関しては、ボットの利用者や扱う情報に応じて選択します。
セッションタイムアウトはそのままの設定(5分)とします。
タグは任意に設定して、次へをクリックします。
次に、使用する言語を設定します。
言語は日本語(JP)を選択し、他の項目はデフォルト値のままでOKです。完了をクリックします。
数秒待つと、ボットが作成されます。
作成直後はボットの中身がない(=対話することができない)状態なので、次に対話フローを作成します。
対話フローの構成
今回は、通知サービスの利用者を登録する対話フローを作成します。
利用者登録用のインテントを作成し、スロット(対話を完了させるために必要なパラメータ)は、利用者の画像と利用者の名前の2つを設定します。
利用者の画像の情報は画像データそのものではなく、LINEから画像を送信した時のメッセージIDをスロットに設定します。
メッセージIDを控えておくことにより、LINEのMessaging APIを利用して画像データを取得します。
コンテンツ取得APIに関しては、以下のページを参照ください。
developers.line.biz
対話フローの構成は以下の通りです。
インテントはユーザの目的に応じて作成します。今回は利用者を登録することを目的としたインテントになります。
サンプル発話やスロットなど、他のキーワードについては後ほど説明します。
対話フローの作成
ボットを作成すると、「NewIntent」というインテントが自動作成されるので、このインテントを編集します。
まずは、インテント名とインテントの説明を変更します。
次に、サンプル発話(対話のトリガーとなるキーワード)を設定します。
今回は先ほどの構成通り、createUserを設定します。
この設定により、ユーザが「createUser」というメッセージをLINEで送信することでチャットボットが起動します。
次はスロットの編集です。
スロットを追加をクリックします。
追加するスロットの設定を行います。
必須項目の場合は、「このインテントには必須」にチェックを入れておきましょう。
スロット名とスロットタイプ、プロンプト(値の入力を促すために、ボットが発言する内容)を入力して、追加をクリックします。
ちなみに、スロットタイプに設定している「Amazon.Number」ですが、組み込みスロットタイプと呼ばれており、入力した値が数値(Number)かどうかを自動的に判定してくれます。
数値でない場合(英字が含まれている場合など)は、プロンプトの内容を再び発話して、userImageIdを再入力するように促してくれます。
同様の手順で userName のスロットも追加します。
ちなみに、複数のスロットを設定した場合、上にあるものから順番にボットが入力を促します。
スロットの順番を変更したいときは、ドラッグ&ドロップで順番を入れ替えましょう。
次に、スロットを全て埋め終わった後の登録確認メッセージと、登録を拒否した場合のメッセージを設定します。
確認プロンプトで設定している {userName} ですが、これは上で設定したスロット userName で入力された値を参照することを意味しています。
次に、フルフィルメント処理(スロットの値が全て埋まり、確認プロンプトで登録処理を許可した場合に実行される処理)が成功した場合と、失敗した場合のメッセージを設定します。
※フルフィルメント処理ではLambda処理を行いますが、実行するLambda処理をまだ作成していないため、次回の記事で設定を行います。
次に、インテントの保存をクリックして、変更内容を保存します。
保存が完了したら、構築をクリックします。
ボットの構築には数十秒かかります。
対話フローのテスト
構築が完了したら、対話フローを確認するためにテストをクリックします。
すると、画面の右側にチャットエリアが表示されます。
ここにテキストを入力していくことで、チャットボットとの対話を確認することができます。
登録完了まで行ったチャットはこちらです。
画像データは送信できないので、代わりにダミーのメッセージIDを送っています。
画像を送信するところで数字以外を含んだメッセージを送ると、質問を聞き返していることが確認できます。
また、チャットエリアの上部にある検査をクリックすると、スロットの状態や、Amazon Lexに対するリクエストと応答(レスポンス)のJsonデータを確認することができます。
このJsonのデータを元に、次回の記事ではLambdaを作成します。
以上で、Amazon Lexによるボット開発は完了です!
さいごに
今回は、Amazon Lex V2を使用したチャットボットの開発を行いました。
対話フローを作成しただけのような印象を受けますが、LambdaからAPI処理を実行することで、チャットボットとして活躍するようになります。
次回は、チャットボットとLambdaを統合して、利用者の登録と到着通知をLINEで動かしてみたいと思います!