Node js twillio webhook - 去电不起作用

Node js twillio webhook - outgoing call not working

我的目标是让 twillio 调用一个 webhook,然后让一些节点 js 函数记录用户所说的内容,然后向另一个 phone 号码拨出电话并播放该录音。

但是,我似乎无法设置拨出电话。该代码在常规节点 js 文件中工作,但一旦它作为 webhook 的一部分被调用,它就不会工作:

const accountSid = 
const authToken = 
const client = require('twilio')(accountSid, authToken);

exports.handler = function(context, event, callback) {


  console.log(event.CallSid, event.RecordingUrl);
  console.log()
  console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");

  let audioURL = event.RecordingUrl
  audioURL+=".mp3";

  const response = new Twilio.twiml.VoiceResponse();



  response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');

  client.calls
      .create({
         from: '+14********',
         to: '+14***********',
         url: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-8.mp3'
       })



  callback(null, response);
};

这里是 Twilio 开发人员布道者。

这里的问题是您发出异步请求进行调用,然后立即调用 callback。这会终止 Twilio 函数的执行,因为它会立即取消出站 API 请求。有关详细信息,请参阅 documentation on Twilio Function execution

要解决此问题,您应该只在 create 函数完成后调用 callback

作为额外提示,您还可以从 context 对象获取经过身份验证的客户端,而无需自己加载 accountSid 或 authToken。

此外,在您的示例中,您为出站呼叫提供的 URL 似乎是 mp3。您的 URL 应该 return TwiML,或者您可以将 TwiML 作为 API 请求的一部分发送。

我会像这样更新你的功能:

exports.handler = function(context, event, callback) {
  console.log(event.CallSid, event.RecordingUrl);
  console.log()
  console.log("RECORDING URL: " + event.RecordingUrl + ".mp3");

  let audioURL = event.RecordingUrl
  audioURL+=".mp3";

  const client = context.getTwilioClient();

  const response = new Twilio.twiml.VoiceResponse();

  response.say({ voice: 'woman', language: 'en-US' }, 'Thank you.');

  client.calls
      .create({
         from: '+14********',
         to: '+14***********',
         twiml: `<Response><Play>${audioUrl}</Play></Response>`
       })
       .then(() => {
         callback(null, response);
       })
       .catch(error => {
         callback(error);
       });
};