..
Всем привет. В этой публикации в Asterisk PBX будем настраивать голосовое меню для входящих вызовов. Для первоначальной настройки внутренней связи по локальной сети по SIP'у смотрите публикацию Linux Ubuntu. Установка Asterisk PBX раздел "МИНИМАЛЬНАЯ НАСТРОЙКА" в частности.
Asterisk PBX это современная безплатная программная телефонная станция с открытым исходным кодом малой и средней ёмкости, ориентированная на использование в офисе и в абонентском доступе на периферии. "Asterisk - будущее телефонии". Asterisk PBX устанавливается как служба в Linux в т.ч. Linux Ubuntu и при наличии соответствующего оборудования позволяет организовывать связь как внутри учреждения так и входящую-исходящую связь с "внешним миром", как посредством традиционных двухпроводных абонентских линий и цифровых ISDN линий так и через IP сеть т.е. через интернет.
..
ПОДГОТОВКА ЗВУКОВЫХ ФАЙЛОВ
..
Если Asterisk PBX был установлен на Linux Ubuntu из менеджера пакетов Synaptic, например, как это описано в Linux Ubuntu. Установка Asterisk PBX, то для русской озвучки все звуковые файлы из директории "/usr/share/asterisk/sounds/ru" нужно скопировать с заменой в папку "/var/lib/asterisk/sounds/en". Так проще всего произвести русификацию, хотя везде в настройках по умолчанию будет стоять английский язык "en", но зв. файлы то теперь то на русском языке.
Также, для воспроизведения фоновой музыки во время ожидания и для тестового добавочного номера для проверки связи из папки "/usr/share/asterisk/sounds/ru" в папку "/var/lib/asterisk/sounds/en" я скопировал звуковой(ые) файл(ы) фоновой музыки, которые я буду использовать.
В файл конфигурации диалплана "extensions.conf" в контекст "loc" добавим тестовый внутренний номер "777" для тестового воспроизведения музыки. После настройки и подключения любых телефонных аппаратов будем звонить на этот номер и слушать музыку для проверки:
exten => 777,1,Answer()
exten => 777,n,Playback(<имя звукового файла без расширения>)
exten => 777,n,Hangup()
В первой строчке происходит ответ на вызов и проключается голосовой канал, во второй воспроизводится указанный звуковой файл, формат "wav" или "gsm" выбирается автоматически или какой формат есть. В третей строчке принудительно выполняется разъединение после окончания воспроизведения.
После внесения изменений не забываем сохранить отредактированный(е) файл(ы) конфигурации и перезагрузить конфигурацию Asterisk PBX из них командой "sudo asterisk -rx 'reload'".
Я сконвертировал скачанный звуковой подкаст Мисс Моник из формата "mp3" в формат, пригодный для воспроизведения в голосовой канал. Предварительно качаем пакеты для этого:
$ sudo apt update
$ sudo apt install sox libsox-fmt-mp3
Конвертируем:
sox mmq_new_fgrand.mp3 -c 1 -b 16 -r 8000 mmq_nfg.wav
Такая техно музыка не лучшим образом подходит для фоновых воспроизведений в Asterisk PBX, но мне было интересно посмотреть какое будет качество, ссылка на то что получилось в скобках (https://disk.yandex.ru/d/iKgdEQgJ6gk_kQ).
..
ПРОСТОЕ ГОЛОСОВОЕ МЕНЮ
..
Вначале нужно написать немного про контексты что это такое и для чего они. Контексты используются для того чтобы разграничить вызовы между собой по уровню доступа. Например, для того чтобы одни внутренние номера и соответственно телефоны не могли звонить на городские и/или междугородние линии, а чтобы другие могли. Также, все входящие вызовы могут соединяться только со внутренними номерами и не должны делать обратные вызовы на город и межгород, иначе неожиданно прилетит большой счёт за междугороднюю связь. Если бы контекстов не было, то такое можно было бы делать, а это неправильно. Вот в двух словах для чего нужны контексты.
Ниже схематическое изображение входящей связи через простое голосовое меню.
Контекст для входящих вызовов, который был создан ранее в Asterisk PBX. Подключаемся к SIPNET, меняем на следующей:
[inc]
exten _X.,1,Goto(inc,s,1)
exten => s,1,Answer()
exten => s,n,Read(iext,beep&hello&vm-press&telephone-number,3,,3,20)
exten => s,n,Goto(loc,${iext},1)
exten => s,n,Hangup()
В первой строчке при вызове любого номера вызов перенаправляем на виртуальный внутренний номер "s" (сокр. от "same") входящего контекста "inc", который состоит из 4х последующих строчек. В первой в "Answer" происходит ответ по каналу и проключение голосового канала. Во второй в "Read" воспроизводится приветствие, после которого ожидается набор внутреннего номера из 3х цифр. В третей в "Goto" выполняется переход во внутренний контекст "loc" на набранный внутренний номер, в котором происходит вызов внутреннего телефона через соответствующий внутренний номер:
[loc]
exten => _1XX,1,Dial(SIP/${EXTEN},60,3600)
exten => _1XX,n,Hangup()
В последней строке везде и всегда ставлю приложение "Hangup", которым выполняется разъединение в любом случае, чтобы не завис открытый канал и т.п.