Вы близки, за исключением того, что вы ничего не можете сделать после twiml.record()
, кроме как вернуться с callback(null, twiml);
Итак, что вы можете сделать, это:
- Создайте корзину TwiML, чтобы вы могли завершить вызов, когда запись закончится.
Вот код для корзины, он просто вернет пустой ответ, который, в свою очередь, завершит вызов.
<?xml version="1.0" encoding="UTF-8"?>
<Response />
При сохранении корзины вы можете скопировать URL-адрес корзины, он понадобится вам в вашей функции. URL-адрес выглядит примерно так: https://handler.twilio.com/twiml/EHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- Измените свой код функции на что-то вроде этого (вы можете добавить дополнительные параметры, которые вы можете найти в документах, я поставлю ссылку в конце этого ответа).
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