本稿では、pythonのイベント「PyCon 2020」におけるセミナー「チュートリアル Slack Bot編」をやった過程、結果を示す。Slackで主要通貨ビューアを実行し、各取引所での主要な仮想通貨の価額を表示する。
チュートリアルの内容はよくまとまっていて大変すばらしいものだが(私でもできたのだから!)、一部記載ミスがあるのと、記載通りにやるだけではBotを動かすことができないため、私および読者の今後のために情報を追加する。
本稿を記載したのは2020年8月31日である。SlackのWebサイトの更新により、情報が古くなり本稿通りにしてもうまく動かなくなることがありうる。
本稿を書くために参照したWebページを以下に示す。
PyCon 2020 チュートリアル Slack Bot編
SlackBotがインストール出来なくなった!?原因と対応方法を解説!
SlackAPIを使うまでのメモ
主要仮想通貨ビューア
これからやることは、次の通りである。
●ローカルPCにngrokによるWebサービスを起動し、Slackサービスに当該WebサービスのURLを登録する。
●pythonプログラムでは、Flaskによりngrokで作ったWebサービスと業務ロジックを連携させ、Slackにメッセージを送信する。
まず、pythonプログラムを動かすために必要なパッケージをインストールする。チュートリアルでは、仮想環境を使用している。requirements.txtおよびdev_requirements.txtについてはチュートリアルページからダウンロードすること。
> pip install -r requirements.txt
> pip install -r dev_requirements.txt
ngrokを入手し、起動する。ngrokは以下からダウンロードする。
ngrokを以下のように起動する。起動したときに表示されるURLは、後でSlack側の設定で入力する必要があるので、エディタ等に控えておく。
> ngrok http 3000
なお、ngrokが作るWebサービスのURLは、ユーザ認証(有償)しない限り起動するたびに変化する。つまり、URLが毎回変更されてはSlackとの連携が取れないので、実用的ではない。ngrokを実務で使うためには、ユーザ登録をしなければならない。
まず、Botアプリを登録するワークスペースを選ぶ。既存のものでもいいし、新規に作ってもいい。
本稿では、ワークスペースは既存の「裏日本ブロックチェーン団」とする。裏日本ブロックチェーン団は筆者が主任を務めるグループであるが、活動は停止中である...。
Slackサイトをブラウザで開き、自分のアカウントでサインインした後、APIサイトを開く。
APIサイトを開いたら、「Start Building」ボタンを押す。
Create a Slack Appというダイアログが表示されるので、アプリ名とワークスペースを入力する。アプリ名はmccvbot、ワークスペースは裏日本ブロックチェーン団とする。
入力したら、Create Appボタンを押す。するとアプリmccvbotの設定画面に遷移する。この画面の左側がメニューになっており、各種設定を行う。アプリの本体はpythonプログラムであり、これから設定するのはWebサービスとアプリを連携させるための情報である。
メニューからApp Homeを選択する。開いた画面で、Review Scopes to Addボタンを押す。
すると、OAuth & Permissionに遷移する。
開いた画面で、ScopesのBot Token Scopesの設定をする。
以下のスコープを追加する。
画面の上に戻り、Install App to Workspaceボタンを押す。
画面が変わるので、許可するボタンを押す。
表示されるBot User OAuth Access Tokenをエディタ等に控える。
App Credentialsにある「Signing Secret」の値をShowボタンで表示させ、エディタ等に控える。これで控えた値は3つとなった。
ここでSlack側の設定から一旦離れる。
さて、控えた値を環境変数に登録するバッチを作成する。環境変数SLACK_BOT_TOKENにはBot User OAuth Access Tokenの値を、環境変数SLACK_SIGNING_SECRETにはSigning Secretの値を設定する。
setmccvenv.bat
rem Bot User OAuth Access Token
set SLACK_BOT_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
rem Signing Secret
set SLACK_SIGNING_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ngrokとは別のターミナルを開き、setmccvenv.batを実行する(環境変数を設定する)。環境変数の設定はバッチでなくてよく、Windowsの場合環境変数設定ダイアログによる設定でもかまわない。
だいぶ長いが、8つの取引所から六つの仮想通貨の値を取り出しているためであり、1つ1つはたいしたことはない。2つの環境変数を参照していることに留意する。
2つの環境変数設定をすませたうえで、Botプログラムを実行する。
> python mccvbot.py
Webサービス=ngrok
業務ロジック=mccvbot.py
Slackサービスに、ngrokで作成したURLを指定する。Slackの設定に戻る。
Event Subscriptionsを開く。Enable EventsがOffになっているので、Onにする。
OnにするとURLを入力する欄が現れるので、「控えておいたURL/slack/events」を入力する。
pythonプログラムの実行ログを見ると、アクセスされたことがわかる。逆に言うと、pythonプログラムを実行中でないとEnable Eventsの設定ができない。
次に、Subscribe to bot eventsにmessage.channelsとmessage.imを追加する。Add Bot User Eventボタンを押し、一覧の中からそれを選択する。
message.channels、message.imの追加でアプリのReinstallが走ればよし、走らなければ、手動でReinstallを行う。
SlackクライアントのAppを開くと、今回作ったmccvbotが見える。
mccvbotを選択すると、ボットと会話ができるようになる。
会話をしてみる。「alisについて教えて」と言ってみる。pythonプログラムは、こちらからのメッセージに「alis」が含まれていると情報を返すようになっている。
表示された。
「alisについて教えて」と言わなくてもたまに実行されてしまう問題が残った。イベントについてよく理解していないので、イベント処理にバグがあるか、余計なスコープが登録されていると思われる。バグの修正は、またいずれ....。
以上