先日書いたSlack Bot を作るでは、単純なオウム返しする Slack bot を作りました。
今回はそれを拡張してファイルアップロードする Slack bot を作成します。
目次
参考
権限設定
ファイルをアップロードするにあたって、bot に対して権限を追加する必要があります。
Slack Bot を作るにて chat bot としての設定を行った後に、
以下の通り設定を追加します。
「OAuth & Permissions」を開く
「Add an OAuth Scope」を押し、権限を選択する。
「files:write:user」を追加する。
権限を変更すると、アプリの再インストールが要求されるので、再度インストールします。
「あなたに代わりファイルをアップロード、編集、削除する」となっているのを確認します。
権限変更に関する処理はここまでです。
準備
今回ファイルのアップロードを行うにあたって、アップロード用のファイル upload.txt を用意します。
1 | アップロードするファイル |
こちらを用意した、ディレクトリは以下の通りになります。
1 | . |
実装
slackbots にはファイルアップロードの機能が用意されていないようだったので今回は断念。
@slack/web-api と”@slack/rtm-api を使うパターンのみ紹介します。
実装
1 | const { createReadStream } = require("fs"); |
確認
以下のコマンドで bot のプログラムを起動する。
1 | node use_direct_api.js |
upload
と送ると、slack bot がファイルをアップロードしてくるようになります。
画像を見るとわかるのですが、ただのメッセージを送ってくる testapp とファイルを送ってくる testapp は異なります。
詳細を調べるとわかることですが、ただのメッセージでは、subtype: ‘bot_message’という値を持っています。しかし、ファイルをアップロードするメッセージでは、subtype: ‘bot_message’を持ちません。
bot からのメッセージなのか判断ができません。
subtype: ‘bot_message’を持たない結果、ファイルを送信したメッセージに、自分でオウム返ししてしまうので以下のように処理します。
1 | if ( |
event.files != undefined
に合致する。すなわち、ファイルを持っている場合は、反応しないようしました。
この点については、アプリケーションのインストールで、
「あなたに代わりファイルをアップロード、編集、削除する」となっているのが理由と推察しました。
今回は、slack bot にファイルのアップロードをさせました。
事前に保管したファイルをアップロードしましたが、例えば「カメラを接続した Raspberry Pi を用意して、メッセージを送ると写真を返す。」ということができそうです。
ではでは。