创建一个Twilio函数来触发2个Webhook端点(Autopilot和FrontApp)以接收短信

时间:2020-05-05 16:17:44

标签: twilio

我想创建一个Twilio函数,该函数将触发AutoPilotHQ和FrontApp的两个webhook端点。

我尝试了here的建议 建议创建以下功能。我确实确保也包括依赖项。

const got = require('got');

exports.handler = function(context, event, callback) {
  let twiml = new Twilio.twiml.MessagingResponse();
  Promise.all([
    got.post(FIRST_URL, { body: JSON.stringify(event) }),
    got.post(SECOND_URL, { body: JSON.stringify(event) })
  ]).then(responses => callback(null, twiml));
};

我从twilio得到以下错误:

UnhandledPromiseRejectionWarning: Unhandled promise rejection: HTTPError: Response code 500 (Internal Server Error)
at PromisableRequest.request.once (/var/task/node_modules/got/dist/source/as-promise/index.js:124:28)
at process._tickCallback (internal/process/next_tick.js:68:7)

Webhooks的URL分别特定于FrontApp和AutopilotHQ。

1 个答案:

答案 0 :(得分:0)

在Twilio Function下可以正常工作吗?

确保将querystring和axios添加为Twilio函数dependencies

enter image description here

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);
       });
};