前提
実行環境
Platform | Version |
---|---|
OS | Windows8.1 |
Node | v6.3.0 |
その他
初めてのjavascript...初めてのNode.js(言い訳)
事象
Slack Bot(botkit)が最初は職務を遂行しているのに、一定時間経過すると
debug: No handler for tick
debug: No handler for tick
debug: No handler for tick
以外のログを吐かなくなりました。(debug: true の場合)
Slackの状態も away と完全に職務放棄...
google先生曰く、通信?がうまくいっていないとかなんとか。
ということで本来は正常稼働することを目指すべきかもしれないのですが、荒療治してみました。
準備
forever で永続化。
利用には、slack_bot.jsの改ざんが必要です。
//トークンを埋め込むため、環境設定にトークンが設定されているかの判定はコメントアウト
//if (!process.env.token) {
// console.log('Error: Specify token in environment');
// process.exit(1);
//}
(中略)
//トークンを埋め込む
var SLACK_TOKEN = 'botのAPI Token';
var bot = controller.spawn({
// token: process.env.token
token:SLACK_TOKEN
}).startRTM();
準備が完了したことを、
Botと shutdown の会話でプロセスを切断させた後、自動復帰するかで確認します。
以上で、準備完了です。
対処
職務放棄のため状態が away となっったら、プロセスを切断しちゃおう!
そして forever の永続化による強制復活をしてしまおう!という結論に至りました。
そこで node-cron を利用しました。
var CronJob = require('cron').CronJob;
cron = new CronJob({
//定時刻設定
cronTime: '00 00 * * * 1-5',
onTick: function(){
//users.getPresence を利用した状態確認
bot.api.users.getPresence({},function(err,response){
presence = response["presence"]
if(presence =="away"){
process.exit();
}
})
},
start:true,
timeZone:'Asia/Tokyo'
});
cron.start();
cron で定期的に Slack API users.getPresence を実行して状態を確認し、active 以外の場合はプロセスを切断、 そして forever での自動起動を待つという流れで完了です。
botの状態に関係なく Slack API は利用できていたので bot の問題なのだろうか。