当用户发送消息并且它在 heroku 上空闲时,有没有办法唤醒应用程序?
Is there a way to wake up the application when a user sends a message and it's idle on heroku?
我在 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
现在,如果我在 slack 中向机器人发送消息,它不会再响应,应用程序也不会唤醒 除非我向网络服务器发送请求 .
我不想阻止机器人闲置,因为它会消耗我的 dyno 小时数,有没有一种方法可以在用户通过 slack 向机器人发送消息时唤醒应用程序?
不幸的是,使用 RTM API,需要打开 RTM 连接才能接收消息。这似乎是一个重言式,但如果 dyno 正在休眠,RTM 连接将关闭,服务器看不到任何消息。
您的解决方案可以是切换到事件 API(完全切换,或者只是为了启用唤醒您的应用程序。但是,如果您同时拥有 RTM API 和事件 API 在您的应用中使用,请确保您不会对同一消息做出两次反应)。来自消息事件的回调将唤醒您的应用程序。
不过,对第一条消息的响应会有明显的滞后。如果那不可接受,那么您可以随时支付 7 美元/月 :-p
我在 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
现在,如果我在 slack 中向机器人发送消息,它不会再响应,应用程序也不会唤醒 除非我向网络服务器发送请求 .
我不想阻止机器人闲置,因为它会消耗我的 dyno 小时数,有没有一种方法可以在用户通过 slack 向机器人发送消息时唤醒应用程序?
不幸的是,使用 RTM API,需要打开 RTM 连接才能接收消息。这似乎是一个重言式,但如果 dyno 正在休眠,RTM 连接将关闭,服务器看不到任何消息。
您的解决方案可以是切换到事件 API(完全切换,或者只是为了启用唤醒您的应用程序。但是,如果您同时拥有 RTM API 和事件 API 在您的应用中使用,请确保您不会对同一消息做出两次反应)。来自消息事件的回调将唤醒您的应用程序。
不过,对第一条消息的响应会有明显的滞后。如果那不可接受,那么您可以随时支付 7 美元/月 :-p