チャンネル数が多くなってくると新しくチャンネルが作られてもわからないという課題が出てくる
他にも次が発生したときにすぐにそのことを知りたい
- チャンネルの名前が変わる
- チャンネルが archive される
チャンネルに対して何か操作された際に特定チャンネルにその情報を post することで解決を図る
Events API
チャンネル操作をハンドリングするために Slack が提供している Events API を利用する
Slack App に対してイベントを通知するための API で、イベントをよしなに処理することでいろいろできる
次に使用するための設定を記載する
イベント送信先 URL の verification
まずイベント送信先 URL の verification が必要
Slack App 設定の Event Subscriptions
を開く
↑のように送信先 URL をいれると次のような JSON が飛んでくる
{
"token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
"challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
"type": "url_verification"
}
type
が url_verification
となっている
このときに challenge
をそのまま送り返すと verification が完了するという仕組み
イベントの subscribe
同じく Event Subscriptions
ページにどのイベントを送るかを指定する欄がある
そこに次を指定する
- channel_archive
- channels_read
- channel_deleted
- channel_rename
- channel_unarchive
記事公開時点でチャンネルに関して指定できるイベントは↑で全部
permission の scope を設定する
OAuth & Permissions
の Scopes で設定する
チャンネル関係で必要になる scope は channels:read
のみ
メッセージを post したいので incoming-webhook
も指定する
Incoming Webhook の登録
Incoming Webhooks
の一番下にある Add New Webhook to Workspace
から登録する
post したいチャンネルを指定するだけでいい
OAuth token の取得
作成した Slack App はすでに自分の workspace に導入済みなので OAuth token は発行済み
OAuth & Permissions
に記載されているのでメモる
実装
イベントハンドラーは AWS Lambda と API Gateway 上に Serverless Framework を使って実装してみた
sls deploy
して次の環境変数を設定すれば使えるようになる
SLACK_OAUTH_TOKEN
SLACK_INCOMING_WEBHOOK
注意点
Slack App で Incoming Webhook を使う場合、 Slack App のアイコンと名前が使われる
この場合 Incoming Webhook ではアイコンと名前を指定できない