Как вы можете отправить URL-адрес записанного сообщения Twilio в сторонний API

Привет, я пытаюсь настроить голосовую почту для входящих вызовов через функции Twilio и отправлять информацию о вызове с записанным URL-адресом на внешний веб-перехватчик. Спасибо за ваши предложения о том, как это реализовать.

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

person Moni    schedule 21.05.2019    source источник


Ответы (1)


Вы близки, за исключением того, что вы ничего не можете сделать после twiml.record(), кроме как вернуться с callback(null, twiml);

Итак, что вы можете сделать, это:

  1. Создайте корзину TwiML, чтобы вы могли завершить вызов, когда запись закончится.
    Вот код для корзины, он просто вернет пустой ответ, который, в свою очередь, завершит вызов.

<?xml version="1.0" encoding="UTF-8"?>
<Response />

При сохранении корзины вы можете скопировать 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, куда движок Twilio пойдет после завершения записи. Если вы опустите URL-адрес action, когда запись будет завершена, Twilio вернется к этой функции, и вы попадете в цикл (вы можете попробовать, если хотите).

Далее, поскольку запись может быть выполнена, но файл записи может быть недоступен для доступа, вам необходимо использовать recordingStatusCallback, URL-адрес на вашем сервере, веб-перехватчик, о котором Twilio сообщит вам. Одним из параметров запроса будет RecordingUrl, «URL записанного аудио». (документы: https://www.twilio.com/docs/voice/twiml/record#attributes-recording-status-callback-parameters)

Затем вы устанавливаете метод POST или GET, который вы хотите использовать Twilio при попадании на ваш веб-перехватчик.

Затем вы указываете, для каких событий вы хотите, чтобы Twilio использовал ваш веб-перехватчик.


Вы можете прочитать обо всем этом в документации Twilio здесь:

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


Примечание. Если вы считаете, что можете подождать некоторое время, прежде чем использовать URL-адрес записи, вы можете предоставить action только свой веб-перехватчик и обработать зависание на своей стороне (ответить с помощью TwiML из вашего приложения), без необходимости использования корзины TwiML и файла recordingStatusCallback... things. RecordingUrl также является параметром запроса к 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 )

person Alex Baban    schedule 22.05.2019
comment
Алексей спасибо за подробный ответ. при захвате параметров записи у меня отсутствует номер звонящего. как я могу добавить его к информации, отправляемой на мой сервер? - person Moni; 22.05.2019