====== Приложение 0000555 (Askozia) ====== Запрос истории звонков за период. {{:handbook:miko_edition:app_0000555.png|}} 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|Обратно к описанию...]] ===== Прочее ===== [[http://wiki.miko.ru/doc:panel1ccrm:asterisk_config:callhistory|Пример приложения для прочих сборок Asterisk]]