【发布时间】:2018-11-14 05:16:05
【问题描述】:
我正在使用 Slack webhook 处理来自 Twilio 的传入 SMS 消息。但是,按照我的设置方式,Twilio 似乎希望 Web 服务器(松弛)对其做出响应。这会导致在 Twilio 中生成错误,我显然不希望出现错误,因为我会收到电子邮件。
我在 Ruby 中使用 twilio-ruby gem 发送 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();
};
【问题讨论】:
-
您为什么不简单地通过
200响应确认 POST 并完成它? -
因为它发布到 slack,而不是我正在控制或有权访问的服务器。我认为 slack 不允许您对传入的 webhook 提供响应,除非我正在考虑某些内容。
-
在不返回响应的情况下接受 HTTP 请求有点奇怪……但是哦,好吧,我不知道 Slack,所以我就留给你吧……
-
是的,这就是 Twilio 使用其 webhook 的方式。一旦收到消息,它就会将详细信息发送到 webhook 并等待响应。只需要弄清楚我是否可以关闭这个等待过程。