💨

Redash公式Slack botがdeprecatedになっていたので乗り換えた件

2021/08/07に公開
2

結論

Redash公式のSlack botが2021/6/1にdeprecatedになりました。
今後は@YAMITZKYさんのOSSを使いましょう。
https://github.com/yamitzky/redashbot

事の顛末

今年3月頃にOSS版のRedashを公式AMIを使ってEC2にホスティングしました。
Slack連携しようとドキュメント通りにSlack botをワークスペースに追加してみましたが、設定が進まない。(ここに書かれているのと同じ状況)
https://discuss.redash.io/t/how-to-configure-redash-bot-in-slack/5880

色々調べてみましたがよく分からず一旦諦めました。

そして6/5に「もう一回チャレンジしてみるか〜」と調べてみたら「公式Slack botはDeprecatedになったよ!」というコメントが5/29に投稿されているのを発見。
ちょっと前から「botの調子が悪い」的なTweetがされていたのでメンテに限界が来た感じでしょうか。

The official Redash Slack bot is a piece of legacy software that requires significant refactoring to use newer Slack APIs which will improve its operation and make it more extendable. In the four years since its inception, the current bot has functioned as-designed. But it depends on deprecated APIs which now make it impossible to add the bot to new workspaces. It’s time to sunset it and write a replacement.

Starting today, we removed the “Add to Workspace” button from redash.io. We will disable the bot entirely on 1 July 2021. It’s possible you can use yamitzky/redashbot as an interim solution until we introduce a replacement, although we haven’t tested it yet.

Going forward, we invite you to collaborate with us on building this functionality into Redash rather than hosting it as a separate service. By incorporating the bot directly into our open source codebase we hope it can benefit from ongoing support and community contributions, as well as solve issues around networking and firewalls with the current bot.

https://discuss.redash.io/t/how-to-configure-redash-bot-in-slack/5880/6

代替プロジェクトを使ってみる

公式から次のバージョンのbotが出るのはだいぶ先になりそうな雰囲気なので、上記アナウンスでも紹介されている@YAMITZKYさんのOSSを使ってみることにしました。
https://github.com/yamitzky/redashbot

This project was forked from hakobera/redashbot, but it is not maintained anymore. I have rewritten almost all of the code and published as v2.

(めちゃめちゃカッコいい)

詳細はこちら
https://yamitzky.hatenablog.com/entry/2020/09/03/112036

1. Slack appを作成

以下ドキュメントに従ってSlack appを作成します。
https://slack.dev/bolt-js/tutorial/getting-started#create-an-app

"create a Slack app"をクリック

"From scratch"を選択

"App Name"を入力し、Slack appを導入したいワークスペースを選択、"Create App"をクリック

2. Bot Tokenを取得

Slack appにはUser TokenとBot Tokenがありますが今回はBot Tokenを使います。

User tokens allow you to call API methods on behalf of users after they install or authenticate the app.

Bot tokens are associated with bot users, and are only granted once in a workspace where someone installs the app.

"OAuth & Permissions -> Bot Token Scopes"と進み、"Add an OAuth Scope"をクリック。
以下の項目を追加しましょう。

  • chat:write
  • files:write(追記: スクリーンショットを投稿する場合はこれも必要)

次にページ上部の"Install App to Workspace"をクリックし、ワークスペースへの追加を許可すると、Bot User OAuth Tokenが発行されます。


3. ローカルで動かしてみる

まずは先程のプロジェクトをcloneしましょう。

git clone git@github.com:yamitzky/redashbot.git

パッケージをインストールし、必要な環境変数を設定して起動

npm install
export REDASH_HOST=<https://your-redash-server.example.com>
export REDASH_API_KEY=<your-redash-api-key>
export SLACK_BOT_TOKEN=<your-slack-bot-token>
export SLACK_SIGNING_SECRET=<your-slack-bot-signing-secret>
npm start

起動すると以下の表示がでます。

⚡️ Bolt app is running @ 3000!

localhostの3000番ポートでリクエストを待ち受けているのでそこにリクエストを送ると応答してくれます。
ngrokを使って開発用に一時的にlocalhostの特定のポートを外部公開します。
https://xxxxxxxxxxx.ngrok.ioのようなURLが発行されるのでこれを使います。

ngrok http 3000

ngrok by @inconshreveable                                                                (Ctrl+C to quit)
Session Status                online                                                     
Session Expires               1 hour, 51 minutes                                                         
Update                        update available (version 2.3.40, Ctrl-U to update)                        
Version                       2.3.35                                                                     
Region                        United States (us)                                                         
Web Interface                 http://127.0.0.1:4040                                                      
Forwarding                    http://xxxxxxxxxxx.ngrok.io -> http://localhost:3000                      
Forwarding                    https://xxxxxxxxxxx.ngrok.io -> http://localhost:3000                     
                                                                                                         
Connections                   ttl     opn     rt1     rt5     p50     p90                                
                              0       0       0.00    0.00    0.00    0.00 

Slack appの設定画面に戻り"Event Subscriptions" -> "Enable Events"をONに。
Request URLの部分に先程発行されたngrokのURLを入れ、末尾に/slack/eventsを追加します。
これはSlack公式のSlack app開発フレームワークであるBoltの決まりごとみたいな感じです。

⚙️Bolt uses the /slack/events endpoint to listen to all incoming requests (whether shortcuts, events, or interactivity payloads). When configuring endpoints within your app configuration, you’ll append /slack/events to all request URLs.

https://slack.dev/bolt-js/tutorial/getting-started#setting-up-events

認証が上手くいくと"Verified"という表示になります。

次に"Event Subscriptions" -> "Subscribe to bot events" -> "Add Bot User Event"から必要に応じて以下の項目を追加しましょう。
どのチャンネルでの発言に反応してほしいかによって設定内容が異なります。全てのチャンネルでの発言に対してBotに反応してほしければ4つ全て追加しておきましょう。

  • message.channels(パブリックチャンネルでの発言)
  • message.groups(プライベートチャンネルでの発言)
  • message.im(ダイレクトメッセージでの発言)
  • message.mpim(グループダイレクトメッセージでの発言)

ここまでくればSlack appが動くようになっています。
Redash botを動かしたいチャンネルで/invite @Redashを実行し、アプリをチャンネルに追加します。
その後@Redash helpと打って応答が返ってくるか確認してみます。
Sorry, I cannot help you.と返ってくれば成功です。

後はドキュメントにある通り、RedashのQueryの結果やDashboardのスクリーンショットを取得するコマンドも打ってみましょう。
https://github.com/yamitzky/redashbot#usage

こんな感じでスクリーンショットが取得できればOKです。

4. どこかしらにデプロイ

ローカルでの動作確認ができたら、お好きな環境にデプロイして使いましょう。
Dockerイメージが用意されてるのでそれを使うのが手っ取り早そう。
未テストのようですが、HerokuへのデプロイリンクやServerless Frameworkのコンフィグファイルも用意されてます。

Discussion

Shinsuke KatsumataShinsuke Katsumata

有益な記事をありがとうございます。
必要なscopeについて、スクリーンショットを投稿する場合にはfiles:writeも必要なようです。

naohisanaohisa

ご指摘ありがとうございます!
本文内に追記しました!