【问题标题】:How can you send Twilio recorded message url to third party API如何将 Twilio 记录的消息 url 发送到第三方 API
【发布时间】:2019-05-21 22:33:33
【问题描述】:

您好,我正在尝试通过 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);
};

【问题讨论】:

    标签: twilio twilio-functions


    【解决方案1】:

    你已经很接近了,除了twiml.record()之后你不能做任何事情,只能用callback(null, twiml);返回

    那么,你可以做的是:

    1. 创建 TwiML Bin,以便在录制结束时挂断电话。
      这是 bin 的代码,它只会返回一个空响应,然后会挂断电话。
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Response />
    
    

    当您保存 bin 时,您可以复制 bin 的 URL,您将在函数中需要它。该 URL 类似于 https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    1. 将您的功能代码更改为类似的内容(您可以添加更多可以在文档中找到的选项,我会将链接放在此答案的末尾)。
    
    exports.handler = function(context, event, callback) {
    
        let twiml = new Twilio.twiml.VoiceResponse();
    
        // twiml.say("Welcome... Please leave a message, and we will call you back.");
    
        twiml.record({ 
            maxLength: 20, 
            action: 'https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
            recordingStatusCallback: 'https://your_webhook_url',
            recordingStatusCallbackMethod: 'POST',
            recordingStatusCallbackEvent: 'in-progress, completed, absent'
    
        });
    
        callback(null, twiml);
    };
    

    如果您查看代码,您会看到 action 指向您创建的 TwiML Bin,这是 Twilio 的引擎在录制完成后将进入的位置。如果省略action URL,记录完成后,Twilio 将返回此功能,您将进入循环(如果您愿意,可以尝试)。

    接下来,由于录制可能已完成,但录制文件可能无法访问,您需要使用 recordingStatusCallback,这是您服务器上的一个 URL,一个 webhook,Twilio 会让您知道。请求参数之一将是RecordingUrl,“录制音频的 URL”。 (文档:https://www.twilio.com/docs/voice/twiml/record#attributes-recording-status-callback-parameters

    接下来,您设置方法 POSTGET 在 Twilio 访问您的 webhook 时使用。

    接下来,您说明您希望 Twilio 针对哪些事件点击您的 webhook。


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

    (https://www.twilio.com/docs/voice/twiml/record#attributes)


    注意:如果您认为可以在使用录制 URL 之前等待一段时间,您只能向 action 提供您的 webhook 并自行处理挂断问题(使用您的 TwiML 响应应用程序),无需 TwiML bin 和 recordingStatusCallback... thingsRecordingUrl 也是对action 的请求的参数,除了,就像我说的那样,文件可能不会立即可用。


    如何获取“来电号码”:

    RecordingUrl 一起,您会得到CallSid 类似CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 的东西,您可以使用它来获取(从您的应用程序发出另一个请求)有关呼叫的信息,包括带有此代码的from 号码:

    const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
    const authToken = 'your_auth_token';
    const client = require('twilio')(accountSid, authToken);
    
    client.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
          .fetch()
          .then(call => console.log(call.from));
    
    

    (https://www.twilio.com/docs/voice/api/call?code-sample=code-fetch-a-call&code-language=Node.js&code-sdk-version=3.x)

    【讨论】:

    • Alex 感谢您的详细回答。捕获录音参数时,我缺少来电者号码。如何将其添加到发送到我的服务器的信息中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    相关资源
    最近更新 更多