如何将Twilio录制的消息url发送到第三方API

如何将Twilio录制的消息url发送到第三方API,twilio,twilio-functions,Twilio,Twilio Functions,嗨,我正在尝试通过Twilio功能为来电设置语音邮件 以及将带有记录的URL的呼叫信息发送到外部webhook 感谢您对如何实施的建议 exports.handler = function(context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); //twiml.say("Welcome We are not available at this moment. Please leave a

嗨,我正在尝试通过Twilio功能为来电设置语音邮件 以及将带有记录的URL的呼叫信息发送到外部webhook 感谢您对如何实施的建议

exports.handler = function(context, event, callback) {
    let twiml = new Twilio.twiml.VoiceResponse();
    //twiml.say("Welcome We are not available at this moment. Please leave a message, and we will call you back.");
    twiml.record({ maxLength: 20,});
    twiml.hangup();

    callback(null, twiml);
};

您很接近,除了在
twiml.record()之后不能执行任何操作,而是返回
callback(null,twiml)

所以,你可以做的是:

  • 创建TwiML邮箱,以便在录音结束时挂断电话。
    这是bin的代码,它只会返回一个空响应,这反过来会挂断调用
  • 
    
    当你保存垃圾桶时,你可以复制垃圾桶的URL,你需要它在你的函数中。URL看起来像
    https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


  • 将您的功能代码更改为类似的内容(您可以添加更多选项,您可以在文档中找到这些选项,我将把链接放在这个答案的末尾)
  • 
    exports.handler=函数(上下文、事件、回调){
    让twiml=new Twilio.twiml.VoiceResponse();
    //twiml.说:“欢迎……请留言,我们会给你回电话。”;
    twiml.record({
    最大长度:20,
    行动:'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    recordingStatusCallback:'https://your_webhook_url',
    recordingStatusCallbackMethod:'POST',
    recordingStatusCallbackEvent:“正在进行、已完成、缺席”
    });
    回调(null,twiml);
    };
    
    如果您查看代码,您可以看到
    操作
    指向您创建的TwiML容器,即录制完成后Twilio引擎将运行的位置。如果您省略
    操作
    URL,当记录完成时,Twilio将返回此函数,您将进入一个循环(如果您愿意,可以尝试)

    接下来,由于录制可能已经完成,但录制文件可能无法访问,因此您需要使用
    recordingStatusCallback
    ,这是服务器上的一个URL,一个webhook,Twilio将在其中通知您。其中一个请求参数是
    RecordingUrl
    ,“录制音频的URL”(文档:)

    接下来,设置Twilio在点击webhook时要使用的方法
    POST
    GET

    下一步,您要告诉Twilio要针对哪些事件访问您的webhook


    您可以在Twilio的文档中阅读所有这些内容:

    ()


    注意:如果您认为在使用录制URL之前可以等待一段时间,那么您只能在webhook中提供
    操作
    ,并处理挂起的问题(从应用程序中使用TwiML进行响应),而不需要TwiML bin和
    recordingStatusCallback。。。事情
    RecordingUrl
    也是请求
    action
    的一个参数,但正如我所说,该文件可能无法立即使用


    如何获取“来电号码”:

    除了
    RecordingUrl
    之外,您还可以获得
    CallSid
    类似于
    caxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    的内容,您可以使用它来获取(从应用程序发出另一个请求)有关呼叫的信息,包括带有此代码的
    来自
    的号码:

    const accountSid='ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    const authToken='your_auth_token';
    const client=require('twilio')(accountSid,authToken);
    客户端调用('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
    .fetch()
    .then(call=>console.log(call.from));
    

    ()

    Alex谢谢你的详细回答。捕获录制参数时,我缺少呼叫者号码。如何将其添加到发送到服务器的信息中?