7
0

More than 3 years have passed since last update.

AWS・APIのド素人がLexとSlackを連携させる

Last updated at Posted at 2021-08-05

記事を作成した目的

Lexでのチャットボット作成の一環で、SlackとLexを連携させる動作を確認するため
簡単に手順だけ掲載する

準備段階 

前提:AWSマネジメントコンソールにログインしかしたことない状態からはじめる。
AWSクラウドプラクティショナーの勉強の一環でアカウント作成していた
しかし、実際はテキスト&公式動画主体の勉強になっていて、コンソールで特に作業は行っていない。
AWSのしくみを理解するためにちらっと各項目を確認したぐらい。

●用意したもの

・プライベートのSlackのワークスペース作成(Slack API利用のため)
・AWSマネジメントコンソール利用のためのアカウント
・公式ホームページの手順サイト Amazon Lex ボットをSlackと統合する
https://docs.aws.amazon.com/ja_jp/lexv2/latest/dg/deploy-slack.html
・Amazon開発者向けガイド Amazon Lex
https://docs.aws.amazon.com/ja_jp/lex/?id=docs_gateway

#手順
(1)AWSマネジメントコンソール「Lex(V2)」にアクセスしてBotを作成
(2)Slackワークスペースの作成・Slack APIの準備
(3)KMSキーの有効化を実施
(4)AmazonとLex Botを連携・統合させるための準備・設定
(5)Slackの動作を確認する。

(1)AWSマネジメントコンソール「Lex(V2)」にアクセスしてBotを作成

言語は日本語にすると対応していないため
既定の言語:米国東部 (バージニア北部)us-east-1にしておく
※でもメニューなどは日本語表示

botを作成

ステップ1
例から開始 サンプルボットでBookTrip「旅行を予約する」を選択
・名前→(例)SlackLexBotTest
・IAM アクセス許可→基本的な Amazon Lex 権限を持つロールを作成します。
・児童オンラインプライバシー保護法 (COPPA)→いいえ
※開発者ガイド記載→COPPAを有効にすると会話ログを使用することができない
・アイドルセッションタイムアウト
・▼詳細設定 - オプション
上記2項目は設定省略。

ステップ2 ボットに言語を追加
 ・言語を選択:日本語(JP)
 ・音声による対話→なし。これはテキストベースのアプリケーションです

ボット (BookTrip) が正常に作成されました
インシデント:BookHotel

サンプル発話となる対話を代表的なフレーズを覚えておく
qita.png

特にここは何もせず[構築]を押下そのまま閉じる
数秒待って正常に構築されたこと完了
ボット作成完了

(2)Slackワークスペースの作成・Slack APIの準備

  #lex botに対応したSlack APIをつくる
Slack APIにアクセス(英語・Google翻訳で日本語に翻訳もできる)
https://api.slack.com/
 アプリを作成する[Create New App]
-Create an app
 ゼロから指定[From Scratch]
-Name app & choose workspace
 ・アプリ名[App Name]:(例)Sample SlackBot
・WorkSpace:プライベートで作成したSlackのワークスペース

#アプリをつくる
Building Apps for Slack
Feautures>Intravtive & shortcut
 ・Interactivityをオン
 ・Request URLは https://slack.com 
(ここは後程lexbotのエンドポイントURLに入れ替わる)
 
 いったん設定を保存(Save Changes)
 
#Lex Botを連携するための必要な情報を確認する。
 Setting>BasicInformation>App Credentials
 内容をメモ帳にコピーペーストする(後にLex側で使用する)

image.png

 

(3)KMSキーの有効化(Slackと統合させるときに使う)

AWS KMS
データの暗号化に使用される暗号化キーの作成と管理のためのマネージド型サービス。
KMSキー
ボットチャットのテキストおよび音声ログの暗号化のために必要なアイテム

検索バーでKMSと検索。Key Management Serviceを選択。
image.png

今すぐ始める から キーの作成ボタン押下

ステップ1 キーを設定
キーのタイプ:対称(暗号化および復号化)
詳細オプションタブはそのまま。
キーマテリアルオリジン:KMS
リージョンごと:単一リージョンキー

ステップ2 ラベルを追加
エイリアス(キーの表示名):(例)aws_kms
説明・タグは省略

ステップ 3 キーの管理アクセス許可を定義
・キー管理者
マネージメントコンソールでIAMロールユーザーとなっている
名前を確認して、チェックを入れる。
・キーの削除はチェック(管理者がこのキーを削除できるようにする)
※ここを設定すると管理費コストがかかる可能性があるため注意

ステップ 4 キーの使用アクセス許可を定義
暗号化オペレーションで CMK を使用できる IAM ユーザーとロールを選択
ステップ3と同義

ステップ 5 確認
キーポリシー 入力省略(いじらない)

完了

(4)AmazonとLex Botを連携・統合させるための準備・設定

 Amazon lex V2に戻る。
 Lex>ボット>ボット: BookTrip>デプロイメニューからチャネル統合
 チャネルを追加ボタン押下。
 プラットフォームを選択 で Slack
 
 統合設定
 名前:(例)SlakBotTest
 エイリアス:(例)TestBotAilias を選択
 言語:日本語(JP)で選択
 
 追加設定
 ・クライアントID→SlackAPIのClient ID
 ・KMSキー:(3)で自分が有効にしたキーを指定
 ・クライアントシークレット→SlackAPIのClient Secret
 ・検証トークン→SlackAPIのVerification Token
 ・成功ページURL-オプション →入力を省略
 作成ボタン押下

統合設定で出来上がったコールバック URLは
後程のlexと連携させるために必要な情報なので控えておく
image.png

SlackAPIに戻る
■App Home
Messages TabをON (LexBotがSlackのアプリとしてDM形式でやり取りを行うため)
Allow users to send Slash commands and messages from the messages tab
ここにはチェックを入れる(ここを追加しないと後程Slackと連携したときに「このアプリのメッセージ送信が許可されていません」という文言が表示される。)
image.png

■Interactivity & Shortcuts
Request URLにLexのコールバックURLのエンドポイントURLをペーストして Save Changes

■OAuth & Permissions
・Redirect URLs
Redirect URLsのAdd New Redirect URLを選択
LexのコールバックURLのOAuthエンドポイントURLをペーストして
Save URLsボタン押下

・Scopes
Bot Token Scopes
Add an OAuth Scopeを選択
検索ボックスが表示されたら以下を追加
chat:write
team:read

■Event Subscriptions
Enable Eventsをオン
Request URLに
エンドポイント
Request URLにLexのコールバックURLのエンドポイントURLをペーストして
Save Changes

・Subscribe to bot events
Add Bot User Event押下後
検索ボックスが表示されたら以下を追加
message.im

■Manage Distribution
Add to Slack選択
認証させる

image.png

SlackのAppsに「SlackBotTest」が表示されるのを確認する。

(5)Slackの動作を確認する。

SlackのAppにアクセス。
SlackbotChatに
「ホテルを予約したいのですが」のメッセージを送る
image.png

■まとめ

 ・無料で用意できるものであれば手順だけざっと理解するよりは
  手を動かしてしまったほうが理解できる。

 ・なんとなくでもしくみがわかると面白いのでこういう感覚を大事にしたいと思った
  今回は連携させるのが目的だったのでLex側で用意されている
  サンプルbotを使用してしまったが、きちんと考えたbotをここに反映させたい

 ・英語は理解できなくとも問題ない
  日本であまり普及されていないサービスであれば日本語マニュアルは
   用意されていない・整備されてないため(機械翻訳)
   多少なりとも覚悟は必要

 ・余計な設定は行わず、初心者は手順通りで
  Slac側で「このアプリがメッセージを送ることは許可されていません」表示が出てしまい
  不安になってAPI側で色々権限を追加していたら、SlackとLexを連携するときに
  リダイレクトループという現象に陥った
  cookieを消したり、ブラウザ再起動させたり、ブラウザ切替などの
  基本トラブルシューティングを行っても解消できず
  リダイレクトループから抜け出せないため、
  完全に自分のやったことが原因であることはわかった。 
  何がリダイレクトの原因になっているかは明確には不明だが
  APIに色々権限をつけていたのが読み込みを繰り返す原因だったようだ

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0