Topotal では Waroom(ワルーム) という SaaS を作っており、Waroom は Slack App を使った機能が数多くあるため Slack App の実装をする上での知見がだいぶ溜まってきました。中でも予想外だった Slack Workspace の権限周りからおこる問題について共有したいと思います。これから Slack App を開発したいという方に届くと嬉しいです。
前提: Slack App の種類
Slack App は2つの種類に大きく分けられます。
- A: Bot Token を用いて認証を行う Slack App
- B: User Token を用いて認証を行う Slack App
一般的にBotを使った Slack App の開発をしたい場合は A の Bot Token を用いて認証を行う形式になります。Waroom のような SaaS としてボットを作成し、ユーザーと対話させたり、自動化されたタスクを実行させたい場合はこちらのタイプになります。B の User Token を用いるパターンに関しては後ほど説明します。
Bot Token が持つ権限範囲により発生した課題
Bot Token の Slack App は Bot としての権限に絞られており、実はあまり強い権限を持ち合わせていません。そのため当初 Bot Token のみで開発していた Waroom では以下のような問題が発生しました。
- Slack チャンネルの作成権限が一部のユーザーに絞られると Slack App からチャンネルを作成できない
- Bot によるマルチチャンネルゲストのチャンネルへの招待ができない
1. Slack チャンネルの作成権限が絞られると Slack App からチャンネルを作成できない
Waroom ではインシデントが作成されると Bot によって「インシデント対応専用 Slack チャンネル」が自動的に作成する機能があります。ただ、Slack Workspace の設定で「Create public channels」の権限が一部のアカウントに絞られたものになっていると Bot がチャンネルを作成できなくなるということがわかりました。
2. Bot によるマルチチャンネルゲストのチャンネルへの招待ができない
ゲストをパブリックチャンネルに招待できるのはワークスペースオーナーまたは管理者に制限されています。そのため Bot が持つ権限では招待できません。Waroom では作成された対応チャンネルに自動的に対応チームを招待する機能があるのですが、マルチチャンネルゲストとなっているメンバーが招待できないというお問い合わせをいただいたことがありました。
解決方法: User Token 版 Slack App の提供をする
ここで先程説明にでてきた B の User Token を用いた Slack App が活躍します。Bot Token の Slack App との大きな違いは Slack App をインストールした User アカウントの Token を用いるため、その User の権限で Slack App が API を実行することができます。
先の2点の問題に遭遇されてしまったお客様に対しては、権限の強い User アカウントから User Token 版の Slack App をインストールしていただくことで解決しました。
ちなみに他の方法は無いのか Slack に直接問い合わせたところ、設定を変える以外だとこの方法しかないと回答もいただいているので他に手はなさそうです。
User Token 版の Slack App を提供する上での注意点
ただ、この方法で Slack App を提供する場合は以下の点について注意が必要です。
1. Slack App からのメッセージの投稿元が Token に紐づいた User から来たように見える
先ほど説明した通り User Token 版はインストールをしたUserアカウントに紐づいた Token で Slack API を実行することになります。例えば postMessage API を実行すると、そのユーザーから送られたような見た目になります。また、該当のユーザーは自分が送信したメッセージとして扱われるためそのメッセージの投稿の通知に気づくこともできません。
以下は Owner という名前のアカウントで User Slack 版のインストールをした場合の例です。インシデント作成の通知が Waroom Bot ではなく Owner アカウントから通知されています。
解決策
解決策としては、Slack App 用に新しく Slack アカウントを一つ新設してもらいそのアカウントでインストールをしてもらう方法があります。そうすることで通知もすべての人に届くようになり、見た目の問題から混乱をうむこともありません。ただし、1アカウント分の Slack での課金が発生してしまうため、お客様に提供する場合はアカウントの新設を許容いただけるか確認する必要があります。
2. 実装面での複雑さが増す
Bot Token と User Token とで持つ Token の種類も異なれば、持ち合わせている Scope も異なります。一つの機能を開発するうえで両 Slack App の機能が正しく動作するかの QA を行う必要もありますし、コード上には分岐がふえるので慎重に行いましょう。
まとめ
今回紹介したケースを想定していないと実際に実装したときに予想以上の工数がかかってしまったり、インシデントを引き起こしたりしかねません。 もし周りに Slack App をつかった SaaS を提供しようとしている人がいましたら是非紹介してあげてください。
最後に宣伝
インシデント発生時に Slack から離れること無く、効率よく対応するための SaaS、 Waroom(ワルーム) を提供しています。AI を用いて Slack の情報から自動的にインシデント概要をまとめる機能や、ポストモーテムを生成する機能など Slack を用いた機能が盛り沢山なので是非お試しください。 waroom.com
カジュアル面談も募集しています!ゆるくお話しましょう! youtrust.jp