こんにちは。Photoraitエンジニアのヒエイです。
先日開催したWP HACK DAY#3にて自チームで作ったチャットボットを紹介します。
作ったもの
Slackを利用して、社内エンジニアがまとめた開発ドキュメントを探す事ができる会話式チャットボットを作りました。
弊社では開発フローやナレッジをDocBase・Redmine・GitHubのReadmeに各々の形式でまとめていますが、「どこに何がまとまっているか分からない」という課題があり、一括で検索できる場所があったら便利なのでは、と考えました。
HACK DAYは一日しかないので、
- Slackを利用してDocBaseの記事を検索できる
- チャットボットが会話式で記事一覧を教えてくれる。
という形が作れる事を一旦のゴールに、チームで開発を進めました。
完成系
非常にシンプルですが、検索ワードを投げるとDocBaseの記事を取得できる挙動が形になりました。
技術スタック
- SlackとAmazon Lexでチャットボットで会話を行う。
- 検索ワードをLambdaに投げ、DocBase APIを利用して記事検索を行う。
- 取得した記事をLambdaで整形してAmazon Lexを介してSlackに返答する。
上記の実装をします。
Amazon Lex(以下Lex)
Lexを構築していきましょう。
ボットの作成
AWSのコンソールからLexの管理画面に行き、ボットを作成をクリック。
初期作成を行います。
- ボットの設定
ボット名:作成するボット名を指定。 - IAM アクセス許可
ランタイムロール:基本的な Amazon Lex 権限を持つロールを作成します。を選択。既にロールがある場合は既存のロールを利用。 - 児童オンラインプライバシー保護法 (COPPA)
保護法を確認しチェック。 - アイドルセッションタイムアウト
タイムアウトの時間を設定。
次へをクリック。
- 言語
言語を選択:日本語を選択。
音声による対話:お好きなモデルを選択。
完了をクリックし作成完了。
インテントの作成
- インテントの詳細
インテント名:名前を付けます。 - サンプル発話
会話が発動する発起となるワードを選定します。「検索」「検索したい」などを設定しました。 - スロット
ここでは、会話のスロットを設定します。今回は、「検索したいワードは何ですか?」とボットから返答があったら、こちらからワードを投げることで記事を検索できることを期待していましたが、2022年8月現時点では日本語によるフリーワードは利用できないようでした。
そこで新規でカスタムスロットタイプを作成し、以下のようなスロットタイプ値を登録し、会話から条件ワードを選定させる形に方針を変更しました。
動作確認
作成したインテントとスロットの挙動確認ができます。
Lambdaとの接続設定もありますが、そこは後編でLambda作成も合わせて記載します。
Slack
SlackとLexの接続を行います。
https://docs.aws.amazon.com/ja_jp/lex/latest/dg/slack-bot-association.html
Slack アプリ作成
Slack APIからCreate Appする。
Basic Informationを開きClient ID、Client Secret、Verification Tokenをメモ。
Lexのチャンネル結合
Lexに戻り、チャネル統合ページでチャンネルを追加をクリック。
- プラットフォーム
プラットフォームを選択:Slackを選択
IAMロール:自動で作成されます。
KMS キー:aws/lexを選択。
- 統合設定
名前:チャンネル名を決める。
エイリアス:ボットのエイリアスを選択。
言語:日本語(JP)を選択。
- 追加設定
クライアント ID:先ほどメモしたClient IDを入れる。
クライアントシークレット:先ほどメモしたClient Secretを入れる。
検証トークン:先ほどメモしたVerification Tokenを入れる。
成功ページ:記入しなくて良いです。
作成をクリック。
作成された、エンドポイント、OAuth エンドポイントをメモする。
Slackアプリ設定
再びSlack側設定です。
- Interactivity & Shortcuts
InteractivityをON。Request URLに先ほどメモしたエンドポイントURLを設定。 - Event Subscriptions
Enable EventsをON。ここのRequest URLにもメモしたエンドポイントURLを設定。
Subscribe to bot eventsにて、Add Bot User Eventからmessage.imを追加。 - OAuth & Permissions
Redirect URLsにメモしたOAuth エンドポイントURLを追加する。Save URLsをクリック。
Scopesにて、Bot Token Scopesにchat:write・team:read
を追加。 - App Home
Show Tabsで、Allow users to send Slash commands and messages from the messages tabにチェックを入れる。
最後にInstall AppページでInstall to Workspaceをクリック。アプリがSlackワークスペースにインストールされます。
SlackとLex挙動確認
Slackワークスペース内のサイドメニューからアプリを追加するをクリック。
検索枠から作成したSlackアプリを選択。
入力フォームからテキストを送ってみましょう。
Lexからの返答が返ってくるようになりましたね!
まとめと後編
SlackからLexと会話式チャットボットの挙動ができるようになりました。
次回はLexから検索ワードをDocBase APIに投げ、検索結果を取得する方法を記載します。
後編はdate17にバトンを繋ぎます!よろしく!