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

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

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

В ДАННЫЙ МОМЕНТ РАБОТАЕТ:

  • Код Python вызывает шлейфовый TwiML, размещенный через TWiML Bins

  • 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>
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
849
1

Ответы 1

Проповедник разработчиков Twilio здесь.

Хороший прогресс здесь, но вам придется кое-что изменить, чтобы достичь своей цели.

Во-первых, finishOnKey и numDigits являются подходящими атрибутами, только когда <Gather> используется для ввода DTMF. Для речевого ввода Twilio будет слушать, как говорит пользователь, и когда они остановятся на период времени timeout (или speechTimeout), отправит результат. Итак, для речевого ввода вы не можете заставить пользователя нажимать # по завершении, но разговор должен проходить только через таймауты.

Затем транскрипции отправляются через запрос в Атрибут <Gather>action. Чтобы записать этот транскрибируемый текст, вам необходимо установить действие на сервере, которым вы управляете, чтобы вы могли прочитать текст.

Вы можете добиться этого с помощью Функция Twilio, если не хотите запускать собственное приложение. Следующий код считывает и регистрирует результат, а затем возвращает следующий TwiML в вызове:

exports.handler = function(context, event, callback) {
  console.info(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, чтобы его оптимизировать.

Сообщите мне, если это поможет.

как получить доступ к console.info?

X10D 04.03.2019 03:59

@ X10D при вызове console.info результат записывается в журнал. В функциях Twilio события журнала записываются под функцией в консоли Twilio.

philnash 04.03.2019 05:32

@philnash знаете, можете ли вы сделать и сборку голоса, и dtmf? Я спрашиваю, потому что странно предлагать список в качестве переменной, а предлагать только одну или другую. И, в частности, сколько раз у вас была возможность сделать это с банком. Скажите ответ или воспользуйтесь клавиатурой - сейчас это предлагает большинство банков. Twilio, кажется, готова предложить это.

Dave Friedel 06.04.2019 04:45

Вы абсолютно можете @DaveFriedel. Просто выберите <Gather input = "speech dtmf">.

philnash 06.04.2019 04:47

Тогда вопрос @philnash - какова функция возврата, потому что я не вижу ее в документации для обоих. например для результатов речи из сбора общедоступного TwiMLResult OnComplete (string SpeechResult, double Confidence) {} - Могу ли я предположить, что request.Digits заполнен? Заранее спасибо :)

Dave Friedel 06.04.2019 04:57

@DaveFriedel возврат приходит как перехватчик URL-адреса action, который вы добавляете к элементу <Gather>. Если вы включаете и речь, и dtmf, вам нужно будет проверить, есть ли данные в параметре Digits или SpeechResult. Подробности читайте здесь: twilio.com/docs/voice/twiml/gather#action

philnash 06.04.2019 05:00

Другие вопросы по теме