Twilio Developer Evangelist здесь.
Хороший прогресс здесь, но вам придется изменить несколько бит вокруг, чтобы достичь своей цели.
Сначала, finishOnKey
и numDigits
являются только соответствующими атрибутами, когда <Gather>
используется для ввода DTMF.Для речевого ввода Twilio будет прослушивать говорящих пользователей и, когда они остановятся в течение timeout
(или speechTimeout
) времени, отправит результат.Таким образом, для речевого ввода пользователь не может нажимать #
после завершения, но разговор должен проходить только через тайм-ауты.
Далее транскрипции отправляются через запрос к <Gather>
атрибут action
.Чтобы захватить этот транскрибированный текст, вам нужно установить действие для сервера, которым вы управляете, чтобы вы могли читать текст.
Этого можно добиться с помощью функции Twilio , если вы не хотитеотстаивать свое собственное приложение.Следующий код будет читать и регистрировать результат, а затем возвращать следующий TwiML в вызове:
exports.handler = function(context, event, callback) {
console.log(event.SpeechResult); // SpeechResult is the transcribed text
const twiml = new Twilio.twiml.VoiceResponse();
twiml.gather({ input: 'speech', timeout: 3 }).say('The next question');
callback(null, twiml);
})
Вы, вероятно, захотите сохранить транскрибированный текст в вашей собственной базе данных как часть этого.
Замечу, что вы пишете приложение на Python.Вы можете сделать это и на своем собственном Python-сервере.
Наконец, я не уверен, что вызвало бы задержку с вашими корзинами TwiML.Возможно, стоило бы поиграть со значением timeout
, чтобы оптимизировать это.
Дайте мне знать, если это поможет.