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

Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 20 июл 2017, 11:26
Ferrum
Добрый день нет ли у кого готового скрипта с программными пакетами для тестирование АТС ?, задача такая звоним раз в 5 минут с одного аккаунта на софтфоне на второй аккаунт, в случае не удачи совершаем действие (например посылаем СМС).

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 20 июл 2017, 12:05
april22
Call файл ?! не пойдет ?!

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 20 июл 2017, 12:51
Ferrum
Да пойдет, есть некое количество идей как это реализовать с использованием AMI и БД, хотел посмотреть как у других это сделано.

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 20 июл 2017, 13:30
Repz
да просто сделано, в цыкле опрашиваем бд на наличие новых записей в таблице, если нашли - Originate, пишем в хеш название Channel и Uniqueid, ловим Hangup, при совпадении Channel и/или Uniqueid (по вкусу) смотрим Cause, в зависимости от Cause выполняем дальнейшие действия.

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 01 авг 2017, 07:35
Ferrum
Итак сделал такую систему, может пригодиться кому, указывайте на недочеты и что еще можно добавить.

У нас должно быть установлено два Астерикса первый основной который мы и будем проверять, второй который будет делать тестовый звонок.

Так же мы будем использовать БД 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 минуты стоит.

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 01 авг 2017, 10:35
Ferrum
Правка по скрипту для 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");
  sleep (1);

  fclose ($sconn);

  }

?>

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 01 авг 2017, 11:28
shader
а для чего это всё?

Re: Скрипт звонилка для автопроверки АТС под Linux.

Добавлено: 01 авг 2017, 11:40
fecyt
Если цель - проверить отвечает ли астериск на звонки, можно было воспользоваться sipp и запускать его кроном.