Александр Мисюрин
09.03.2020
2390

Статистика по звонкам в различные регионы, веб интерфейс

Ранее был рассмотрен способ формирования статистики, по звонкам в регионы России, однако тогда она создавалась в виде файла csv, что не всегда удобно или вообще нужно. В данной статье рассмотрим способ формирования такой статистики в веб интерфейс, также с возможностью выгрузить в файл. Подготовительные этапы можно посмотреть в статье выше, а именно создание базы регионов […]

Ранее был рассмотрен способ формирования статистики, по звонкам в регионы России, однако тогда она создавалась в виде файла csv, что не всегда удобно или вообще нужно. В данной статье рассмотрим способ формирования такой статистики в веб интерфейс, также с возможностью выгрузить в файл.

Подготовительные этапы можно посмотреть в статье выше, а именно создание базы регионов и заполнение ее из базы Россвязи.

Поскольку вывод будем осуществлять через веб-интерфейс, заполнение даты нам не нужно, получать ее будем из полей ввода.

Вывод на страницу полей ввода даты и времени:

echo "
<form action='' method=post>
Дни: <input name=date1 type='date' required> - <input name=date2 type='date' required><br />
Время: <input name=time1 type='time' value=00:00 required> - <input name=time2 type='time' value=23:59 required><br />
<input name='interval' type=submit value=Отобразить> </br>
</form>";
Окно ввода даты/времени



Окно ввода даты/времени

Далее обработчик нажатия кнопки:

if(isset($_POST['interval']))
{
$prefix = array(); //Массивы нужны для дальнейшей обработки и вывода данных.
$tel_num = array();
$billsec = array();
$region = array();
$count = array();
	$calldate1=$_POST['date1']." ".$_POST['time1'].":00";
	$calldate2=$_POST['date2']." ".$_POST['time2'].":59";
	$result = bd_bridge("asteriskcdrdb","SELECT dst, billsec FROM asteriskcdrdb.cdr where billsec>'0' and dst REGEXP '^[0-9][0-9][0-9][0-9][0-9]+' and dst like '_________%' and calldate>'".$calldate1."' AND calldate<'".$calldate2."' group by dst;");

Запросили данные из базы, теперь их необходимо обработать по аналогии с прошлой статьей:

while ($row = mysqli_fetch_array($result)) 
	{
		$len=strlen($row['dst']);
                if ($len=='11') {
                $prefix[]=substr($row['dst'], 1, 3);
                $tel_num[]=substr($row['dst'], 4);
               
                } elseif ($len=='10') {
                        $prefix[$i]=substr($row['dst'], 0, 3);
                                $tel_num[$i]=substr($row['dst'], 3);
                                $i++;
                }
	}

Префиксы и номера собраны в массивы, для обработки используем цикл for (можно использовать также foreach по желанию):

Не забываем, что таблицу необходимо создавать до цикла
echo "<table border=1><tr><td>Номер</td><td>Регион</td><td>Длительность (в сек.)</td><td>Количество вызовов</td></tr>";
		for ($i=0;$i<count($prefix);$i++) {
                $num=$prefix[$i].$tel_num[$i];
$requestsec = bd_bridge("asteriskcdrdb","SELECT SUM(billsec),count(*) FROM asteriskcdrdb.cdr where dst like '%".$num."%' and billsec<>'0' and calldate>='".$calldate1."' AND calldate<='".$calldate2."';");
        $rowsec = mysqli_fetch_array($requestsec);
        $billsec[$i]=$rowsec['SUM(billsec)'];
        $count[$i]=$rowsec['count(*)'];
//Тут получаем длительность и количество вызовов по данному номеру.
		$requestreg = bd_bridge("asteriskcdrdb","SELECT region FROM tel_codes WHERE prefix='".$prefix[$i]."' AND num_from<='".$tel_num[$i]."' AND num_to>='".$tel_num[$i]."' LIMIT 1;");
        $rowreg = mysqli_fetch_array($requestreg);
		$region[$i]=$rowreg['region'];
		echo "
		<tr>
			<td>".$num."</td><td>".$region[$i]."</td><td>".$billsec[$i]."</td><td>".$count[$i]."</td>
		</tr>
		";

		}
	echo "</table>";
Вывод данных
Вывод данных

Теперь необходимо добавить возможность выгрузки данных в csv.

Можно реализовать это аналогично вышеописанному алгоритму, просто вместо вывода на страницу добавить вывод в файл, с его последующей загрузкой, однако следует учесть, что это снова нагрузит систему.

Для загрузки файла опишем функцию в начале файла:

function file_force_download($file) {
  if (file_exists($file)) {
    // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
    // если этого не сделать файл будет читаться в память полностью!
    if (ob_get_level()) {
      ob_end_clean();
    }
    // заставляем браузер показать окно сохранения файла
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    // читаем файл и отправляем его пользователю
    readfile($file);
    exit;
  }
}

До первого запроса в базу прописываем:

$fp = fopen("/usr/src/test/regions-stat.csv", 'w');
fputcsv($fp, array('Номер', 'Регион', 'Длительность', 'Количество')); //Шапка таблицы

И вместо заполнения таблицы указываем заполнение файла:

fputcsv($fp, array($num, $region[$i], $billsec[$i], $count[$i]));

В конце обработчика выгружаем файл:

file_force_download('/usr/src/test/regions-stat.csv');
Файл .csv в UTF-8
Файл .csv в UTF-8
Демонстрация работы
Демонстрация работы
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.