Установка Freepbx из скрипта

В противовес официальному скрипту установки я решил сделать скрипт установки FreePBX 16 и Asterisk 18 из исходников на Ubuntu Linux 24.04. После тестов с 20 версией Asterisk всё заработало и теперь там собирается 20 версия. Сначала это была версия для собственных нужд, но после решил сделать и публичную, вырезав лишнее. Небольшое разъяснение Скрипт разбит на функции: preinstall install_dahdi install_libpri install_asterisk install_apache_php install_mariadb_con install_nodejs install_freepbx install_cdr set_firewall set_rinetd set_tftp inst_scripts customize Лишнее можно закомментировать перед запуском скрипта....

14 April 2025 · 2 min · Dmitriy Q

Умная маршрутизация вызовов

Чтобы разгрузить секретаря, на которого валится множество вызовов с голосового меню решил сделать умную маршрутизацию чтобы вызовы клиентов направлять на звонивших им операторов, в том числе полезно учитывая множество переадресаций на сотовые в компании. Решил зайдествовать func_odbc - добавляем в файл /etc/asterisk/func_odbc.conf: ; это уже должно быть там [general] dsn=asteriskcdrdb prefix=ODBC ;а это наша функция [MOBILE] writehandle=asteriskcdrdb synopsis=The function searches for the extension that last dialed this number. syntax=${CALLERID(number):-10} readsql=SELECT cnum FROM cdr WHERE dst like '%${ARG1}' ORDER BY calldate DESC LIMIT 1 Добавляем в /etc/asterisk/extensions_custom....

18 February 2025 · 1 min · Dmitriy Q

Настройка телефонов SCCP (Cisco) Asterisk

В настройках FreePBX → Extensions → Add Estension → Другое устройство → Сохранить. Внутренний номер пользователя — номер, который нам требуется создать, у нас 2134; Отображаемое имя — имя, например «***** Anna»; Псевдоним номера ИД — не трогаем; Псевдоним SIP → номер что мы вводили во внутреннем номере - 2134; Прокручиваем страничку ниже Устройство использует custom технологию dial → SCCP/2134 Сохранить (Submit). Далее перемещаемся в консоль и будем исправлять файлы sccp_extensions....

25 December 2024 · 2 min · Dmitriy Q

Multicast Paging в Asterisk

В настройках Yealink указываем как на скриншоте - адрес и порт, которые будет прослушивать телефон на наличие мультикаста. В диалплан прописываем экстен для вызова пейджинга: [ext-paging] exten => *91,hint,Custom:PAGE91 exten => *91,1,NoOP(Multicast Paging) same => n,Set(CONNECTEDLINE(name-charset,i)=utf8) same => n,Set(CONNECTEDLINE(name,i)=Selector) same => n,Set(CONNECTEDLINE(num,i)=*91) same => n,Wait(1) same => n,Page(MulticastRTP/basic/239.0.0.1:6061) same => n,Hangup() И теперь при вызове *91 на телефонах, у кого указаны подобные настройки, будет срабатывать пейджинг.

26 November 2024 · 1 min · Dmitriy Q

Простой пример работы AGI

Рассмотрим работу AGI на примере скрипта: #!/usr/bin/php7.3 -q <?php require('phpagi.php'); $AGI = new AGI(); $filepath = "/var/www/html/statistic.local/"; //Путь к файлу $filedb = $AGI->request['agi_arg_1']; //Имя файла с базой $ls = $AGI->request['agi_arg_2']; //Лицевой счет абонента $fullfile = $filepath . $filedb; $arr = file($fullfile); foreach($arr as $v){ if (strpos($v,$ls,0) !== false){ $string = $v; $ls_array = explode('|', $string); if ($ls == $ls_array[2]){ $dolg = $ls_array[6]; break; } } } $summa = explode('.',$dolg); $summa_rub = (int) $summa[0]; $summa_kop = (int) $summa[1]; if ($summa_rub % 10 == 1){ $sound_r = "rouble"; } elseif (in_array(($summa_rub % 10), [2, 3, 4])){ $sound_r = "roublya"; } elseif (in_array(($summa_rub % 10), [5,6,7,8,9,0])){ $sound_r = "roubley"; } if ($summa_kop % 10 == 1){ $sound_k = "copeck"; } elseif (in_array(($summa_kop % 10), [2, 3, 4])){ $sound_k = "copeck-i"; } elseif (in_array(($summa_kop % 10), [5,6,7,8,9,0])){ $sound_k = "copecks"; } $AGI->set_variable('DOLG',$dolg); $AGI->set_variable('DOLG_R',$summa[0]); $AGI->set_variable('DOLG_K',$summa[1]); $AGI->set_variable('sound_r',$sound_r); $AGI->set_variable('sound_k',$sound_k); ?...

25 November 2024 · 2 min · Dmitriy Q

Оценка качества обслуживания в Asterisk (альтернатива)

Альтернативное решение для оценки качества (на примере 200 очереди). В файл /etc/asterisk/queues_post_custom.conf вносим редакцию для 200 очереди чтобы получить номер ответившего агента (можно и проще, но не срабатывало с IAX): [200](+) setinterfacevar=yes Создаем таблицу service_survey в БД asteriskcdrdb для значений: CREATE TABLE `service_survey` ( `num` varchar(20) DEFAULT NULL, `operator` varchar(20) DEFAULT NULL, `queue` varchar(20) DEFAULT NULL, `valuation` varchar(20) DEFAULT NULL, `date` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; В func_odbc.conf добавляем функцию записи в базу: [qam] writehandle=asteriskcdrdb writesql=INSERT INTO service_survey (num,operator,queue,valuation,date) VALUES ('${ARG1}','${ARG2}','${ARG3}','${ARG4}',NOW()) Клепаем само меню в /etc/asterisk/extensions_custom....

25 November 2024 · 2 min · Dmitriy Q

Оценка качества обслуживания в Asterisk

Поступил заказ сделать модуль оценки работы оператора и качества оказания услуги. За основу взял статью merion networks. Всё делалось на FreePBX 15 и Asterisk 18. В файл /etc/asterisk/queues_post_custom.conf вносим редакцию для нужной очереди (например 500) чтобы получить номер ответившего агента (можно и проще, но не срабатывало с IAX): [500](+) setinterfacevar=yes Клепаем само меню в /etc/asterisk/extensions_custom.conf: [assessment] exten => _X.,1,Answer() same => n,Set(CHANNEL(language)=ru) same => n,Set(COUNT=1) same => n,Wait(1) same => n,Playback(custom/qam-intro) same => n,Set(TIMEOUT(digit)=1) same => n,NoOP(Count: ${COUNT}) same => n,GotoIf($["${COUNT}" = "1"]?...

22 November 2024 · 3 min · Dmitriy Q

Обзор возможностей Asterisk

Внутренние номера Внутренние номера в Asterisk могут быть 3-х, 4-х и более значными, могут быть и двух, но двухзначными принято делать коды функций, хоть они как правило и начинаются с символа *. Каждому номеру возможно задать описание с дополнительной информацией — будь то должность человека или его Фамилия и Имя. Естественно каждому номеру необходим пароль. Так же имеется возможность распределять номерам имеющиеся внешние исходящие номера. Начиная с 13 версии появилась возможность мультирегистрации для внутренних номеров — это значит что под одним внутренним номером может быть зарегистрировано несколько устройств: настольный телефон и софтфон на смартфоне например....

13 November 2024 · 6 min · Dmitriy Q

Модуль детализации звонков

Выглядит он так: Задается множество фильтров по различным параметрам, без фильтров покажет все вызовы начиная с самых последних: При наличии значка возможно прослушать или скачать запись кликнув по соответствующей кнопке. Возможна фильтрация по содержащимся цифрам в номере: Причем фильтрация возможна по содержанию цифр внутри номера, в начале или конце и с использованием инверсии «Не». При включении «Дополнительных фильтров» возможна фильтрация по входящему номеру (DID) Параметр в Куда звонили означает конечную точку вызова, s - означает что вызов пришел куда-то на голосовое меню или прочее направление и далее не продвинулся, а номер - означает конечного оператора....

13 November 2024 · 1 min · Dmitriy Q

Работа с CLI Asterisk

CLI (Command Line Interface) - очень полезный инструмент диагностики и отладки при работе с Asterisk. Войти в него можно командой asterisk -rvv (или sudo asterisk -rvv), где количество v (verbose) означает детальность вывода, а r подключение к Asterisk. При этом отобразится пользователь, от которого запущен Asterisk, его версия, имя машины, на которой запущено приложение и pid процесса. *CLI> означает интерактивный режим работы в CLI Asterisk. Список всех доступных для Вашего Asterisk команд можно узнать командой core show help....

2 November 2024 · 9 min · Dmitriy Q