Slack
Botkit

SlackのBotkitでファイルをアップロードする方法

More than 1 year has passed since last update.


概要

Botkitで作成したSlackのBotからローカルにあるファイルをアップロードする方法です。


環境

$ sw_vers

ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1108
$ npm -v
3.10.9
$ node -v
v7.2.0


ファイルのアップロード

Botに対して「ファイルちょうだい」と言うと特定のファイル(ここではhoge.txt)をアップロードしてもらうようにします。

Slack APIのfiles.uploadを使います。

https://api.slack.com/methods/files.upload


index.js

const Botkit = require('botkit');

const fs = require('fs');

if (!process.env.token) {
console.log('Error: Specify token in environment');
process.exit(1);
}

const controller = Botkit.slackbot({
debug: false
});

controller.spawn({
token: process.env.token
}).startRTM(function(err){
if (err) {
throw new Error(err);
}
});

controller.hears('ファイルちょうだい',['direct_message','direct_mention','mention'],function(bot,message) {
const messageObj = {
file: fs.createReadStream('./hoge.txt'),
filename: 'hoge.txt',
title: 'hoge.txt',
channels: message.channel
};

bot.api.files.upload(messageObj, function(err, res){
if(err){
console.log(err);
}
});

});


messageObj.channelsは任意ですが、指定しないとアップロードしたことを発言してくれないのでダウンロードはもちろん、アップロードされたことすら気づきません。

結果はこんな感じです。

file-upload.png


修正メモ (2016/11/29)

コメント欄で教えていただき、fs.createReadStreamを使うことによりBotkit v0.4.2で画像ファイルも正常にアップロードができることを確認。