Botkit を使って Slack bot を作成してみた
こんにちは、まちいろの工藤 (@macococo) です。
まちいろでは昨年末から社内チャットツールとして Slack を導入しています。
今ではメンバーもすっかり Slack に慣れて、気が付くとと謎の絵文字が追加されてたりします。
まちいろが誇る画伯達の作品が絵文字に...
で、せっかくチャットツールを導入したのでぜひ bot を運用してみたいところ。
そこで今回は Botkit という Slack bot 開発ツールを利用して、Slack に bot を作成してみましたので、その手順をご紹介いたします。
開発環境の構築
まずは Botkit を clone してきます。
$ git clone git@github.com:howdyai/botkit.git
次に作成する bot を以下の URL から登録します。 登録後に API Token が取得できるのでコピっておきます。
https://my.slack.com/services/new/bot
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 ディレクトリから自動的にスクリプトを読みこむ構成に変更しました。
実装にあたっては下記記事を参考にさせていただきました。
定期ポストを実装
まちいろでは毎日お弁当を注文しており、朝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 で稼働させました。
そして、次の日の朝を迎えると...
無事に朝9時につぶやいてくれるようになりました!
ちなみにつぶやいているのは、まちいろの愛すべきキャラクター「だいこん丸」です。
まとめ
Botkit を使うことで簡単に Slack bot を作成することができました。
今後も機能を増やして、自動化や ChatOps に活用していきたいと思います。