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

时间:2016-09-27 20:40:18

标签: heroku slack-api botkit

我有一个机器人在免费套餐中运行在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

现在,如果我向机器人发送消息,它将不再响应,应用程序不会唤醒,除非我向网络服务器发送请求

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

1 个答案:

答案 0 :(得分:6)

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

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

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