2016-09-27 31 views
0

フリーティア内でherokuを実行しているボットを持っています。私はSlackでユーザーからメッセージを受け取ったときにアプリケーションをスリープ状態にする方法を探しています。ユーザーがメッセージを送信し、それが英雄のアイドル状態になっているときにアプリケーションを起動する方法はありますか?

私は私のProcfileでウェブワーカーを持っている:

web: npm start 

私もセットアップウェブサーバとbotkit:

var app = express(); 
var port = process.env.PORT || 3000; 

app.listen(port, function (err) { 
    if (err) throw err; 

    console.log('Bot up!'); 
}); 

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

var bot = controller.spawn({ 
    token: botConfig.SLACK_BOT_KEY 
}).startRTM(); 

ボットは通常通り上昇し、30〜分後にアイドル状態になります私はたるみでボットにメッセージを送信する場合、非アクティブ

2016-09-27T18:55:18.013318+00:00 app[web.1]: info: ** API CALL: https://slack.com/api/rtm.start 
2016-09-27T18:55:18.027341+00:00 app[web.1]: Bot up! 
2016-09-27T18:55:18.253156+00:00 app[web.1]: notice: ** BOT ID: bot ...attempting to connect to RTM! 
2016-09-27T18:55:18.298822+00:00 app[web.1]: notice: RTM websocket opened 
2016-09-27T18:55:18.346493+00:00 heroku[web.1]: State changed from starting to up 
2016-09-27T19:25:42.535535+00:00 heroku[web.1]: Idling 
2016-09-27T19:25:42.536182+00:00 heroku[web.1]: State changed from up to down 
2016-09-27T19:25:46.877746+00:00 heroku[web.1]: Stopping all processes with SIGTERM 
2016-09-27T19:25:48.014988+00:00 heroku[web.1]: Process exited with status 143 

さて、それはもはや応答しAPPLはありませんWebサーバーにリクエストを送信しない限り、は起きません。

ボットがアイドル状態にならないようにしたいとは思わないが、ユーザが余裕を持ってボットにメッセージを送信したときに私がこのアプリケーションを起動できる方法はあるのだろうか?

答えて

4

残念ながら、RTM APIを使用すると、RTM接続を開いてメッセージを受信する必要があります。トートロジーのようですが、ダイノーがスリープしている場合、RTM接続は閉じられ、サーバーからのメッセージは表示されません。

あなたの解決策は、イベントAPIに切り替えることができます(完全に、または単にアプリケーションの起動を有効にするためです)。ただし、アプリケーションにRTM APIとEvents APIの両方を使用している場合は、同じメッセージに2回反応する)。メッセージイベントからのコールバックがあなたのアプリを起動させます。

最初のメッセージへの応答にはかなりの遅れがあります。それが受け入れられない場合、あなたはいつも$ /月7を支払うことができます:-p

関連する問題