Asterisk
October 2012 30

Отчет о пропущенных за день звонках на почту

Потребовался скрипт для одного из клиентов, для уведомления на почту о пропущенных за день звонках. Возможно он и не сильно мудреный, но думаю и другим может пригодиться. В запросе выбираются данные о неотвеченных входящих звонках за вчерашний день. Такая информация довольно актуальна многим организациям, ведь если клиенты не дозвонились им, могут дозвониться другим. На сервере установлен Asterisk 1.6, СУБД MySQL

Вот сам скрипт:
<?php

/* Переменные для соединения с базой данных */ 
$hostname = "localhost"; 
$username = "dbuser"; 
$password = "dbpass"; 
$dbName = "dbname"; 

/* Таблица MySQL, в которой хранятся данные */ 
$cdrtable = "cdr"; 

/* Переменные для определения вчерашней даты */ 
$time = mktime(date('H'), date('i'), date('s'), date('m'), date('d')-1, date('Y'));
$ydate = date("d.m.Y", $time);

/* создать соединение */ 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); 

/* выбрать базу данных. Если произойдет ошибка - вывести ее */ 
mysql_select_db($dbName) or die(mysql_error());

/* запрос данных . номерация у нас трехзначная, поэтому LENGTH(  `src` ) >3, отсекаем исходящие вызовы */ 
$query = "SELECT  `dst` ,  `src` ,  `duration` ,  `dstchannel` ,  `calldate`
	  FROM  `cdr`
	  WHERE DATE_SUB( CURDATE( ) , INTERVAL 1 DAY ) <=  `calldate`
		AND CURDATE( ) >  `calldate`
		AND  `disposition` =  'NO ANSWER'
		AND LENGTH(  `src` ) >3"; 

/* Выполнить запрос. Если произойдет ошибка - вывести ее. */ 
$res=mysql_query($query) or die(mysql_error());

/* Как много нашлось строк */ 
$number = mysql_num_rows($res); 

/* заголовок письма */ 
$mes="Отчет о пропущенных вызовах за $ydate.\r\n\r\n";

/* готовим текст письма*/ 
if ($number == 0) { 
  $mes .= "Пропущенных вызовов не было"; 
} else { 
  
  /* Получать по одной строке из таблицы в массив $row, пока строки не кончатся */  
  while ($row=mysql_fetch_array($res)) { 
    $mes .= "   ".$row['calldate'].". От ".$row['src'];
    $mes .= " Абонент ".mb_substr($row['dstchannel'],4,3);
    $mes .= ". Ожидание  ".$row['duration']." сек.\r\n"; 
  } 
}
 
/* Отправляем письмо */ 
mail('admin@mail.domain', $ydate.' report', $mes);
?> 


Постарался комментировать достаточно подробно, если что не будет работать, спрашивайте.

Пример письма:

Отчет о пропущенных вызовах за 29.10.2012.

2012-10-29 11:46:38. От 4959819231 Абонент 109. Ожидание 45 сек.
2012-10-29 13:18:45. От 4956103380 Абонент 104. Ожидание 47 сек.
2012-10-29 14:33:13. От 4959819331 Абонент 104. Ожидание 53 сек.
2012-10-29 16:58:40. От 9030293453 Абонент 101. Ожидание 12 сек.
0
13.6k 53
Comments 17
Top of the day