为单个 Twilio 号码注册多个 Webhook

问题描述 投票:0回答:2

是否可以通过编程方式为单个 Twilio 号码注册多个 Webhook URL? (当我们收到入站短信时,我们希望使用该数据调用多个 Webhook)

“更新传入电话号码资源”的文档建议您可以选择设置

smsUrl
,但尚不清楚如何为单个号码设置 多个 webhook URL。

twilio twilio-api
2个回答
2
投票

不通过 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);
  });
};

0
投票

您无法直接使用 Twilio Messaging 注册多个 Webhook 来处理单个号码上的入站短信。您只能定义一个入站处理程序和一个后备。

一种方法是使用外部服务(例如代理或专门的第三方解决方案)将请求扇出到两个或更多附加端点。

Hookdeck 就是这样一个第三方服务(我目前为之工作)。您可以通过创建多个包含相同 Twilio 但使用不同目的地的多个连接来解决此问题。

以下 Hookdeck 连接提供了一个入站 Webhook URL,您可以在 Twilio 中注册该 URL,然后将请求扇出到两个处理程序。可以根据需要添加更多处理程序。

_注意:此示例还使用 transformations

content-type
和负载从
application/x-www-form-urlencoded
转换为
application/json

如下截图所示:

  • 来自 Twilio 的入站请求(入站 SMS)导致创建多个事件,每个事件对应一个 Hookdeck 目的地
  • 传入请求为
    application/x-www-form-urlencoded

请注意,使用此类解决方案,您将无法利用 Twilio 的 TwiML 响应功能,该功能可以指示将 SMS 发送给发件人。

© www.soinside.com 2019 - 2024. All rights reserved.