Twilio - <Gather>несколько голосовых ответов и расшифровка текста при исходящем звонке - PullRequest
0 голосов
/ 25 октября 2018

ЦЕЛЬ с использованием Twilio Framework:

  • сделать исходящий вызов
  • представить 3 вопроса и записать 3 голосовых ответа
  • расшифровать текстот звонка из 3-х голосовых ответов
  • используйте клавишу #, чтобы подать ответ на каждый вопрос и двигаться вперед

ТЕКУЩАЯ РАБОТА:

  • Python-код, вызывающий последовательный TwiML, размещенный в корзинах TWiML

  • 3 задаваемых вопроса

  • звонокзаписаны и могут быть прослушаны через консоль Twilio

ПРОБЛЕМЫ / ЧТО НЕ РАБОТАЕТ:

  1. нет расшифрованного текста свызов.
  2. есть заметная задержка при вызове TwiML через корзину TwiML.
  3. клавиша # не переходит к следующему вопросу

Любые предложения приветствуются:

from twilio.rest import Client
account_sid = 'XXXXXXXXXXXXXXXX'
auth_token = 'XXXXXXXXXXXXXXXX'
client = Client(account_sid, auth_token)

call = client.calls.create(
                        url='http://www.companyname.com/Auditor/MessageName.xml',
                        to="+61437231327",
                        from_='+61437231327',
                        record=True
                    )
print(call.sid)
print(call.status)
#print(call.transcription_text)
print(call.uri)


-------- TWIML hosted website MessageName.xml ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say voice="alice">Collecting Name </Say>
    <Gather input="speech" timeout="3" numDigits="1" action="https://handler.twilio.com/twiml/someTwilBinURLID">
        <Say>Please say Name. Press # when complete</Say>
    </Gather>
  </Response>


-------- TwimlBin TWIML - 2nd required voice response ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather input="speech" finishOnKey="#" timeout="3" numDigits="1" action="https://handler.twilio.com/twiml/someTwilBinURLIDForNextVoice">
        <Say>Please say how old you are. Press # when complete</Say>
    </Gather>    
</Response>
-------- TwimlBin TWIML -3rd required voice response ---------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather input="speech" finishOnKey="#" timeout="3" numDigits="1">
        <Say>Please say what your location is. Press # when complete</Say>
    </Gather>    
</Response>

1 Ответ

0 голосов
/ 26 октября 2018

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, чтобы оптимизировать это.

Дайте мне знать, если это поможет.

...