Sassyブログ

好きなことで暮らしを豊かにするブログ

【最新版slackアプリ開発】久しぶりにslackアプリを作った時にslackbotライブラリでは使えなかったのでBoltに移行した

始めに

もう1年半前くらいに作ったSlackアプリを久々に動かしたときに、新しく作ったSlackアプリで動かなかったのでslack-boltで動かすための方法を書き残したいと思います。

以前までは以下のslackbotというPythonのライブラリを使って、ボットへのメンションで返信してれるアプリを実装してました。

github.com

このライブラリではReal Time Messaging APIをベースに実装されております。

しかし、Real Time Messaging APIは最新のSlackアプリのスコープでは使用できなくなっております。

※RTMを使いたい場合はレガシースコープであるbotというスコープを付与することでできるみたいですが、現在でどのように作るかまでは調べられていません。

slack.dev

Note: RTM isn’t available for modern scoped apps anymore. We recommend using the Events API and Web API instead. If you need to use RTM (possibly due to corporate firewall limitations), you can do so by creating a legacy scoped app. If you have an existing RTM app, do not update its scopes as it will be updated to a modern scoped app and stop working with RTM.

出典元:https://slack.dev/node-slack-sdk/rtm-api

そのため最近作成したslackアプリをslackbotで動かすことはできないので、WebSocketを使った実装に切り替えることにしました。

そのためのライブラリとして公式が出しているslack-boltというライブラリを使うこととします。

github.com

slack-boltへの置き換えは問題なくできたのですが、新しく作ったslackアプリ側の設定で参考にしたサイトではSocket ModeやEvent Subscriptionsといった項目が無かったので設定に苦戦しました。

参考にしたサイトは以下です。

Slack Bolt for Pythonを使ってのbot構築。ローカル開発からHerokuデプロイまで - Qiita

Slack | Bolt for Python

初めて作成される方などを対象に設定周りの最新版としてご参考にいただければと思います。

slack-boltでの実装は簡単です。

上記の公式サイトの説明で十分であるため割愛させていただきます。

さてSlackアプリでの設定周りについては少々躓いたので、こちらをメインに説明させていただきます。

slack-boltを使ったアプリは実装済みの前提で以下へお進みください。

Slackアプリの作成と設定手順

まずはアプリの管理画面を開きます。

api.slack.com

Slackアプリを作成します

アプリの管理画面から「Create New App」をクリックします。

f:id:y_saiki:20211104163159p:plain

表示されたモーダルウィンドウで「From scratch」をクリックします。 ※もちろん「From an app manifest」からでも設定は問題なくできますが、ここは「From scratch」ベースで説明していきます

f:id:y_saiki:20211104163202p:plain

アプリ名とアプリを動作させるワークスペースを選択してください。

入力後、「Create App」でアプリを作成します。

f:id:y_saiki:20211104163204p:plain

ImcomingWebhooksを有効化します

アプリ作成後は「ImcomingWebhooks」を有効にします。

左側のメニューから「ImcomingWebhooks」を選択してトグルをクリックして「On」にしてください。

f:id:y_saiki:20211104163209p:plain

そうすると同ページの下側に項目が追加されるので、Webhookを追加するワークスペースを選択します。

f:id:y_saiki:20211104163212p:plain

「ImcomingWebhooks」設定後、Botトークンが発行されるのでこちらを環境変数に設定してslack-boltで実装したアプリから参照できるようにしておく必要があります。

f:id:y_saiki:20211104163216p:plain

WebSocketを有効化します

左側のメニューから「App Manifest」をクリックします。

右側にYAMLで書かれた設定が表示されるので赤枠内の「socket_mode_enabled」を「true」に変更します。

f:id:y_saiki:20211104163219p:plain

変更後、「Save Changes」をクリックして保存してください。

Event Subcriptionsを有効化します

では次にSlackアプリがイベントを受け取れるように機能を有効化します。

ここの設定が中々見つけられず苦戦しました。

slack-boltにはこういうのを設定する必要があるよーという記載があるのですが、その項目がどこにあるのかまでは載っておらず時間を取られました(汗

slack.dev

左側のメニューから「Manage Distribution」をクリックして、開いたページから「Enable Features & Fuctionality」項目をクリックしてください。

f:id:y_saiki:20211104163223p:plain

そして「Event Subscriptions」という項目をクリックしてください。

f:id:y_saiki:20211104163227p:plain

「Enable Events」のトグルをクリックして「On」にしてください。

その後、「Subscribe to bot events」を選択してSlackが受け取れるイベントの設定を行います。

最新のSlackアプリではこういった細かい権限周りの設定が大変ですね。

余り初回は必要最低限に設定して運用しながら必要な権限を検討して追加していくのが良いです。

運用しながら改善していきましょー!

f:id:y_saiki:20211104163229p:plain

とりあえずは app_mention, message.channels を設定しておけば十分です。

f:id:y_saiki:20211104163233p:plain

アプリを起動して動作確認する

ここまで出来たら必要な環境変数を設定し、slack-boltを起動します。

起動後はSlackアプリを追加したチャンネルでアプリ宛にメンションしてメッセージを送信してみましょう!

このようにアプリから返信が返ってくるかと思います。

f:id:y_saiki:20211104163236p:plain

これで動作できたことが確認できたので引き続きSlackアプリ開発に勤しんでください。

最後に

Slackアプリの作成について記事を書いている他のサイトをいくつか拝見させていただいたのですが、自分のメニューだと以下の画像のような感じであるところ。

f:id:y_saiki:20211104163207p:plain

他の方はメニューの項目が多かったりして私のメニューには表示されていないようなケースがあり、どこから設定するのだ?

という感じになりましたが無事動かすところまで出来ました。

以下のSlack公式のサイトでもEvent Subscriptions項目が管理画面左側のメニューにありますね…

api.slack.com

また多くのサイトでは古い情報が多く最新の情報が中々少ない印象でしたので何かの助けになれば幸いです。