動かざることバグの如し

近づきたいよ 君の理想に

【Slack】botkitを使ってSlack Commandを作成する

そもそもSlack Commandってなんだ

/から始まるアレ

/remind me コンビニに寄る in 3 hours

上のはリマインダー よく使う

つくるもの

今回はこんな便利な機能であるスラッシュコマンドをbotkit自作しようと言う話

面倒なので /hello って打ったらこんにちは!って返すbotを作る

用意するもの

  • botAPIキー
    • xoxb-から始まるやつ これがないと始まらない
  • HTTPサーバー
    • Slack CommandはHTTPサーバー経由が必須とのこと
    • 他Slackチームでも使ってもらうならhttps必須になるっぽい
  • botkitが動かせる環境

Slack側の設定

まずhttps://my.slack.com/services/new/botにアクセスしてSlack Commandを作成する

  • コマンド:任意 今回は/hello
  • URL :http://HOST_NAME/slack/receive httpsである必要はない
  • Autocomplete help textを設定しておくと吉

インストール

mkdir slack-hello
cd slack-hello
npm init
npm install -S botkit

適当に bot.jsでも作って以下

var Botkit = require('botkit');

if (!process.env.token) {
  console.log('Error: Required Token');
  process.exit(1);
}

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

var bot = controller.spawn({
  token: process.env.token
}).startRTM();

// Webサーバー(express)起動
controller.setupWebserver(process.env.port, function(err, webserver) {
  controller.createWebhookEndpoints(controller.webserver);
});

controller.on('slash_command', function(bot, message) {
  if ('/hello' === message.command) {
    bot.replyPublic(message, 'Hello!');
  }
});

起動

token=**** port=3000 node bot.js

これで挨拶を返してくれるはずである

蛇足

返信の方法は2種類ある

だれにでも見られるreplyPublic

bot.replyPublic(message, 'Hello!');

コマンドを実行した人にしか見れないreplyPrivate

bot.replyPrivate(message, 'Hello!');