Друг, не так давно мы рассказывали про Asterisk REST Interface. Это новый API для Asterisk. Сегодня хотим рассказать о том, как реализовать просто мониторинг SIP – устройств с помощью ARI и отправкой событий в Telegram.
Включаем ARI
Откроем FreePBX и перейдем в раздел Settings → → Advanced Settings и находим раздел Asterisk REST Interface:
Указываем следующие параметры:
- Enable the Asterisk REST Interface - Yes;
- ARI Username - заполняем имя нашего пользователя;
- Allowed Origins - *;
- ARI Password - пароль для пользователя;
- Pretty Print JSON Responses - Yes;
- Web Socket Write Timeout - 100;
Запоминаем логин и пароль и идем вперед.
Сделать Telegram бота
Далее, вам нужно создать Telegram – бота. Для этого, перейдите по ссылке ниже. Вернитесь сюда с токеном и идентификатором чата :)
PHP - скрипт
Делаем скрипт, который будет реализовывать мониторинг пиров. Вот его листинг:
<?php #ваш токен и идентификатор чата в Telegram $token = "токен"; $chat_id = "id_чата"; #параметры подключения к REST API Asterisk $json_url = 'http://localhost:8088/ari/endpoints/SIP'; $username = 'ARI_Username'; // логин $password = 'ARI_Password'; // пароль #обращаемся за данными в REST $ch = curl_init($json_url); $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_USERPWD => $username . ":" . $password, CURLOPT_HTTPHEADER => array('Content-type: application/json') , ); curl_setopt_array( $ch, $options ); $result = curl_exec($ch); //получаем JSON результат $result = json_decode($result, true); #формируем массив, который будем отправлять в Telegram $telegram = array( 0 => array ( 'Проблемы с SIP устройствами.' => 'Список:', )); $num = 1; //print_r($result); foreach($result as $number => $massiv) { foreach($massiv as $key => $value) { #определяем элементы, которые не находятся в статусе online if (($key == 'state') && ($value != 'online')) { $telegram[$num] = array( 'Устройство '.$massiv['resource'].'' => 'в статусе '.$massiv['state'].'', ); $num = $num + 1; } else { }}}; #отправляем данные в Telegram в случае, если найдены устройства в статусе, отличном от online if ($num > 1) { foreach($telegram as $key => $value) { foreach($value as $dev => $status) { $txt .= "<b>".$dev."</b> ".$status."%0A"; }}; fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");};
В случае скачивания, поменяйте расширение файла с .txt на .php
Закидываем скрипт в любую удобную директорию (файл сохраните как ari_monitoring.php), например /home/scripts
и планируем его выполнение в cron:
crontab –e
И добавляем мониторинг раз в 2 минуты:
*/2 * * * * /usr/bin/php /home/scripts/ari_monitoring.php
Проверка
В результате, если устройство станет доступно, мы получим следующее уведомление: