我正在使用Slack Webhook处理来自Twilio的传入SMS消息。但是,按照我的设置方式,似乎Twilio希望Web服务器(松弛)对此做出响应。这会导致在Twilio中生成错误,并且我显然不希望出现错误,因为我会收到电子邮件。
我正在使用Ruby中的twilio-ruby
宝石发送SMS消息,并使用slack-ruby-client
监视来自Slack的传入消息。
当Twilio发布到Slack Webhook时,如何阻止Twilio尝试从Web服务器获得响应?甚至有可能还是我所有这些配置都不正确?
编辑
这是我将转发的SMS发送到Slack的功能:
const https = require("https");
// Make sure to declare SLACK_WEBHOOK_PATH in your Environment
// variables at
// https://www.twilio.com/console/runtime/functions/configure
exports.handler = (context, event, callback) => {
// Extract the bits of the message we want
const { To, From, Body } = event;
// Construct a payload for slack's incoming webhooks
const slackBody = JSON.stringify({
text: `!asi SMS\nFrom: ${From}\nMessage: ${Body}`
});
// Form our request specification
const options = {
host: "hooks.slack.com",
port: 443,
path: context.SLACK_WEBHOOK_PATH,
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": slackBody.length
}
};
// send the request
const post = https.request(options, res => {
// only respond once we're done, or Twilio's functions
// may kill our execution before we finish.
res.on("end", () => {
// respond with an empty message
callback(null, new Twilio.twiml.MessagingResponse());
});
});
post.write(slackBody);
post.end();
};
答案 0 :(得分:2)
这里是Twilio开发人员的传播者。
Twilio总是希望收到至少200个响应,否则传入消息Webhook将在15秒后超时。
您可以通过在Twilio和Slack之间使用诸如Zapier(例如this blog post中的示例)或使用Twilio函数(例如described here)或使用Twilio Studio(从{ {3}}。
希望其中一个想法有所帮助!
更新
在我之前的回答中,给出了用于拨打电话的代码后,我进行了更新。
使用Node的内置https
模块documentation here发出请求时。这就是导致Twilio和Twilio函数之间超时的原因,您永远不会响应它,因为您不会消耗请求中的数据。
在快速测试中,我发现仅监听data
事件就意味着end
事件确实触发了。因此,将您的功能更新为:
const post = https.request(options, res => {
// only respond once we're done, or Twilio's functions
// may kill our execution before we finish.
res.on("data", () => {});
res.on("end", () => {
// respond with an empty message
callback(null, new Twilio.twiml.MessagingResponse());
});
});
它应该可以工作。