今回はAmazon LexというAWSが提供するフルマネージド型人工知能 (AI) サービスと組み合わせたチャットボットアプリを開発します。記事は全部で3回に分けており、最終回になるこの記事では第1回、第2回で設定したAmazon LexをMoancaに組み込むところまでを紹介します。
今までの記事は下記リンクから確認ください。
■ Amazon Lexで対話型AIアプリを作ろう (Amazon Lex設定編)
https://press.monaca.io/hirose/8671
■ Amazon Lexで対話型AIアプリを作ろう (AWS Lambda編)
https://press.monaca.io/hirose/8677
Cognitoの設定
サンプルアプリからAmazon Lexにアクセスするために、Cognitoを設定します。
AWSコンソールからCognitoのサービスを開いてください。
https://ap-northeast-1.console.aws.amazon.com/cognito/home?region=ap-northeast-1
「IDプールの管理」をクリックします。

「新しい ID プールの作成」ボタンをクリックします。

「IDプール名」に「MonacaSampleBotPool」と入力します。
また、「認証されていない ID」の「認証されていない ID に対してアクセスを有効にする」にチェックを入れます。

「プールの作成」ボタンをクリックしてください。
次の画面は英語で書かれていますが、「IAM」のロールを割り当てる必要がある旨の画面が表示されます。
「許可」をクリックすると「Cognito_MonacaSampleBotPoolAuth_Role」と「Cognito_MonacaSampleBotPoolUnauth_Role」という名前のIAMのロールが作成されます。

次の画面で表示される「AWS 認証情報の取得」は、Monaca側の設定で必要になるので、メモを控えておきます。
IAMの設定
作成されたロール「Cognito_MonacaSampleBotPoolAuth_Role」と「Cognito_MonacaSampleBotPoolUnauth_Role」にはまだポリシーがアタッチされていません。アプリからLexにアクセスを許可するために、「AmazonLexRunBotsOnly」というロールを設定していきます。
AWSコンソールからIAMのサービスを開きます。
https://console.aws.amazon.com/iamv2/home#/home
そして、左部の「アクセス管理」の「ロール」をクリックします。

そして、検索窓に「Cognito_MonacaSampleBotPool」と入力してください。

「Cognito_MonacaSampleBotPoolAuth_Role」と「Cognito_MonacaSampleBotPoolUnauth_Role」の両方に次の設定をしていきます。
「アクセス権限」タブ内の「Permissions policies」内にある「ポリシーをアタッチします」ボタンをクリックします。
そして「AmazonLexRunBotsOnly」を検索窓に入力し、リストのチェックボックスにチェックを入れ、このポリシーをアタッチします。

「Cognito_MonacaSampleBotPoolAuth_Role」と「Cognito_MonacaSampleBotPoolUnauth_Role」両方に対して設定ができたらIAMの設定は完了です。
サンプルアプリのインポート
今回はこちらのリンクをクリックしてサンプルプロジェクトをインポートしてください。
Monacaデバッガー上では動作確認ができないため、iOSまたはAndroidのデバッグビルドをして確認してください。

「www/lex-web-ui」フォルダ配下の「lex-web-ui-loader-config.json」をエディタで開いてください。次の項目の設定をします。
キー | 値 |
---|---|
cognito.poolId | Cognitoで作成したIDプールのID |
lex.v2BotId | Lexの「ボット詳細」に表示される「ID」 |
lex.v2BotAliasId | Lexのエイリアスの詳細に表示される「ID」 |
lex.botName | 「v2BotId」と同じ値 |
cognito.poolId

lex.v2BotId、lex.botName

lex.v2BotAliasId

ファイルを保存したら設定は完了です。
プレビューパネルをリロードしてみましょう。チャットボットが表示されます。

いかがでしたでしょうか。
Amazon Lex、Lambdaの設定ができたら、簡単にMonacaに組み込むことができました。ぜひオリジナルのチャットボットの作成にもチャレンジしてみてください。