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