Slackには様々な種類のTokenがあり、また複数の種類のAPIがあります。
Tokenに紐付いてBotが作成され、Botの種類によって利用できるAPIが違うので、それぞれは微妙に関わりがあります。
が、その辺りを分かっていないと、Legacy TokenとかClassic BotとかRTM APIとか何がなんだか分からなくなるのでまとめました。
(実際、ネット上でも混同させているような記事を見かけるので)
Tokenの種類
(Bot関係は)主に3つ、Bot、Classic Bot、Legacyがあります。
https://api.slack.com/authentication/token-types
BotとClassic Botは利用できるAPIに違いがあります。
Bot
Events APIを利用する最新のTokenです。様々なきめ細かいスコープ(権限)をコントロールでき、Slackとしてはこの種類のBotを推奨しているようです。
以下から普通に作成・管理することができます。
https://api.slack.com/apps
Classic Bot
RTM APIを利用するTokenです。以下のリンクで管理することはできるのですが、その画面からは作ることができないので、探すことになります。
作成する場合は以下のリンク。
https://api.slack.com/apps?new_classic_app=1
または次のページなどから辿ることができます。
https://api.slack.com/authentication/basics#soon
https://api.slack.com/rtm#classic
Legacy
既に2020/5/5をもって新規作成は行えなくなっており、既存のものを利用し続けるしかできません。
もしこの種類のTokenを使っている場合、Bot, Classic BotのTokenのどちらかへ切り替えることを検討したほうが良いでしょう。
もはや当時のことを覚えていませんが、以下を見ると、Legacy Tokenというだけで様々な権限がbotに付与され、あまり細かい権限をコントロールできないようです。(だからこそ廃止されたのでしょうけれども)
https://api.slack.com/legacy/custom-integrations/legacy-tokens
APIの種類
Events API or RTM API
どちらのAPIかで、使える種類が微妙に違います。
どちらを利用すればよいかは以下に指針があります。
詳細は上記をご覧いただくとして、大まかな選び方は以下です。
- Events API
- きめ細やかな権限管理を行いたい
- Botをスケールアウトしたい(スケールアウトできる)
- 外部にURLを晒すことが可能 (websocketを使うよりも)
- リアルタイムの応答が不要
- RTM API
- 外部にURLを晒せない
- リアルタイムにデータ(メッセージ)を受け取りたい
※ 以下でもまとめています。
Slack上で動くChatbotを実現するためのアーキテクチャを考える
結局どのBotが良いのか(悪いのか)
Bot(with Events API)かClassic Bot(with RTM API)かは、Botの環境や実現したいことによるので、一概にどちらが良いとは言えないと思います。
特にURLを外部に晒す、Websocketと相性が悪いなど、環境的な要因によっていずれかを選ばなければならないことが多いように思います。
とりあえず現時点では、Legacy Tokenを利用しているBotはまずい、BotとClassic Botはどちらでもいい、という程度でしょうか。
Classic Botも、"Classic"だからといって、今後Deprecatedになると辛いなぁ…と思っています(現時点でそのようなアナウンスはありませんが)。