Как отправить URL-адрес записанного сообщения Twilio стороннему API - PullRequest
0 голосов
/ 22 мая 2019

Привет! Я пытаюсь настроить голосовую почту для входящих вызовов через функции 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);
};

1 Ответ

0 голосов
/ 22 мая 2019

Вы близки, за исключением того, что вы ничего не можете сделать после 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)

...