====== Приложение 0000444 (Askozia) ====== Запрос истории факсов за период. {{:handbook:miko_edition:app_0000444.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'); $zapros="SELECT a.calldate, a.src,a.dst, a.lastdata, a.uniqueid, a.lastapp, a.InternalCalleridNum FROM (SELECT * FROM cdr where calldate BETWEEN \"$date1\" AND \"$date2\") AS a WHERE a.userfield!=\"\" AND (a.InternalCalleridNum=\"FAXin\" OR a.InternalCalleridNum=\"FAXout\")"; // выгружаем рещультат запроса в файл $file_name = $agi->config['phpagi']['tempdir'].md5(uniqid(uniqid(rand(),1))); exec("sqlite3 -separator '@.@' $db '$zapros' > $file_name"); // ------------------------------------------------------------------ // 2. Обрабатываем временный файл и отправляем данные в 1С $handle = fopen($file_name, "r"); // необходимо отправлять данные пачками по 15 шт. $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", "FaxFromCDR,Channel:$chan,Date:$date1,Lines:$result"); $result = ""; $ch = 1; } $ch = $ch + 1; } // проверяем, есть ли остаток данных для отправки if(!$result == ""){ $agi->exec("UserEvent", "FaxFromCDR,Channel:$chan,Date:$date1,Lines:$result"); } // чистим временные файлы fclose($handle); unlink($file_name); // завершающее событие пакета, оповещает 1С, что следует обновить историю $agi->exec("UserEvent", "Refresh1CFAXES,Channel:$chan,Date:$date1"); } // отклюаем запись CDR для приложения $agi->exec("NoCDR", ""); // ответить должны лишь после выполнения всех действий // если не ответим, то оргининация вернет ошибку $agi->answer(); $agi->Hangup(); ?>​ [[handbook:miko_edition|Обратно к описанию...]] ===== Прочее ===== [[http://wiki.miko.ru/doc:panel1ccrm:asterisk_config:faxhistory|Пример приложения для прочих сборок Asterisk]]