クリプト

Slack用ボットを作る

handa's icon'
  • handa
  • 2020/08/31 09:46

1. はじめに

本稿では、pythonのイベント「PyCon 2020」におけるセミナー「チュートリアル Slack Bot編」をやった過程、結果を示す。Slackで主要通貨ビューアを実行し、各取引所での主要な仮想通貨の価額を表示する。

チュートリアルの内容はよくまとまっていて大変すばらしいものだが(私でもできたのだから!)、一部記載ミスがあるのと、記載通りにやるだけではBotを動かすことができないため、私および読者の今後のために情報を追加する。

本稿を記載したのは2020年8月31日である。SlackのWebサイトの更新により、情報が古くなり本稿通りにしてもうまく動かなくなることがありうる。

 

本稿を書くために参照したWebページを以下に示す。

PyCon 2020 チュートリアル Slack Bot編

SlackBotがインストール出来なくなった!?原因と対応方法を解説!

SlackAPIを使うまでのメモ

主要仮想通貨ビューア

 

2. 準備その1 - pythonとWebサービス -

これからやることは、次の通りである。

●ローカル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

Content image
この図の「https://822e91c3c180.ngrok.io」を控える。82...はランダムな文字列である。

なお、ngrokが作るWebサービスのURLは、ユーザ認証(有償)しない限り起動するたびに変化する。つまり、URLが毎回変更されてはSlackとの連携が取れないので、実用的ではない。ngrokを実務で使うためには、ユーザ登録をしなければならない。

 

3. 準備その2 - Slackの設定 -

まず、Botアプリを登録するワークスペースを選ぶ。既存のものでもいいし、新規に作ってもいい。

Content image
Slackのワークスペース

本稿では、ワークスペースは既存の「裏日本ブロックチェーン団」とする。裏日本ブロックチェーン団は筆者が主任を務めるグループであるが、活動は停止中である...。

Slackサイトをブラウザで開き、自分のアカウントでサインインした後、APIサイトを開く。

APIサイトを開いたら、「Start Building」ボタンを押す。

Content image
Start Building

Create a Slack Appというダイアログが表示されるので、アプリ名とワークスペースを入力する。アプリ名はmccvbot、ワークスペースは裏日本ブロックチェーン団とする。

Content image
Create a Slack App

入力したら、Create Appボタンを押す。するとアプリmccvbotの設定画面に遷移する。この画面の左側がメニューになっており、各種設定を行う。アプリの本体はpythonプログラムであり、これから設定するのはWebサービスとアプリを連携させるための情報である。

Content image
アプリの各種設定画面

 

■App Home

メニューからApp Homeを選択する。開いた画面で、Review Scopes to Addボタンを押す。

Content image
Review Scopes to Add

すると、OAuth & Permissionに遷移する。

 

■OAuth & Permission

開いた画面で、ScopesのBot Token Scopesの設定をする。

Content image

以下のスコープを追加する。

Content image
Bot Token Scopes

画面の上に戻り、Install App to Workspaceボタンを押す。

Content image
Install App to Workspace

画面が変わるので、許可するボタンを押す。

Content image
許可する

表示されるBot User OAuth Access Tokenをエディタ等に控える。

Content image

 

■Basic Information

App Credentialsにある「Signing Secret」の値をShowボタンで表示させ、エディタ等に控える。これで控えた値は3つとなった。

Content image
Signing Secret

ここで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の場合環境変数設定ダイアログによる設定でもかまわない。

Content image
Windowsの環境変数設定ダイアログ

 

4. ソースコード

だいぶ長いが、8つの取引所から六つの仮想通貨の値を取り出しているためであり、1つ1つはたいしたことはない。2つの環境変数を参照していることに留意する。

 

5. pythonプログラムの実行

2つの環境変数設定をすませたうえで、Botプログラムを実行する。

> python mccvbot.py

Content image
環境変数の設定とプログラムの実行

 

6. Webサービスと業務ロジックの連携

Webサービス=ngrok

業務ロジック=mccvbot.py

 

Slackサービスに、ngrokで作成したURLを指定する。Slackの設定に戻る。

 

■Event Subscriptions

Event Subscriptionsを開く。Enable EventsがOffになっているので、Onにする。

Content image

OnにするとURLを入力する欄が現れるので、「控えておいたURL/slack/events」を入力する。

Content image
Verify Request URL

pythonプログラムの実行ログを見ると、アクセスされたことがわかる。逆に言うと、pythonプログラムを実行中でないとEnable Eventsの設定ができない。

Content image
pythonプログラムのアクセスログ

次に、Subscribe to bot eventsにmessage.channelsとmessage.imを追加する。Add Bot User Eventボタンを押し、一覧の中からそれを選択する。

Content image
Subscribe to bot events

 

■Install App

message.channels、message.imの追加でアプリのReinstallが走ればよし、走らなければ、手動でReinstallを行う。

Content image
Reinstall App
Content image
許可する

 

7. SlackクライアントにBotを登録

SlackクライアントのAppを開くと、今回作ったmccvbotが見える。

Content image
App

 

mccvbotを選択すると、ボットと会話ができるようになる。

Content image
mccvbotの登録

 

8. 実行結果

会話をしてみる。「alisについて教えて」と言ってみる。pythonプログラムは、こちらからのメッセージに「alis」が含まれていると情報を返すようになっている。

Content image
実行結果

表示された。

 

9. 課題

「alisについて教えて」と言わなくてもたまに実行されてしまう問題が残った。イベントについてよく理解していないので、イベント処理にバグがあるか、余計なスコープが登録されていると思われる。バグの修正は、またいずれ....。

 

以上

 

 

Supporter profile iconSupporter profile iconSupporter profile iconSupporter profile iconSupporter profile icon
Article tip 5人がサポートしています
獲得ALIS: Article like 37.31 ALIS Article tip 9.50 ALIS
handa's icon'
  • handa
  • @handa
コンピュータシステムの開発、子供向けプログラミング教室などを行っています。

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

Polygon(Matic)で、よく使うサイト(DeFi,Dapps)をまとめてみた

Like token Tip token
235.30 ALIS
Eye catch
クリプト

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

Like token Tip token
38.31 ALIS
Eye catch
クリプト

スーパーコンピュータ「京」でマイニングしたら

Like token Tip token
1.06k ALIS
Eye catch
クリプト

クリプトスペルズで入手したMCHCを引き出す方法

Like token Tip token
196.20 ALIS
Eye catch
クリプト

Eth2.0のステークによるDeFiへの影響を考える。

Like token Tip token
43.10 ALIS
Eye catch
クリプト

【DeFi】複利でトークンを運用してくれるサイト

Like token Tip token
54.01 ALIS
Eye catch
クリプト

UNISWAPでALISをETHに交換してみた

Like token Tip token
39.40 ALIS
Eye catch
クリプト

ブロックチェーンの51%攻撃ってなに

Like token Tip token
0.00 ALIS
Eye catch
クリプト

コインチェックに上場が決まったEnjin Coin(エンジンコイン)コインを解説

Like token Tip token
21.49 ALIS
Eye catch
クリプト

バイナンスの信用取引(マージン取引)を徹底解説~アカウントの開設方法から証拠金計算例まで~

Like token Tip token
3.50 ALIS
Eye catch
クリプト

2021年1月以降バイナンスに上場した銘柄を140文字以内でざっくりレビュー(Twitter向け情報まとめ)

Like token Tip token
38.10 ALIS
Eye catch
クリプト

【初心者向け】JPYCを購入して使ってみました!

Like token Tip token
30.03 ALIS