【发布时间】:2018-03-14 23:18:06
【问题描述】:
我们正在使用 node.js 向客户发送 SMS,并且最近添加了状态回调来记录发送和传递的状态。我们现在还在 Twilio 日志中看到大量 11200 错误,这些错误显然是成功的。查看调试器,我在响应正文中看到了这一点:
Twilio 无法从以下位置获取内容: https://api.mycompany.com:443/api/1.0/sms/response 错误:错误 读取响应:响应不包含内容类型
并且消息文本有:
Msg "对 StatusCallback URL 的请求不成功。" http响应“502”
在我们这边,/api/1.0/sms/response 的处理程序获取随响应发送的 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 日志(我们在节点前面使用它)中也只有 200 个响应,没有上游超时,也没有 502s。所以我不知道这个错误来自哪里,或者如何摆脱它。
是的,我们应该处理未送达等问题,但这只是快速获得一些回复。
【问题讨论】: