Создание Telegram – бота для Asterisk
Cоздаем бота в Телеграме. Воспользуйтесь нашим пошаговым материалом по созданию бота, который доступен по ссылке ниже.
Выполнив все шаги, которые указаны в пункте «Создание бота в Telegram» – возвращайтесь сюда и переходите к следующему шагу.
PHP – скрипт
Скрипт, который будет отвечать за отправку отчетности в Telegram будет написан на php. Код представлен ниже. Комментарии указаны после решетки #
:
<?php #выводим дату в адекватном формате; function rus_date() { $translate = array( "am" => "дп", "pm" => "пп", "AM" => "ДП", "PM" => "ПП", "Monday" => "Понедельник", "Mon" => "Пн", "Tuesday" => "Вторник", "Tue" => "Вт", "Wednesday" => "Среда", "Wed" => "Ср", "Thursday" => "Четверг", "Thu" => "Чт", "Friday" => "Пятница", "Fri" => "Пт", "Saturday" => "Суббота", "Sat" => "Сб", "Sunday" => "Воскресенье", "Sun" => "Вс", "January" => "января", "Jan" => "Янв", "February" => "февраля", "Feb" => "Фев", "March" => "марта", "Mar" => "Мар", "April" => "апреля", "Apr" => "Апр", "May" => "мая", "May" => "Мая", "June" => "июня", "Jun" => "Июн", "July" => "июля", "Jul" => "Июл", "August" => "августа", "Aug" => "Авг", "September" => "сентября", "Sep" => "Сен", "October" => "октября", "Oct" => "Окт", "November" => "ноября", "Nov" => "Ноя", "December" => "декабря", "Dec" => "Дек", "st" => "ое", "nd" => "ое", "rd" => "е", "th" => "ое" ); if (func_num_args() > 1) { $timestamp = func_get_arg(1); return strtr(date(func_get_arg(0), $timestamp), $translate); } else { return strtr(date(func_get_arg(0)), $translate); } } #формируем переменные: $hostname = "localhost"; #на каком хосте располагается Asterisk; $username = "имя_пользователя"; #имя созданного пользователя, который имеет доступ к БД; $password = "пароль_пользователя"; #пароль, указанного пользователя; $dbName = "asteriskcdrdb"; #оставляем без изменений; $token = "Telegram_API"; #ваш API - токен для доступа к Telegram - боту; $chat_id = "чат_ID"; #идентификатор чата; $today = date('y-m-d'); #сегодняшняя дата в подходящем формате (y-m-d); $did = "номер_DID"; #ваш номер на который звонят клиенты (DID). Например, 74996491913; $noanswer = 0; #переменная, в которую мы будем записывать количество неотвеченных вызовов; #парсим данные через SQL по звонкам mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); $query = "SELECT DISTINCT `clid` ,`dst` ,`duration` , `dstchannel` , `calldate` , `disposition` FROM `cdr` WHERE `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59' AND `did` = '$did' GROUP BY `clid`;" ; $res=mysql_query($query) or die(mysql_error()); $number = mysql_num_rows($res); while ($row=mysql_fetch_array($res)) { if ($row['disposition'] == 'NO ANSWER') $noanswer = $noanswer + 1; } #Оправляем в телеграм if ($noanswer != 0) {$percentage = round(100 * ($noanswer / $number));} else #делить на ноль это моветон :) поэтому, делаем проверку; { $percentage = 0; }; $percentage = ''.$percentage.'%'; $date_rus = rus_date("j F"); $hello = "<b>Добрый вечер</b>, уважаемые коллеги! За сегодня, <b>$date_rus</b>, было уникальных звонков - "; $missed = "Из них пропущено - "; $missed_percent = "Процент пропущенных вызовов от общего числа - "; $arr = array( $hello => $number, $missed => $noanswer, $missed_percent => $percentage, ); foreach($arr as $key => $value) { $txt .= "".$key." <b>".$value."</b>%0A"; }; fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); ?>
Укажите ваши данные в соответствующие переменные и сохраните файл как asterisktelegram.php. Далее, закидываем файл в директорию /home
.
После этого, введите следующие команды в консоль сервера:
chmod 755 /home/asterisktelegram.php dos2unix /home/asterisktelegram.php
Теперь остается только запланировать выполнение нашего скрипта с помощью cron
. Мы хотим выполнять скрипт по будням, с понедельника по пятницу в 19:00. Открываем cron командой:
crontab –e
Добавляем туда следующую строчку:
00 19 * * 1-5 /usr/bin/php /home/asterisktelegram.php
Ждем окончания рабочего дня и проверяем, что у нас получилось :)