LoginSignup
1
1

More than 5 years have passed since last update.

Slack Botが[debug: No handler for tick]以外訴えなくなった時の対処メモ

Posted at

前提

実行環境

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();

準備が完了したことを、
botkit.jpg
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 の問題なのだろうか。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1