SlackにAWSとPythonを使って簡単なアプリを作る記録
- このサイトのやり方でアプリを作る
- AWSにインスタンスを作成する
- Slackで新規にアプリとボットユーザを作成する
- AWSでLambda関数からCloudWatchにデバッグ用のログを出力するためのIAMロールを追加する
- AWSでSlack Event APIの認証を行うLambda関数を作成する
- AWSで新規にAPI Gatawayを作成する
- Slackで作成したAPIを設定する
- ボットユーザをワークスペースに追加する
- ボットユーザがメッセージを投稿する機能を作る
- メッセージを投稿して動かしてみる
このサイトのやり方でアプリを作る
Slackで新規にアプリとボットユーザを作成する
- 「Create New App」ボタンから新規アプリを作成する。
- サイドメニューの[Bot Users]から新規ボットユーザを作成する。
AWSでSlack Event APIの認証を行うLambda関数を作成する
AWSで新規にAPI Gatawayを作成する
Lambda関数を叩くためのエンドポイントとなるAPIを作成する
APIにPOSTメソッドを作成する
デプロイしてエンドポイントを作成する
- 画面上部にエンドポイントとなるURLが表示されます。
テストする
-
- [Request Body]には、message.channels event | Slackの内容を入力します。
Slackで作成したAPIを設定する
- サイドメニューの[Event Subscriptions]を選択する。
- [Enable Events]を「On」にする。
- [Request URL]にエンドポイントとなるURLを入力する。
- [Subscribe to Bot Events]に「message.channels」か「message.groups」を追加する。
- [Save Changes]ボタンで保存する。
「message.channels」を設定することでボットユーザが参加しているパブリックチャンネルに投稿されたメッセージを取得できる
「message.groups」を設定することでボットユーザが参加しているプライベートチャネルに投稿されたメッセージを取得できる
パブリックチャンネルかプライベートチャネルかを見分ける簡単な方法
Slackの画面横に表示されているチャネル名の横にあるマークを見るとわかる。get.slack.help
ボットユーザをワークスペースに追加する
アプリをインストールする
チャネルにボットを参加させる
メッセージをチャネルに投げるとAWSのCloudwatchのLogに内容が出力される
START RequestId: 24..................... Version: $LATEST [INFO] 2019-05-08T06:11:48.565Z 24...................... { "token": "hogehoge", "team_id": "hogehoge", "api_app_id": "hogehoge", "event": { "client_msg_id": "hogehoge", "type": "message", "text": "chanelとgroupの違いがよくわからない", "user": "投稿したユーザID", "ts": "1557295907.016900", "channel": "チャネルID", "event_ts": "1557295907.016900", "channel_type": "group" }, "type": "event_callback", "event_id": "イベントID", "event_time": 1557295907, "authed_users": [ "hogehoge" ] }
ログはLambda関数に書いた「logging.info(json.dumps(slack_event))」で出力される
ボットユーザがメッセージを投稿する機能を作る
AWSにOAuth Tokenを設定する環境変数を設定する
Lambd関数を更新する
- [Function code]に参考にしているQiitaページに記載されているコードを転記する。
- [Save]ボタンで保存する。