Внимание! Документация к новой MikoPBX доступна по ссылке

Инструменты пользователя

Инструменты сайта


handbook:miko_edition:0000555

Приложение 0000555 (Askozia)

Запрос истории звонков за период.

<?php
/*-----------------------------------------------------
// ООО "МИКО" // 2013-03-22 
// v.2.4 // 1С_CDR // 0000555 
// Передача истории звоноков в 1С 
-------------------------------------------------------
Скрипт протестирован на Askozia v2:
Asterisk 1.8.4.4
PHP 4.4.9
sqlite3 -version 3.7.0
AGI phpagi.php,v 2.14 2005/05/25 20:30:46
-------------------------------------------------------*/
require("phpagi.php");
require("guiconfig.inc");
 
function GetVarChannnel($agi, $_varName){
  $v = $agi->get_variable($_varName);
  if(!$v['result'] == 0){
    $agi->verbose($_varName.' ---> '.$v['data'], 10);
    return $v['data'];
  }
  else{
    $agi->verbose($_varName.' not set', 10);
    return "";
  }
} // GetVarChannnel($_agi, $_varName)
 
$agi = new AGI();
 
$EXTEN = GetVarChannnel($agi, "EXTEN");
if($EXTEN == "h"){
    // это особенность работы с Askozia, для избежания зацикливания
    // http://igorg.ru/2011/10/22/askozia-opyt-ispolzovaniya/
}else{
 
// 1.Формируем запрос и сохраняем результат выполнения во временный файл
$disk = storage_service_is_active("astlogs");
$db = $disk['mountpoint'] . "/askoziapbx/astlogs/asterisk/master.db";
 
$chan       = GetVarChannnel($agi,'v1');
$date1      = GetVarChannnel($agi,'v2');
$date2      = GetVarChannnel($agi,'v3');
$numbers = explode("-",GetVarChannnel($agi,'v4'));
 
$zapros="SELECT 
			a.calldate,
			a.src,
			a.dst,
			a.channel,
			a.dstchannel,
			a.billsec,
			a.disposition,
			a.uniqueid 
		FROM 
         (SELECT * FROM cdr 
          WHERE calldate BETWEEN \"$date1\" AND \"$date2\") 
        AS a 
        WHERE ";
 
$rowCount = count($numbers);
for($i=0; $i < $rowCount; $i++) {
  $num = $numbers[$i];
  if($num == ""){
        continue;
  }
  if(!$i == 0)
        $zapros=$zapros." OR ";
 
  $zapros=$zapros."(( a.lastapp=\"Transferred Call\" 
                                   AND a.lastdata like \"%/$num@%\")
                    OR ((a.lastapp=\"Dial\" OR a.lastapp=\"Queue\")
                         AND (a.channel like \"%/$num-%\"
                              OR a.dstchannel like \"%/$num-%\"
                              OR a.dstchannel like \"%/$num@%\"
                              OR a.src=\"$num\"
                              OR a.dst=\"$num\")
                   ))";  }
 
// выгружаем рещультат запроса в файл
$file_name = $agi->config['phpagi']['tempdir'].md5(uniqid(uniqid(rand(),1)));
$agi->verbose("file_name = $file_name", 10);
exec("sqlite3 -separator '@.@' $db  '$zapros' > $file_name");
 
// ------------------------------------------------------------------
// 2. Обрабатываем временный файл и отправляем данные в 1С
$handle = fopen($file_name, "r");
// необходимо отправлять данные пачками по 10 шт.
$result = ""; $ch = 1;
// обходим файл построчно
while (($_data = fgets($handle, 1000)) !== FALSE) {
    // набор символов - разделитель строк
    if(! $result=="") $result = $result.".....";
 
    $_data = str_replace(" ", '\ ', $_data);
    $_data = rtrim($_data);
 
    $result = $result.$_data;
    // если необходимо отправляем данные порциями
    if($ch == 10){
        // отправляем данные в 1С, обнуляем буфер
        $agi->exec("UserEvent", "FromCDR,Channel:$chan,Date:$date1,Lines:$result");
        $result = ""; $ch = 1;
    }
    $ch = $ch + 1;
}
 
// проверяем, есть ли остаток данных для отправки
if(!$result == ""){
    $agi->exec("UserEvent", "FromCDR,Channel:$chan,Date:$date1,Lines:$result");
}
// чистим временные файлы
fclose($handle);
unlink($file_name);
 
// завершающее событие пакета, оповещает 1С, что следует обновить историю
$agi->exec("UserEvent", "Refresh1CHistory,Channel:$chan,Date:$date1");
}
 
// отклюаем запись CDR для приложения
$agi->exec("NoCDR", "");
// ответить должны лишь после выполнения всех действий
// если не ответим, то оргининация вернет ошибку 
$agi->answer(); 
$agi->Hangup();
?>​

Обратно к описанию...

Прочее

handbook/miko_edition/0000555.txt · Последние изменения: 2013/08/18 15:34 — apor