我正在尝试使用hook.io microservice制作一个松弛的斜杠命令机器人。根据{{3}}我应该能够发送立即响应然后单独的POST。但是我无法立即得到响应,后来的POST也都工作了。
这是我的测试代码。
2017-07-14T12:02:23.000+0000
详见调用res.end()的注释早期意味着立即响应被发送但POST永远不会发生,而延迟res.end()直到POST后意味着发送了延迟响应但是它产生了超时错误在此期间松懈。
我是一个javascript新手,所以希望有一个我忽略的简单解决方案。
答案 0 :(得分:1)
在hook.io中调用res.end()
后,脚本将立即中止并结束处理。这相当于调用process.exit
。如果您未能结束请求,hook.io最终会点击它自己的Time-out Limit。
hook.io应该能够在Slack要求的三秒内响应Slack。
答案 1 :(得分:0)
错误的表单回答了我自己的问题我知道,但以下是使用webtask为我工作所以我把它包含在这里以防其他人认为它有用。
var express = require('express');
var Webtask = require('webtask-tools');
var bodyParser = require('body-parser');
var request = require('request');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
//visiting above url in browser is handled by get
app.get('/', function (req, res) {
console.log(req.query)
res.send('OK');
});
//post from slack handled here
app.post('/', function (req, res) {
var params = req.body;
console.log(params);
var data = {
"response_type": "ephemeral",
"text": "Immediate Response"
}
res.setHeader('Content-Type', 'application/json');
res.send(data);
// deliberate delay longer than Slack timeout
// in order to test delayed response.
setTimeout(function () { post_response(params) }, 3500);
});
function post_response(params) {
console.log("posting delayed response")
// Set up the options for the HTTP request.
var options = {
// Use the Webhook URL supplied by the slack request.
uri: params.response_url,
method: 'POST',
// Slack expects a JSON payload with a "text" property.
json: { "response_type": "in_channel", "text": "Delayed response", "parse": "full" }
};
// Make the POST request to the Slack incoming webhook.
request(options, function (error, response, body) {
if (error) {
console.log(error);
} else {
console.log("post OK");
}
})
};
module.exports = Webtask.fromExpress(app);