Slack app 関連情報まとめ
What's this?
Quden の Slack app を作成するにあたって調査したことをまとめています。
Overview
2022年8月24日現在、Quden の Slack 通知は deprecated な incoming webhooks の機能を利用して実装されている。
現在の方法では、下記のような問題がある。
- ユーザーに slack の設定画面にアクセスしてもらい URL を発行してもらわなければならず手間である
- Quden チャンネルごとに通知する Slack チャンネルを変えようものなら、手間はそのパターンの数だけ増えていく
- 廃止される可能性のある Deprecated な機能は使いたくない
そこで、こちらのドキュメントで推奨されているような方法で Quden の Slack app を作成して、Quden に関する情報更新通知をしたり、あわよくば Quden に関する操作を Slack 側から行うようにしてきたい。issue は下記である。
Quden において、Slack app を用いて実現したコアの機能は以下の通り。
- Quden の情報更新(新規クリップ追加時、コメント追加時など)通知を Slack App を経由して行うように置き換える
- Quden のチャンネルごとに、通知対象かどうかを設定する
これを実現するには以下のような方法がありそう。
- 1:
incoming-webhookを permission scope に持ったシンプルな Slack app を作成する- メリット
- 現在の webhook URL を代替する形になる
- デメリット
- Slack に対するリッチな操作ができない
- メリット
- 2:
incoming-webhookだけでなくchat.postMessageやchannels.readなども permission scope に持たせた Slack app を作成する- メリット
- Quden の web アプリケーションと Slack をリッチに連携できる
- デメリット
- 実装はやや複雑になる
- メリット
結論としては 2 の方法で Slack app を作成していきたい。
実装の概要としては以下のような形になりそう:
- OAuth を利用して Quden の Slack app をインストールしてもらう
- このとき、広めの scope で permission をリクエストする
- OAuth フローに従い、access token を取得する
- 取得した access token を DB 側に記録しておく
- access token は default では無期限で利用できるっぽいので無期限で保持する
- 別途、どの Quden チャンネルの変更通知を Slack チャンネルに通知するかどうかに関する情報を DB に構造化して保持する
- TODO: 要仕様検討
- Quden channel と slack channel の紐付けができていればいいので、Quden の web アプリケーション側から設定できてもよいし、GitHub のように Slack 側からスラッシュコマンドで設定できるようにしてもよい
- おそらく最初は前者の Quden の web アプリケーション側から設定する形になるが、後者の形にも対応できるようなデータ構造にしたい
- 既存の incoming webhook url を呼び出している仕組みを利用しつつ、バックエンドアプリケーションから、slack client を利用して各種処理を行う
Resources
- Slack API | Slack
- Slack API のドキュメントトップページ
- Verifying requests from Slack | Slack
- Slack app 側からリクエストを送った際の検証などについて書かれたドキュメント
- リクエストの中に slack の channel 情報などが含まれている
- Figma