社内向けチャットボット作成

#目次
[1.はじめに](#1はじめに)
[2.全体スケジュール](#2全体スケジュール)
[3.全体学習](#3全体学習)
[4.Lexチーム作業内容](#4lexチーム作業内容)
[5.Lambdaチーム作業内容](#5lambdaチーム作業内容)
[6.完成したチャットボット](#6完成したチャットボット)
[7.まとめ](#7まとめ)<br>

#1.はじめに
株式会社エニプラでは、社内のチームごとにテーマを決め、<br>毎月行われるチーム会でテーマに沿った活動を行っています。
チーム会で行った内容は、<br>年末に「エニプラアワード」という場で全社員や来期の新卒に向けて発表を行っています。<br>
今年度私たちのチームでは<br>「Amazon lexとSlackを使った社内向けチャットボットの作成」をテーマに活動してきました。
テーマを検討、決定した背景として、4つの点があります。<br>
1.近年、チャット式の質疑応答システムがWebサイトで使われている
2.社内向けの問い合わせ対応にチャットボットが使えそうである
3. Slackにあれば社内規則・ルール確認時に活用できそう
4.「Amazon Lex」と「Lambda関数」を使うことで、Slackと連携可能である<br>
これらの点から最終的に、
**「Lexを利用してSlackと連携したチャットボットを作ってみよう」**ということになりました。<br>


#2.全体スケジュール
約8か月間にわたり、松田チーム全体で
図のようなスケジュールでエニプラアワードに向けて取り組みました。
<img width="400" alt="全体スケジュール" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/994b957d-2ef2-ade2-325e-d34612a2d6e6.png"><br>
はじめに3月～6月にかけて、チーム全体でチャットボットの学習やAmazon Lexの座学など
社内向けチャットボットを作成する上で、必要な基礎知識を学習しました。<br>
その後7月～11月にかけて、LexチームとLambdaチームに分かれて
ドキュメント作成やコーディング、運用テストを実施しました。


#3.全体学習
実際にどういった内容の座学や作業を実施したのかについてご紹介いたします。<br>
各チームに分かれる前に「Amazon Lex」について学習を行いました。
ここでは、Amazon Lexで使用される用語やlambda関数との組み合わせについて学習しました。
また実際にチーム内でチャットボットの作成や操作が行えるように、<br>コンソール上で手順確認も併せて行いました。
<img width="400" alt="Lambda・Lex" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/af73faac-8318-b3af-8e1c-aeb6a7ebe4d2.png">

###Amazon Lex とは
Amazon Lexとは、音声やテキストを使用した会話型インターフェイスを
さまざまなアプリケーションに構築するための AWS のサービスです。


#4.Lexチーム作業内容
Lexチームでは、主に3つの作業を実施いたしました。

###1：LexとSlackの連携方法の調査
事前に、全体学習で学んだLexの操作方法やAWS公式ドキュメントを元に、<br>Amazon Lex上でチャットボットを作成しました。
その後、作成したチャットボットをSlackへ連携し、動作確認を実施しました。<br>
またチャットボットの作成やSlackへの連携方法については、<br>Qiita記事にて詳細な内容を投稿しています。
URL：https://qiita.com/saya_m3/items/9fbc1e28c86bfb7c3bb2

###2：QAリストの作成
社内向けに導入するに辺り、実装可能なQAのアイディアを洗い出しました。
その後、下の図のような、QAの内容に沿って表示される文言のフロー図を作成しました。<br>
<img width="350" alt="フロー図" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/2d741659-6c4b-d94b-8d28-631f52b6d30b.png">

###3：完成したチャットボットのテスト
テストを実施する前に、基礎部分のテスト項目に加えて、<br>PCやスマートフォンなどデバイスごとの仕様書を作成し、運用テストを実施しました。
このテスト結果を元に、Lambdaチームでプログラムの修正対応を行いました。


#5.Lambdaチーム作業内容
Lambdaチームでは主に2つの作業を実施しました。
###1：条件分岐に対応させるための調査
調査の結果、Lex単体ではユーザーの選択に応じた条件分岐と回答が難しいため、
Lambdaと連携する必要があることが判明しました。
そのため図のように、ユーザーの質問に対して、
Slackをフロントエンドとして使用し、バックエンドとしてLexで受け取り、
情報をJSON形式でLambdaと連携させることで条件分岐に対応することが可能になりました。
<img width="650" alt="概要図" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/0cfcc822-b3c1-608d-4751-c3475d5cbc1b.png">

###2：コーディング
チャットボットの環境構築をするにあたり、<br>LexのAWS公式ドキュメントとLex用Lambdaのサンプルコードを確認し、
処理の流れやQAを実装するための変更箇所を実際の動きを見ながら分析しました。
変更箇所を分析後は、Lexチームが作成したQAのフロー図を元に、<br>Pythonを使用してLambdaの中身を作成しました。
<img width="700" alt="コード" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/de80d5b1-dd7f-0a97-7ef3-c9eda80fdd23.png">


#6.完成したチャットボット
実際にチャットボットを利用する例を紹介します。
今回は交通費精算について質問してみます。
はじめに、Slackのダイレクトメッセージにて<br>「any-plus QA」を追加して、「質問」とメッセージを送ります。
その後、チャットボットから次の画像のように知りたい情報の選択肢が、表示されます。
表示された選択肢から今回は申請を選択します。
<img width="400" alt="完成_図1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/05d26768-e7a8-006d-1a5d-efa9d26c2067.png"><br>
その後、次の画像のように追加の選択肢が表示されますので、交通費精算を選択します。
<img width="400" alt="完成_図2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/d1dcb761-fa78-70ca-b03d-53be0b543e3c.png"><br>
最後にアクセスするデバイスの選択肢が表示されるので、今回は「PCからアクセス」を選択します。
その結果、PC版での交通費精算サイトのURLが表示され、アクセスすることができます。
<img width="400" alt="完成_図3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1850774/370e7921-6c30-5477-7ce5-1eac84da3c06.png"><br>
その他のQAについても、チャットボットを利用し、知りたい情報を簡単に調べることができます。


#7.まとめ
今年度の私たちのチームは「社内向けチャットボット」を作成しました。
Lex、Lambda、Slackを連携させ、チャットボットの基本的な質疑応答の動作を実装しました。
LexチームとLambdaチームに分かれて作業を行い、
Lexチームでは、SlackとLexの連携やQAリストを作成しました。
Lambdaチームでは、LexとLambdaを連携させ、チャットボットの条件分岐を実装しました。

###半年間の活動を通して
それぞれのチームから、
Lexチーム
「チャットボットの製作に初めて挑戦できたことは有意義であった。」
Lambdaチーム
「Lambdaを利用してサーバーレスなアプリの構築ができ、<br>マネージドサービスの便利さを知ることができた。」
という感想が挙がりました。
今後の展望としては、社内で使っていただき、<br>フィードバックを得てQAの内容を充実させていこうと考えています。<br>
以上で、ご紹介を終わります。ありがとうございました。<br>