mindsellers
72 subscribers
25 photos
8 files
32 links
Практики из жизни Linux-админа. Asterisk, Bash, Python и черная магия.

Сайт http://mindsellers.ru
Группа VK https://vk.com/mindsellers
ТыТруба https://www.youtube.com/channel/UC7LUJgzIUL4VGiOWctoa0fw
По всяким вопросам обращаться @alex_dmit
Download Telegram
./syn.py --output='/opt/autodial/syn/сonnect' --text='Ваш звонок переводится на оператора '
Повторим эту процедуру для всех необходимых фраз, и получим файлы

address.wav
goodbye.wav
hello.wav
operator.wav
order.wav
сonnect.wav
размещенные в указанном каталоге.

Самое время заняться asterisk. По старой традиции я покажу пример с FreePBX, так как на чистом asterisk все во-первых, чуть проще, а во-вторых, работают более опытные люди, которым мои контексты, в общем-то, и не нужны.

В секцию [from-internal-custom] файла extensions_custom.conf внесем следующее:

exten => 900,1,Answer()
exten => 900,n,Noop(${ORDER})
exten => 900,n,Playback(/opt/autodial/syn/hello) ;здравствуйте
exten => 900,n,Playback(/tmp/${ORDER}-name) ;Иван Петров
exten => 900,n,Playback(/opt/autodial/syn/order) ;ваш заказ с номером
exten => 900,n,Playback(/tmp/${ORDER}-order) ;23232
exten => 900,n,Playback(/opt/autodial/syn/address) ;готов к выдаче по адресу
exten => 900,n,Playback(/tmp/${ORDER}-address) ;Ленина 1
exten => 900,n,Playback(/opt/autodial/syn/operator) ;Если вы хотите соединиться
;с оператором, скажите ОПЕРАТОР
exten => 900,n(record),Monitor(wav,/tmp/${UNIQUEID},o) ;включаем запись
exten => 900,n,Wait(2) ;ждем 2 секунды
exten => 900,n,StopMonitor() ;останавливаем
exten => 900,n,Noop(/tmp/${UNIQUEID}-in.wav)
exten => 900,n,Set(RESULT=${SHELL(/usr/bin/python3 /opt/autodial/yandex.py /tmp/${UNIQUEID}-in.wav)})
;передаем запись скрипту и ждем результата
exten => 900,n,Noop(${RESULT})
exten => 900,n,GotoIf($["${RESULT}" = "yes"]?yes) ;если он yes, переходим на метку
exten => 900,n,Playback(/opt/autodial/syn/goodbye) ;иначе прощаемся
exten => 900,n,Hangup()
exten => 900,n(yes),Playback(/opt/autodial/syn/сonnect) ;Ваш звонок переводится на оператора
exten => 900,n,Goto(from-internal,600,1) ;Соединение с оператором или очередью
exten => 900,n,Hangup()


Как несложно заметить, в данном случае мы обрабатывали только один ответ скрипта, положительный. Однако сам скрипт отдает, как было сказано выше, 3 разных варианта(как обычно, скрипт остался от другой задачи)

На этом, собственно, все. Из возможных доработок видится логичным записать заранее все адреса пунктов выдачи, и не генерировать их, а в переменной address в get-запросе передавать просто порядковый номер пункта. Записи в таком случае имеет смысл назвать address-1, address-2 и так далее, при формировании callfile передать также переменную ADDRESS, ну и соответственно, проигрывать файл с именем address-${ADDRESS} из контекста.

Листинг скриптов удобнее посмотреть в wiki
http://pubwiki.mindsellers.ru/index.php/%D0%A1%D0%B8%D0%BD%D1%82%D0%B5%D0%B7_%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%B7%D0%BD%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%87%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_Yandex_Speech_API

#python #asterisk #yandex #speech