我们正在使用 node.js 向客户发送短信,并且最近添加了状态回调来记录已发送和已发送的状态。我们现在还在 Twilio 日志中看到大量 11200 错误,这些错误显然是成功的。查看调试器,我在响应正文中看到了这一点:
Twilio was unable to fetch content from: https://api.mycompany.com:443/api/1.0/sms/response Error: Error reading response: Response does not contain content type
消息文本有:
Msg "Request to StatusCallback URL was unsuccessful." httpResponse "502"
在我们这边,/api/1.0/sms/response 的处理程序获取随响应一起发送的 MessageSid,将其与数据库中的 MessageSid 进行匹配,然后查看 MessageStatus。对于“已发送”,它在已发送字段中记录当前时间并将其保存回数据库,同样对于已发送。最后,它只是执行了 res.end(),如 node.js example 所示。 .
代码如下:
app.post('/api/1.0/sms/response', function(req, res) {
var post_id = req.body.MessageSid || "";
var status = req.body.MessageStatus || "";
var item = Item.create(globals);
if (post_id === "") {
globals.logger.error(moduleName, "POST sms/response", "Missing MessageSid: " + JSON.stringify(req.body), true);
res.end();
return;
}
item.loadFromPostId(post_id).then(function() {
if (status.toLowerCase() === "sent") {
item.sent = new Date();
}
else if (status.toLowerCase() === "delivered") {
item.delivered = new Date();
}
item.save().then(function() {
res.end();
});
});
});
查看几个错误,这些错误是在 Twilio 尝试向我们发送“已送达”状态时出现的。从这些错误中检查我们的数据库中的 MessageSids,匹配的项目在“已交付”列中有一个时间戳,因此它一直通过代码进行保存。
对于该端点,我们的 nginx 日志(我们在 Node 前面使用的)中只有 200 个响应,没有上游超时,也没有 502 秒。所以我不知道这个错误从何而来,也不知道如何消除它。
是的,我们应该处理未送达的情况等,但这只是获得一些回复的快速传递。
最佳答案
您应该使用 HTTP 状态代码 204 进行响应:
res.status(204).end();
204 状态仍然是成功,就像 200 一样,但具体意味着您没有发回任何内容 ( https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html )。 请注意,以下内容也有效,并且不需要 end():
res.sendStatus(204);
关于node.js - 短信状态回调中的 Twilio 11200 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49289113/