Воспроизведение фразы в голосовом вызове Twilio

Я пытаюсь написать простую настройку 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, "");
    }
};

person dpq    schedule 21.01.2019    source источник
comment
Обнаружил следующие вопросы и ответы: stackoverflow. ком/вопросы/43599336/. Это помогает понять, почему моя обработка обратного вызова не работает, но я не понимаю, как ее использовать, если я хочу, чтобы задержка между записью и воспроизведением была как можно меньше, и я не знаю, как долго может длиться высказывание. прошлой.   -  person dpq    schedule 21.01.2019
comment
Одна из идей состоит в том, чтобы запустить другую функцию, которая полагается на memcached для установки/получения статуса записи (set вызывается обратным вызовом, get вызывается действием в 50-миллисекундном пошаговом цикле).   -  person dpq    schedule 21.01.2019


Ответы (1)


Я следовал инструкциям в принятом ответе здесь: Запись нескольких пользовательских ответов в Twilio позвоните, чтобы решить эту проблему. Однако существует значительная задержка, прежде чем аудиозапись станет доступной.

person dpq    schedule 22.01.2019
comment
Рад, что вы нашли этот ответ и что он помог. Нет никаких гарантий относительно того, сколько времени потребуется, чтобы запись стала доступной, хотя я боюсь. Воспринимаемая вызывающим абонентом производительность может улучшиться, если вы дадите ему возможность после этого прослушать еще раз и потребовать нажатия клавиши. Это дало бы возможность записи завершиться, пока пользователь взаимодействовал со звонком. - person philnash; 23.01.2019
comment
Отличная идея. Или просто воспроизвести предварительно записанный текст, например «Воспроизведение вашего сообщения сейчас». Я также заметил, что переадресация вызова занимает до 2-3 секунд; в случае, если это нормально, а не какая-то неправильная конфигурация с моей стороны, такой подход также позаботится об этой задержке. - person dpq; 23.01.2019
comment
Перенаправление не должно занимать так много времени. Каково время отклика на URL-адрес, на который перенаправляется вызов? - person philnash; 23.01.2019