SlackはRTMをサポートしなくなるようです


Slack は RTM をサポートしなくなるようです

先日、slackbotでを新しくBotを作成しようとした際に

動かず困ったので調べてみたところ、SlackはRTMのサポートを終了する ということが判明しました。

現状の回避策と、詳細をまとめてみることにします。

slackbotを使ったBotの作成

GitHub - slackbot

pipパッケージで、簡単に使えるBotフレームワークです。

利用している人も多く見かけます。

Based on slack Real Time Messaging API

slackbot はRTM APIを利用してBotを比較的簡単に実装できるように作られています。

新しく作成したApp Tokenでは、どうやらslackbotが動かないぞ

新しくSlack Botを作成しようとして、環境を構築しましたが

slacker.Error: missing_scope

👆のエラーで異変に気付きました。

Scope を修正してみた

Slack API - Your Apps から、該当のAppを選択し

OAuth & Permissions の項目から Scope を確認しました。

以前は、Scopesを定義しなくても Bot Token を利用することで

自動的にBot向けのScopeが内部で承認されていました。

しかし、必要なScopeを追加してもエラーは発生し続けました。

余談

slackbot側を調べてみました。

def start(self, simple_latest=False, no_unreads=False, mpim_aware=False):
    return self.get('rtm.start',
                    params={
                        'simple_latest': int(simple_latest),
                        'no_unreads': int(no_unreads),
                        'mpim_aware': int(mpim_aware),
                    })

Pythonのエラーメッセージから、👆の関数でエラーとなっている事がわかります。

Slackの公式ドキュメントを読んでみる

Slack - Real Time Messaging API

RTMに関することは、👆に書いてあるようです。

読む前に、目立つセクションがありました。

New Slack apps may not use any Real Time Messaging API method.
Create a classic app and use the V1 Oauth flow to use RTM.

要約すると

  • 新しいAppはRTMを利用できない
  • RTMを使いたいんだったら Classic app を使ってね

ということです。

Classic app の作成

Classic app の作成は、Slack - Real Time Messaging API の最下部のリンクから行えます。

Create a Classic Slack App

Appを作成したら、 Legacy bot user を追加する必要があります。

Classic app の Scopesを見てみましょう

bot の OAuth Scopeが deprecated となっていることがわかります。

スコープのアップデートには要注意

Slack API - Your Apps

App Home へアクセスすると、 Tools セクションに Update to Granular Scopes というのが存在します。

つまりは、Slackは 以前のBot向けスコープから

より細かいスコープへ移行することを推薦しています。

しかし、移行しようとすると下記メッセージが表示されます。

The RTM API is not accessible to updated Bot Tokens.
If your app requires RTM functionality, please exit this update and continue using your existing scopes.

移行すると、RTM APIは利用できなくなります。

Classic app のサポートは、明示的に期間が定められている訳ではなさそうですが

今後RTMを利用したSlack Botの作成は、別の手段へ移行する必要がありそうです。