- このサイトのやり方でアプリを作る
- AWSにインスタンスを作成する
- Slackで新規にアプリとボットユーザを作成する
- AWSでLambda関数からCloudWatchにデバッグ用のログを出力するためのIAMロールを追加する
- AWSでSlack Event APIの認証を行うLambda関数を作成する
- AWSで新規にAPI Gatawayを作成する
- Slackで作成したAPIを設定する
- ボットユーザをワークスペースに追加する
- ボットユーザがメッセージを投稿する機能を作る
- メッセージを投稿して動かしてみる
このサイトのやり方でアプリを作る
Slackで新規にアプリとボットユーザを作成する
- 「Create New App」ボタンから新規アプリを作成する。
- サイドメニューの[Bot Users]から新規ボットユーザを作成する。
AWSでLambda関数からCloudWatchにデバッグ用のログを出力するためのIAMロールを追加する

[IAM]画面を開く。 
サイドメニューの[Role]を選択して[Create role]ボタンを押下する。 
[AWS service]の[Lambda]を選択し、画面下の[Next: Permissions]ボタンを押下する。 
[AWSLambdaBasicExecutionRole]を選択してロールを追加する。 
Roleが追加される。
AWSでSlack Event APIの認証を行うLambda関数を作成する

コンソールで[Lambda]を選択する。 
[Create a function]ボタンを押下する。 
[Author from scratch]を選択して必要な項目を入力する。 - [Runtime]は、「Python 3.6」を選択する。
- [Permission]は、[Execution role]で「Use an existing role」を選択して[Existing role]で追加したIAMロールを選択する。

参考にしているQiitaページに記載されているコードとHandlerを転記して保存する。 - エンドポイントを認証するためにSlackからリクエストが送られてきた際には、認証をとおすためにchalleng要素をレスポンスする必要がある。そのための処理。
AWSで新規にAPI Gatawayを作成する
Lambda関数を叩くためのエンドポイントとなるAPIを作成する
APIにPOSTメソッドを作成する

POSTメソッドを追加する。
デプロイしてエンドポイントを作成する

[Action]セレクトから「Deploy API」を選択してデプロイを行う。 - 画面上部にエンドポイントとなるURLが表示されます。
テストする

[Test]リンクを押下します。 
[Test]ボタンを押下します。 - [Request Body]には、message.channels event | Slackの内容を入力します。

Lambda関数が呼ばれてログが出力されました。 
CloudWatchにもログが出力されました。
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の画面横に表示されているチャネル名の横にあるマークを見るとわかる。

ボットユーザをワークスペースに追加する
アプリをインストールする

チャネルにボットを参加させる

メッセージをチャネルに投げると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]ボタンで保存する。
メッセージの投稿には、ボットユーザがメッセージを投稿できるchat.postMessageを使用しています。
メッセージを投稿して動かしてみる




