読者です 読者をやめる 読者になる 読者になる

まちいろエンジニアブログ

南池袋のWebサービス開発会社、株式会社まちいろのエンジニアブログです。

Botkit を使って Slack bot を作成してみた

こんにちは、まちいろの工藤 (@macococo) です。

まちいろでは昨年末から社内チャットツールとして Slack を導入しています。
今ではメンバーもすっかり Slack に慣れて、気が付くとと謎の絵文字が追加されてたりします。

f:id:mkudo-machiiro:20160512215322p:plain:w300

まちいろが誇る画伯達の作品が絵文字に...



で、せっかくチャットツールを導入したのでぜひ bot を運用してみたいところ。
そこで今回は Botkit という Slack bot 開発ツールを利用して、Slack に bot を作成してみましたので、その手順をご紹介いたします。

Botkit by Howdy

開発環境の構築

まずは Botkit を clone してきます。

$ git clone git@github.com:howdyai/botkit.git

次に作成する bot を以下の URL から登録します。 登録後に API Token が取得できるのでコピっておきます。

https://my.slack.com/services/new/bot

f:id:mkudo-machiiro:20160408163953p:plain

clone した botkit ディレクトリで以下のコマンドを実行すると bot が起動します。簡単ですね。

$ cd /path-to-path/botkit
$ token=REPLACE_THIS_WITH_YOUR_TOKEN node bot.js

Botkit をカスタマイズ

ここから bot.js を色々いじっていきます。

Hubot の scripts 自動読み込みと同様の構成に変更

Hubot のように機能単位で JS ファイルを分割できるよう、scripts ディレクトリから自動的にスクリプトを読みこむ構成に変更しました。
実装にあたっては下記記事を参考にさせていただきました。

qiita.com

定期ポストを実装

まちいろでは毎日お弁当を注文しており、朝9時頃に Slack でお弁当の注文申請を行うよう呼びかけていました。
これが地味に面倒だったので、bot から定期的にポストするようにしました。

まず node-cron をインストールします。

$ npm install cron --save

次に node-cron を利用して、定期ポストするスクリプトを作成しました。 作成したスクリプトscripts/ 配下に配置します。

ちなみに、チャンネルの ID は以下の API から確認することができます。 https://api.slack.com/methods/channels.list/test

var CronJob = require('cron').CronJob;
var cron = new CronJob({
  cronTime: '0 9 * * 1-5', // 平日9時に実行
  onTick: function() {
    bot.say({
      channel: 'xxxx',
      text: '@here: お弁当申請お願いします!',
      username: 'user name',
      icon_url: 'icon url',
      link_names: 1
    }, function(err) {
      if (err) {
        bot.botkit.log(err);
      }
    });
  },
  start: false,
  timeZone: 'Asia/Tokyo'
});
cron.start();

サーバーにデプロイ

AWS EC2 に bot 用の環境を用意して、Node.js のプロセスマネージャー pm2 で稼働させました。

github.com

そして、次の日の朝を迎えると...

f:id:mkudo-machiiro:20160512222453p:plain:w300

無事に朝9時につぶやいてくれるようになりました!
ちなみにつぶやいているのは、まちいろの愛すべきキャラクター「だいこん丸」です。

まとめ

Botkit を使うことで簡単に Slack bot を作成することができました。
今後も機能を増やして、自動化や ChatOps に活用していきたいと思います。