Итак сделал такую систему, может пригодиться кому, указывайте на недочеты и что еще можно добавить.
У нас должно быть установлено два Астерикса первый основной который мы и будем проверять, второй который будет делать тестовый звонок.
Так же мы будем использовать БД MySQL и AMI
Данные в БД
Код: Выделить всё
-- Структура таблицы `pbx_test`
--
CREATE TABLE `pbx_test` (
`id` int(11) NOT NULL,
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `pbx_test`
--
ALTER TABLE `pbx_test`
ADD PRIMARY KEY (`id`),
ADD KEY `id` (`id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `pbx_test`
--
ALTER TABLE `pbx_test`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
php скрипт который будет дергать AMI
Код: Выделить всё
<?php
# --- define globals ---
$strhost = "127.0.0.1";
$strport = "5038";
$timeout = "10";
$errno=0 ;
$errstr=0 ;
$sconn = fsockopen ($strhost, $strport, $errno, $errstr, $timeout) or die("Connection to $strhost:$strport failed");
if (!$sconn) { echo "$errstr ($errno)<br>\n"; }
else {
fputs ($sconn, "Action: login\r\n");
fputs ($sconn, "Username: *******\r\n");
fputs ($sconn, "Secret: ***********\r\n");
fputs ($sconn, "Events: off\r\n\r\n");
usleep(300);
fputs ($sconn, "Action: Originate\r\n");
fputs ($sconn, "Channel: SIP/PBX1/888\r\n");
fputs ($sconn, "Callerid: 888\r\n");
fputs ($sconn, "Timeout: 30000\r\n");
fputs ($sconn, "Context: testpbx\r\n");
fputs ($sconn, "Exten: 700\r\n");
fputs ($sconn, "Priority: 1\r\n\r\n");
fputs ($sconn, "Async: yes\r\n\r\n" );
fputs ($sconn, "Action: Logoff\r\n\r\n");
usleep (300);
fclose ($sconn);
}
?>
php скрипт который сравнивает данные и производит действие (например шлет письмо)
Код: Выделить всё
#!/usr/bin/php
<?php
// определяем начальные данные
$db_host = '127.0.0.1';
$db_name = '*****';
$db_username = '*************';
$db_password = '****************';
// соединяемся с сервером базы данных
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
// выбираем значения из таблицы
$qr_result = mysql_query("SELECT * FROM pbx_test ORDER BY id DESC LIMIT 1")
or die(mysql_error());
// выводим данные таблицы MySQL
while($data = mysql_fetch_array($qr_result)){
$settime = $data['time'] ; }
// закрываем соединение с сервером базы данных
mysql_close($connect_to_db);
// выводим системное время
$systemtime=date("Y-m-d H:i:s");
// сравниваем время
$seconds = strtotime($systemtime) - strtotime($settime);
// echo $seconds;
// Если разница более 150 сек выполняем действие
if ($seconds > 150) mail("123@123.123", "PBX_Alarm", "Alarm Alarm");
?>
В диалплане проверяемого сервера
Код: Выделить всё
exten => 888,1,NoCDR()
exten => 888,2,Set(timetest=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten => 888,3,MYSQL(Connect connid ****** **** ********* *******)
exten => 888,4,MYSQL(Query resultid ${connid} INSERT INTO pbx_test (`id`, `time`) VALUES (NULL, ${timetest}))
exten => 888,5,MYSQL(Disconnect ${connid})
exten => 888,6,Hangup
php скрипты добавляем в cron, у меня период в 2 минуты стоит.