Страница 1 из 4

[Модуль] Asterisk (app_asterisk)

Добавлено: Пн фев 08, 2016 9:46 pm
Alien
Бета версия

Адрес репозитория https://github.com/szolenko/app_asterisk.git

Модуль для интеграции Мажордомо и платформы IP-телефонии Asterisk.

Реализовано:
Просмотр истории звонков. Настройка имени таблицы и пути хранения файлов записей разговоров. Подробности по созданию таблицы CDR и настройки Asterisk можно посмотреть здесь или здесь, навскидку.

Подключение к серверу астериск через phpagi. Прослушивание событий. При получении нового для МД события оно записывается новым методом в класс AsteriskAMI и объект Asterisk с комментарием в виде полученного от сервера массива данных. При получении уже существующего события запускается соответствующий метод.

В разработке:

В планах:
Мониторинг телефонов.
Управление диалпланом.

История:
08.02.2016 Бета версия. История звонков.
20.02.2016 Исправлен фильтр звонков. Добавлено удаление звонков.
25.02.2016 Мониторинг событий сервера, создание методов в классе астериск.
23.03.2016 Модуль переработан, добавлена отправка команд в астериск. НЕСТАБИЛЬНАЯ РАБОТА ЦИКЛА!
25.03.2016 Вернулся к мульти-методам. Цикл работает стабильно.
СкриншотыПоказать
setup.jpg
setup.jpg (116.26 КБ) 13822 просмотра
usage.jpg
usage.jpg (119.42 КБ) 13822 просмотра

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 1:09 am
Geban
Этак вы Elastix сделаете ) Астериском можно рулить через AMI. Достаточно простой обмен,но в коде будет очень много парсинга строк ответа от станции.

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 9:47 am
Alien
:) Сомневаюсь в наличии достаточных знаний и времени. Но несколько автоматизировать не мешает.

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 11:02 am
Geban
ну зачем же так... например мониторить состояние телефонов не сложно. Нужно отправить астеру строку event dump cache DeviceState в ответ получится много вот таких блоков

Код: Выделить всё

Event: DeviceState
Device: SIP/138
State: 1
Cachable: 1
EntityID: 00:1a:64:d1:24:c5
все что нужно отсюда это строка Device в ней номер и State это состояние где 1 - Idle (в режиме ожидания) 2 - Busy (занят, разговаривает). Остальные состояния легко гуглятся.

Вот код который работает и по сей день и работает уже почти 2 года. По определенным причинам связанным с безопасностью не стал использовать AMI и запустил скрипт на сервере где живет астериск

Код: Выделить всё

$test = shell_exec('asterisk -rx \'event dump cache DeviceState\'');

$block = explode("Event", $test);
for($i=0; $i<sizeof($block);$i++)
{
    $wrets = $block[$i];
preg_match_all('/SIP\/([0-9][0-9][0-9])/',$wrets,$peers,PREG_SET_ORDER);
preg_match_all('/State:(.*)/',$wrets,$state,PREG_SET_ORDER);

if(isset($peers[0][0])) {

$ps = "Unknown";

if($state[0][1] == '1') {$ps = "Idle";};
if($state[0][1] == '2') {$ps = "BUSY";};

echo $peers[0][0]."\r\n";
echo "State:".$state[0][1]."\r\n";
echo "State:".$ps."\r\n";
 {
{
 

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 12:11 pm
Alien
Спасибо. О безопасности я высказывал свое мнение в ветке MAJORDOMO + VoIP.
Давать вебу доступ на запуск от имени рута или астериска рискованно. Нужны обходные безопасные решения.

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 12:13 pm
Geban
согласен, опасно. Но в моем случае сервер находится во внутренней сети и не имеет выхода наружу..как и входа снаружи.

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 12:21 pm
Alien
Пробовал я настраивать себе sip-фон снаружи, так что сервер светился в инет. Установил, естественно, fail2ban и наблюдал картину постоянных попыток взлома. Так что на данный момент тоже закрыл доступ.

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 1:11 pm
Geban
я так с ami попал разок... хорошо вовремя заметил в консоли попытки звонить на странные номера.. потушил канал вовремя..

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 1:13 pm
Alien
В чем я сомневаюсь,так это в самой структуре. Делать ли ее стандартной, как в примерах по астериску или изменяемой. Имеется в виду наименования таблиц, колонок и прочего RealTime asterisk. Изначально, по таблице CDR, написал стандартно, потом решил что имя таблицы и колонок у других пользователей могут отличаться и добавил тонкую настройку. А вот теперь думаю а стоило ли?
Если модуль начнет разрастаться, то по каждому чиху тогда придется тонкую настройку делать. И на users, и на voicemail и на мало ли что напишется. Может все-таки писать по рекомендациям asterisk и давать ссылки на мануалы по настройке?
Хотелось бы услышать мнение заинтересованных лиц :)

Re: Модуль Asterisk

Добавлено: Вт фев 09, 2016 1:16 pm
Alien
а ami планирую через phpagi реализовывать. у него доступ четко ограничен локальной машиной и правами пользователя. а модуль уже через него будет работать с asterisk.