ЦЕЛЬ использования Twilio Framework:
В ДАННЫЙ МОМЕНТ РАБОТАЕТ:
Код Python вызывает шлейфовый TwiML, размещенный через TWiML Bins
3 задаваемых вопроса
звонок записывается, и его можно прослушать через консоль Twilio
ПРОБЛЕМЫ / ЧТО НЕ РАБОТАЕТ:
Любые предложения приветствуются:
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>
Проповедник разработчиков 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
, чтобы его оптимизировать.
Сообщите мне, если это поможет.
@ X10D при вызове console.info
результат записывается в журнал. В функциях Twilio события журнала записываются под функцией в консоли Twilio.
@philnash знаете, можете ли вы сделать и сборку голоса, и dtmf? Я спрашиваю, потому что странно предлагать список в качестве переменной, а предлагать только одну или другую. И, в частности, сколько раз у вас была возможность сделать это с банком. Скажите ответ или воспользуйтесь клавиатурой - сейчас это предлагает большинство банков. Twilio, кажется, готова предложить это.
Вы абсолютно можете @DaveFriedel. Просто выберите <Gather input = "speech dtmf">
.
Тогда вопрос @philnash - какова функция возврата, потому что я не вижу ее в документации для обоих. например для результатов речи из сбора общедоступного TwiMLResult OnComplete (string SpeechResult, double Confidence) {} - Могу ли я предположить, что request.Digits заполнен? Заранее спасибо :)
@DaveFriedel возврат приходит как перехватчик URL-адреса action
, который вы добавляете к элементу <Gather>
. Если вы включаете и речь, и dtmf, вам нужно будет проверить, есть ли данные в параметре Digits
или SpeechResult
. Подробности читайте здесь: twilio.com/docs/voice/twiml/gather#action
как получить доступ к console.info?