История храниться в базе данных sqlite3. Из за особенностей данной СУБД, с файлом единовременно может работать только один процесс.
Файл базы данных расположен тут:
/storage/usbdisk1/mikopbx/astlogs/asterisk/cdr.db
Напрямую к базе данных обращаться не рекомендую. Правильно:
Сперва описываем запрос:
$miko_result_in_file = true;
$filter = [
'start BETWEEN :date1: AND :date2: AND (src_num IN ({numbers:array}) OR dst_num IN ({numbers:array}) )',
'bind' => [
'numbers' => $this->vars['numbers'],
'date1' => $this->vars['date1'],
'date2' => $this->vars['date2'],
],
'group' => 'linkedid',
'columns' => 'linkedid',
];
$add_query = [
'columns' => 'start,src_num,dst_num,src_chan,dst_chan,billsec,disposition,UNIQUEID,recordingfile,linkedid,did',
'linkedid IN ({linkedid:array})',
'bind' => [
'linkedid' => null,
],
'limit' => 300,
];
$filter['add_pack_query'] = $add_query;
$filter['miko_result_in_file'] = $miko_result_in_file;
Далее выполняем его через сервер очередей
$client = new BeanstalkClient(WorkerCdr::SELECT_CDR_TUBE);
$message = $client->request(json_encode($filter, JSON_THROW_ON_ERROR), 2);
Примеры можно посмотреть в исходном коде:
- Последовательная загрузка истории в Панель телефонии ред. 1.0
- Запрос по периоду