Redash公式Slack botがdeprecatedになっていたので乗り換えた件
結論
Redash公式のSlack botが2021/6/1にdeprecatedになりました。
今後は@YAMITZKYさんのOSSを使いましょう。
事の顛末
今年3月頃にOSS版のRedashを公式AMIを使ってEC2にホスティングしました。
Slack連携しようとドキュメント通りにSlack botをワークスペースに追加してみましたが、設定が進まない。(ここに書かれているのと同じ状況)
色々調べてみましたがよく分からず一旦諦めました。
そして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.
代替プロジェクトを使ってみる
公式から次のバージョンのbotが出るのはだいぶ先になりそうな雰囲気なので、上記アナウンスでも紹介されている@YAMITZKYさんのOSSを使ってみることにしました。
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.
(めちゃめちゃカッコいい)
詳細はこちら
1. Slack appを作成
以下ドキュメントに従ってSlack 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.
認証が上手くいくと"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のスクリーンショットを取得するコマンドも打ってみましょう。
こんな感じでスクリーンショットが取得できればOKです。
4. どこかしらにデプロイ
ローカルでの動作確認ができたら、お好きな環境にデプロイして使いましょう。
Dockerイメージが用意されてるのでそれを使うのが手っ取り早そう。
未テストのようですが、HerokuへのデプロイリンクやServerless Frameworkのコンフィグファイルも用意されてます。
Discussion
有益な記事をありがとうございます。
必要なscopeについて、スクリーンショットを投稿する場合には
files:write
も必要なようです。ご指摘ありがとうございます!
本文内に追記しました!