[レポート] ARC328 – サポートチャットボットの作成 #reinvent

2018.12.07

ビルダーセッション、ARC328 - Creating a Support Chatbot に参加しましたので紹介します。

ビルダーセッションはAWSのソリューションアーキテクトと、5人の参加者で行うグループセッションです。

Builders Sessions

画像

概要

Event Catalogからの引用です。

In this session, create a conversational interface with Amazon Lex which recognizes and answers common questions received through chat or voice. Become familiar with an Amazon Lex chatbot and its constructs, such as intents, utterances, and slots.

日本語訳

このセッションでは、チャットや音声で受け取った一般的な質問を認識して回答するAmazon Lexと会話型インターフェイスを作成します。 インテント、発話、スロットなどのAmazon Lexチャットボックスとその構造に慣れてください。

Architecture

今回使うサービス。

  • Amazon Lex
  • AWS Lambda
  • Amazon S3
  • Cognito

Deployment

AWSのソリューションアーキテクトのプレゼンテーションのあと以下のドキュメントにそって実際に構築します。

Module 1: Static Web Hosting with Amazon S3

このモジュールではAmazon S3で静的Webサイトをホストします。 CloudFormationを利用して構築します。

  • Website Bucket Nameを入れてNextをクリックします。

画像

  • OptionsページはデフォルトでNextをクリックします。

  • Reviewページでは I acknowledge that AWS CloudFormation might create IAM resources. にチェックを入れてCreateをクリックします。

画像

  • スタックがCREATE_COMPLETEになったらOutputsからWebsiteURL linkをクリックします。

画像

  • モジュール1は完了です。

画像

Module 2: User Registration with Amazon Cognito User Pools

このモジュールでは、ログインするAmazon Cognitoユーザープールユーザーを作成します。

  • /register.htmlにアクセスして、アカウントを作成します。

画像

  • /verify.htmlにリダイレクトするので、e-mailで受け取った、verification codeを入力します。

画像 画像

  • signin.htmlにリダイレクトしたらログインします。

画像

  • これでモジュール2は完了です。

Module 3: Create Chat bot

このモジュールではAmazon Lexでチャットボットを作成します。

Step 1: Create the AWS Lambda function

CloudFormationのテンプレートを使用して、Lambda functionを作成します。 全てデフォルトでOKです。

Step 2: Configure Cognito pool id in Lambda function

Lambda functionを修正します。

  • supportchatbot-webapp-1ResourceからCognito User Pool Idをコピーします。

画像

  • 作成した、Lambda function(support-chatbot-function)を開き、PoolIDを修正しSaveします。
import json
import boto3

client = boto3.client('cognito-idp')

with open('./response.json', 'r') as r:
    response = json.load(r)
    response_success = response['response_success']
    response_fail = response['response_fail']

#use your cognito user pool ID
PoolID = 'xxxxxxx'

Step 3: Creating your Bot

Botを作成していきます。

  • 予め用意されている json ファイルをダウンロードします。 VirtualHelpDesk.zip

  • Amazon Lex consoleへ移動します。先程ダウンロードしたzipファイルをimportします。

画像 画像

  • BuildをクリックしてBotを作成します。

画像 画像

  • Buildが完了したら、右側のスクリーンで'I forgot my password'タイプしてみます。

画像

Step 4: Integrating the bot with Lambda and test it

Lambdaとbotを統合します。

  • Fulfillmentセッションに移動して、先程作成したLambda functionを選択してversion$LATESTにします。 Intents、UnlockAccount and PWReset両方に同じ設定をします。

画像 画像

  • Save Intentをクリックして保存します。

  • Buildをクリックしてチャットボットを構築します。

画像

Step 5: Test Password Reset and Account Unlock Intent

パスワードリセットと、アカウントのロック解除のインテントのテストをします。

  • VirtualHelpDeskチャットボットで、Test botを開き、I forgot my passwordとタイプします。

  • チャットボットの支持に従います。最後に以下文面がでて、リセット用のcodeがメールアドレスに送られます。

Great, you're all set. Check your email for further instructions.
  • メールを受け取ったら、/forgotPassword.htmlへ移動してパスワードをリセットします。

画像 画像

  • パスワードをリセットしたら/signin.htmlへ移動して新しいパスワードでログインします。

画像

  • UnlockAccountインテントでテストをします。

  • Cognitoのマネジメントコンソールから、Cognito User Pool(SupportChatbot)→ Users and Groups → ユーザーをDisableにします。

画像

  • UnlockAccountインテントでTest botを開き、I think my account is lockedとタイプします。

  • チャットボットの支持に従います。最後に以下文面がでて、ユーザーのロックが解除されます。

Great, you're all set. Try logging in now

この時点で、Account StatusEnabledになっていることが確認できます。

画像

  • /signin.htmlへ移動してログインができるか確認します。

Step 6: Host the bot with-in a Web Application

ウェブアプリケーションでボットをホストしてみます。 CloudFormationスタックをLaunchします。

  • Lex Bot Configuration Parametersで、BotNameを入力します :VirtualHelpDesk
  • Web Application Parameters で、各パラメーターを入力します

WebAppConfBotInitialText : Hello, How can I help you? WebAppConfBotInitialSpeech : I forgot my password WebAppConfToolbarTitle : VirtualHelpDesk

  • StackがCREATE_COMPLETEとなったらOutputsを確認してParentPageURlを開くと、chatbotがiFrameとして表示されます。

画像 画像

まとめ

チャットボットには興味があり、これから使っていこうともおっているサービスですので参加しました。 画像つきでご紹介しましたが、詳細はgithubのaws-samples/support-chat-bot を確認してみてください。 Amazon Lexの日本語対応が待ち遠しいです。

参考URL