是否可以通过编程方式为单个 Twilio 号码注册多个 Webhook URL? (当我们收到入站短信时,我们希望使用该数据调用多个 Webhook)
“更新传入电话号码资源”的文档建议您可以选择设置
smsUrl
,但尚不清楚如何为单个号码设置 多个 webhook URL。
不通过 Twilio 控制台选项。您可以编写一个可以分叉出多个出站 Webhook 的 Twilio 函数,如下所示,然后只需将 Twilio 控制台指向此 Twilio 函数即可。
const axios = require('axios');
const qs = require('querystring');
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.MessagingResponse();
let {
ApiVersion,
SmsSid,
SmsStatus,
SmsMessageSid,
NumSegments,
ToState,
From,
MessageSid,
AccountSid,
ToCity,
FromCountry,
ToZip,
FromCity,
To,
FromZip,
ToCountry,
Body,
NumMedia,
FromState
} = event;
let requestBody = {
ApiVersion,
SmsSid,
SmsStatus,
SmsMessageSid,
NumSegments,
ToState,
From,
MessageSid,
AccountSid,
ToCity,
FromCountry,
ToZip,
FromCity,
To,
FromZip,
ToCountry,
Body,
NumMedia,
FromState
};
let url1 = "https://example.com/1";
let url2 = "https://example.com/2";
const config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
Promise.all([
axios.post(url1, qs.stringify(requestBody), config),
axios.post(url2, qs.stringify(requestBody), config)
]).then(result => {
callback(null, twiml);
}).catch(err => {
console.log(err);
callback(err);
});
};
您无法直接使用 Twilio Messaging 注册多个 Webhook 来处理单个号码上的入站短信。您只能定义一个入站处理程序和一个后备。
一种方法是使用外部服务(例如代理或专门的第三方解决方案)将请求扇出到两个或更多附加端点。
Hookdeck 就是这样一个第三方服务(我目前为之工作)。您可以通过创建多个包含相同 Twilio 源但使用不同目的地的多个连接来解决此问题。
以下 Hookdeck 连接提供了一个入站 Webhook URL,您可以在 Twilio 中注册该 URL,然后将请求扇出到两个处理程序。可以根据需要添加更多处理程序。
_注意:此示例还使用 transformations 将
content-type
和负载从 application/x-www-form-urlencoded
转换为 application/json
。
如下截图所示:
application/x-www-form-urlencoded
请注意,使用此类解决方案,您将无法利用 Twilio 的 TwiML 响应功能,该功能可以指示将 SMS 发送给发件人。