Список форумов Asterisk Forum Asterisk Forum
The Asterisk Open Source PBX - Russian Community
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ПравилаПравила   ГруппыГруппы   ИзбранноеИзбранное    LinksСсылки   РегистрацияРегистрация 
 RSSRSS   ПрофильПрофиль   Войти и проверить личные сообщения   ВходВход 

Asterisk PHP Peer Status

 
Список форумов Asterisk Forum -> Библиотека    вывод темы на печать
Предыдущая тема :: Следующая тема  
Автор Сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Пт Сен 25, 2009 15:08    Заголовок сообщения: Asterisk PHP Peer Status

Простой php скрипт для слежения за состоянием пира, периодически опрашивает астериск о состоянии заданного пира, если коннекта по каким то причинам нет - звонит на указанный заранее телефон и проигрывает сообщение о проблеме с пиром.
Может быть полезным при мониторинге состояния проблемных (или очень важных) пиров.
http://www.venturevoip.com/news.php?rssid=2217
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Obi Van



Зарегистрирован:
17.01.2007
Сообщения: 425
Откуда: Россия, г.Новочеркасск, Рост.обл

Статус: Оффлайн 

СообщениеДобавлено: Ср Сен 30, 2009 13:53    Заголовок сообщения:

Хороший скрипт. Спасибо за ссылку. Можно и к веб морде прилепить, да вообще идей масса. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Ср Сен 30, 2009 21:34    Заголовок сообщения:

если приделаешь гуй или еще чего креативного на его основе - просьба поделиться тоже Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Вс Июл 04, 2010 00:05    Заголовок сообщения:

небольшая модификация, позволяющая передавать имя пира как параметр вызова скрипта
взят из коментов, сохранен для архива.

Код:

<?
/* ============================ */
/*   PHP Asterisk Peer Status   */
/* ============================ */
/*    (C) 2009 Matt Riddell     */
/*     Daily Asterisk News      */
/* www.venturevoip.com/news.php */
/*      Public domain code      */
/* Modified by Chilling_Silence */
/* 20090915 - Takes Ext as var  */
/* ============================ */

/* Connection details */
$manager_host = "127.0.0.1";
$manager_user = "admin";
$manager_pass = "*******";

/* Default Port */
$manager_port = "5038";

/* Connection timeout */
$manager_connection_timeout = 30;

/* The Asterisk peer you would like to check */
$peer_name = $_GET["ext"];

/* The type of peer (i.e. iax2 or sip) */
$peer_type = "sip";

/* Connect to the manager */
$fp = fsockopen($manager_host, $manager_port, $errno, $errstr, $manager_connection_timeout);
if (!$fp) {
    echo "There was an error connecting to the manager: $errstr (Error Number: $errno)\n";
} else {
    echo "-- Connected to the Asterisk Manager\n";
    echo "-- About to log in\n";

    $login = "Action: login\r\n";
    $login .= "Username: $manager_user\r\n";
    $login .= "Secret: $manager_pass\r\n";
    $login .= "Events: Off\r\n";
    $login .= "\r\n";
    fwrite($fp,$login);

    $manager_version = fgets($fp);

    $cmd_response = fgets($fp);

    $response = fgets($fp);

    $blank_line = fgets($fp);

    if (substr($response,0,9) == "Message: ") {
        /* We have got a response */
        $loginresponse = trim(substr($response,9));
        if (!$loginresponse == "Authentication Accepted") {
            echo "-- Unable to log in: $loginresponse\n";
            fclose($fp);
            exit(0);
        } else {
            echo "-- Logged in Successfully\n";
            $checkpeer = "Action: Command\r\n";
            $checkpeer .= "Command: $peer_type show peer $peer_name\r\n";
            $checkpeer .= "\r\n";
            fwrite($fp,$checkpeer);
            $line = trim(fgets($fp));
            $found_entry = false;
            while ($line != "--END COMMAND--") {
                if (substr($line,0,6) == "Status") {
                    $status = trim(substr(strstr($line, ":"),1));
                    $found_entry = true;
                    if (substr($status,0,2) == "OK") {
                        $peer_ok = true;
                    } else {
                        $peer_ok = false;
                    }
                }
                $line = trim(fgets($fp));
            }
            if ($found_entry == false) {
                echo "-- We didn't get the response we were looking for - is the peer name correct? Use ?ext=XXX after the URL\n";
            } else if ($peer_ok == true) {
                echo "-- Peer looks good at the moment: $status\n";
            } else {
                /* We received a response other than ok - you can really do whatever */
                /* you want here - in this example I'm going to use the originate    */
                /* command to call me and play me the tt-monkeys sound - if I hear   */
                /* this then I know there is an issue :)                             */
                echo "-- Peer not ok ($status) - running some code\n";

                $originate = "Action: originate\r\n";
                $originate .= "Channel: Zap/g1/1234r\n";
                $originate .= "Application: Playback\r\n";
                $originate .= "Data: tt-monkeys\r\n";
                $originate .= "\r\n";
                fwrite($fp, $originate);
            }
            fclose($fp);
            exit(0);
        }
    } else {
        echo "Unexpected response: $response\n";
        fclose($fp);
        exit(0);
    }
}
?>




источник: http://www.venturevoip.com/peer-status.phps
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JackW810



Зарегистрирован:
26.11.2009
Сообщения: 43

Статус: Оффлайн 

СообщениеДобавлено: Ср Ноя 24, 2010 11:18    Заголовок сообщения:

Заинтересовал скрипт, спасибо.
Думаю его использовать для сигнализации пропадания сип провайдера. Актуально как раз для круглосуточных служб (таких как такси), там каждая минута простоя это деньги, а интернет какой бы идеальный не был, то 100 процентов что он ни разу не пропадет никто не даст.
Настроил его на пир провайдера, а отзвон через GSM шлюз. Пока на себя, а потом на хозяина конторы, пусть мучается Very Happy.
Теперь думаю как бы смоделировать пропадания интернета ему и посмотреть через сколько сработает скрипт, думаю не одобрят мои тесты.

anest
ну ты и выложил код, сидел полчаса менял &quot; на " и всеравно где-то какая-то ошибка или скобки нету или еще что-то. пришлось брать с источника.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Ср Ноя 24, 2010 20:07    Заголовок сообщения:

за что купил, за то и продаю. все претензии в /dev/null
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JackW810



Зарегистрирован:
26.11.2009
Сообщения: 43

Статус: Оффлайн 

СообщениеДобавлено: Чт Ноя 25, 2010 11:51    Заголовок сообщения:

Сегодня пропал инет. Скрипт исправно отзвонил и предупредил.
Он у меня в кронтабе каждые 10 минут запускается. Из за этого недостаток что и отзванивать будет каждые 10 минут, а если чаще ...
Возникла мысль доделать его:
Завести в базу астериска или мускула какую-то переменную которая бы как флаг срабатывала.
В PHP проверять ее, т.е. изначально флаг 0 если пропал пир то отзвонил и поставил флаг в 1, если пир ок и флаг 1 то отзвонить и сказать что все норм и обнулить флаг, в остальных случаях ничего не делать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Вт Ноя 29, 2011 17:18    Заголовок сообщения:

правильней на мой взгляд будет сделать чтобы при звонке после оповещения события (например "Транк на головной офис упал.") спрашивало бы подтвеждения того что сообщение достигнуто уха назначения и понято, например спрашивало бы "Больше не звонить? нажмите 1." если нажато - менять в базе ключ. иначе - пусть названивает каждые 10 минут - так даже лучше (ибо может там упало всё а админ спит блин).
кто доделает такой функционал - просьба поделиться исходником.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dotprint



Зарегистрирован:
03.02.2011
Сообщения: 385
Откуда: Коломна

Статус: Оффлайн 

СообщениеДобавлено: Вт Ноя 29, 2011 17:51    Заголовок сообщения:

Кстати, господа! А есть у кого-нибудь идея, как по-быстрому из php узнать device state устройств?
Или вообще что-то вроде BFL?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
pavel shlag



Зарегистрирован:
21.06.2011
Сообщения: 141

Статус: Оффлайн 

СообщениеДобавлено: Вт Ноя 29, 2011 18:40    Заголовок сообщения:

например парсить core show hint[s]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dotprint



Зарегистрирован:
03.02.2011
Сообщения: 385
Откуда: Коломна

Статус: Оффлайн 

СообщениеДобавлено: Ср Ноя 30, 2011 04:56    Заголовок сообщения:

pavel shlag писал(а):
например парсить core show hint[s]

Да, у меня кроме этих костылей в голову больше ничего и не приходило. Сам не нашел, думал более нативный способ есть.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
anest
Модератор


Зарегистрирован:
28.11.2004
Сообщения: 5636

Статус: Оффлайн 

СообщениеДобавлено: Ср Ноя 30, 2011 05:09    Заголовок сообщения:

Flood 3
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Список форумов Asterisk Forum -> Библиотека Ответить на тему
Страница 1 из 1

Добавить в Избранное

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You cannot download files in this forum