Posted at

新しい Slack チャンネルが作られたことを知りたい

More than 1 year has passed since last update.

チャンネル数が多くなってくると新しくチャンネルが作られてもわからないという課題が出てくる

他にも次が発生したときにすぐにそのことを知りたい


  • チャンネルの名前が変わる

  • チャンネルが archive される

チャンネルに対して何か操作された際に特定チャンネルにその情報を post することで解決を図る


Events API

チャンネル操作をハンドリングするために Slack が提供している Events API を利用する

https://api.slack.com/events-api

Slack App に対してイベントを通知するための API で、イベントをよしなに処理することでいろいろできる

次に使用するための設定を記載する


イベント送信先 URL の verification

まずイベント送信先 URL の verification が必要

Slack App 設定の Event Subscriptions を開く

verification.png

↑のように送信先 URL をいれると次のような JSON が飛んでくる

{

"token": "Jhj5dZrVaK7ZwHHjRyZWjbDl",
"challenge": "3eZbrw1aBm2rZgRNFdxV2595E9CY3gmdALWMmHkvFXO7tYXAYM8P",
"type": "url_verification"
}

typeurl_verification となっている

このときに challenge をそのまま送り返すと verification が完了するという仕組み


イベントの subscribe

同じく Event Subscriptions ページにどのイベントを送るかを指定する欄がある

そこに次を指定する


  • channel_archive

  • channels_read

  • channel_deleted

  • channel_rename

  • channel_unarchive

記事公開時点でチャンネルに関して指定できるイベントは↑で全部

events.png


permission の scope を設定する

OAuth & Permissions の Scopes で設定する

チャンネル関係で必要になる scope は channels:read のみ

メッセージを post したいので incoming-webhook も指定する

scope.png


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 を使って実装してみた

https://github.com/januswel/slack-channel-notifier

sls deploy して次の環境変数を設定すれば使えるようになる


  • SLACK_OAUTH_TOKEN

  • SLACK_INCOMING_WEBHOOK


注意点

Slack App で Incoming Webhook を使う場合、 Slack App のアイコンと名前が使われる

この場合 Incoming Webhook ではアイコンと名前を指定できない