Я пытаюсь написать простую настройку Twilio, которая будет совершать исходящий вызов, записывать голосовое сообщение пользователя и немедленно воспроизводить его ему. Я создал две функции: startcall
и msgin
. StartCall вызывает пользователя и указывает MsgIn в параметре вызова url
. Затем MsgIn имеет два основных режима работы: сначала, когда нет прикрепленной записи, он возвращает ответ TwiML, запускающий запись, а затем, когда вызывается как веб-перехватчик с соответствующим параметром, он воспроизводит запись и зависает. вверх. По крайней мере, это то, что он должен делать.
Согласно моему пониманию документации, я должен прикрепить вебхук к recordingStatusCallback
, так как запись может быть еще недоступна, когда вызывается вебхук action
. Однако, хотя консоль функций указывает, что выполняются оба веб-перехватчика, журнал вызовов показывает только один последующий вызов msgin
с нулевым значением для event.RecordingStatus
(что соответствует action
), и вызов действительно зависает без воспроизведения записи. Что мне здесь не хватает?
// this function's path is /msgin
exports.handler = function(context, event, callback) {
if (!event.RecordingStatus && !event.RecordingUrl) {
let twiml = new Twilio.twiml.VoiceResponse();
console.log("Initial MsgIn");
twiml.say({ voice: 'man', language: 'en-us' }, 'Leave your message');
twiml.record({
playBeep: false,
transcribe: false,
trim: "trim-silence",
timeout: 1,
recordingStatusCallback: "/msgin",
recordingStatusCallbackEvent: "completed",
action: "/msgin"
});
console.log("Recording started");
callback(null, twiml);
}
else if (event.RecordingStatus == "completed") {
let twiml = new Twilio.twiml.VoiceResponse();
console.log("Supposedly callback");
twiml.say({ voice: 'man', language: 'en-us' }, 'You said');
twiml.play(event.RecordingUrl);
twiml.hangup();
callback(null, twiml);
}
else {
console.log("Supposedly action");
callback(null, "");
}
};