当用户发送消息并且它在heroku上空闲时,有没有办法唤醒应用程序?

我有一个在免费套餐中运行在heroku上的机器人,我正在寻找一种方法来在Slack中收到用户的消息时唤醒应用程序 .

我的Procfile中有一个Web worker:

web: npm start

我还设置了一个webserver和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

现在,如果我发送消息到机器人松弛,它赢得't respond anymore and the application won'唤醒 unless I send a request to the webserver .

我不想阻止机器人怠速,因为它会消耗我的dyno小时,当用户通过松弛向机器人发送消息时,有没有办法唤醒应用程序?

回答(1)

2 years ago

遗憾的是,使用RTM API时,需要打开RTM连接以接收消息 . 这似乎是一个重言式,但如果dyno正在休眠,则RTM连接将关闭,服务器不会看到任何消息 .

您的解决方案可以是切换到Events API(完全或者只是为了启用您的应用程序 . 但是,您在应用程序中使用了RTM API和Events API,请确保您没有做出两次反应到同一个消息) . 来自消息事件的回调将唤醒您的应用 .

但是,对第一条消息的响应会有很大的延迟 . 如果这是不可接受的,那么你总是可以支付7美元/月:-p