Skip to content

Commit b83bce4

Browse files
committed
Доработал REST API для получения записей разговоров
1 parent 7955315 commit b83bce4

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

Lib/PT1CCoreConf.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ public function createNginxLocations(): string
194194
public function getPBXCoreRESTAdditionalRoutes(): array
195195
{
196196
return [
197+
[GetController::class, 'getRecordsPathByIdAction', '/pbxcore/api/cdr/records-path', 'get', '/', true],
197198
[GetController::class, 'getDataAction', '/pbxcore/api/cdr/get_data', 'get', '/', true],
198199
[GetController::class, 'recordsAction', '/pbxcore/api/cdr/records', 'get', '/', true],
199200
[PostController::class,'callAction', '/pbxcore/api/fax/upload/{actionName}', 'post','/', true],

Lib/RestAPI/Controllers/GetController.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
use MikoPBX\Core\System\BeanstalkClient;
1111
use MikoPBX\Core\Workers\WorkerCdr;
1212
use MikoPBX\PBXCoreREST\Controllers\BaseController;
13+
use Modules\ModuleCleanRecords\Models\CdrRecordsData;
14+
use Modules\ModuleNotifier\Lib\Providers\CdrDbProvider;
1315

1416
class GetController extends BaseController
1517
{
@@ -60,6 +62,58 @@ public function getDataAction(): void
6062
$this->response->sendRaw();
6163
}
6264

65+
/**
66+
* Получаем список файлов записей по идентификаторам.
67+
* curl 'http://127.0.0.1/pbxcore/api/cdr/records-path?id[]=mikopbx-1751624009.210&id[]=mikopbx-1751622380.183&id[]=mikopbx-1751377388.208'
68+
* @return void
69+
*/
70+
public function getRecordsPathByIdAction(): void
71+
{
72+
$id = $this->request->get('id');
73+
if(is_string($id)){
74+
$id = [$id];
75+
}
76+
$result = array_fill_keys($id, []);
77+
$filter = [
78+
'columns' => 'linkedid,recordingfile,start,answer,src_num,dst_num',
79+
'linkedid IN ({linkedid:array}) AND recordingfile <> ""',
80+
'bind' => [
81+
'linkedid' => $id
82+
],
83+
'miko_result_in_file' => true,
84+
];
85+
86+
$client = new BeanstalkClient(WorkerCdr::SELECT_CDR_TUBE);
87+
$message = $client->request(json_encode($filter), 2);
88+
if ($message === false) {
89+
$this->response->setContent('');
90+
} else {
91+
$filename = json_decode($message, true);
92+
$arr_data = [];
93+
if (is_string($filename) && file_exists($filename)) {
94+
$arr_data = json_decode(file_get_contents($filename), true);
95+
@unlink($filename);
96+
}
97+
foreach ($arr_data as $cdrData){
98+
if(!file_exists($cdrData['recordingfile'])){
99+
continue;
100+
}
101+
// Создаём объект DateTime
102+
$date = \DateTime::createFromFormat('Y-m-d H:i:s.u', $cdrData['start']);
103+
$formatted = $date->format('Y-m-d_H-i-s');
104+
$result[$cdrData['linkedid']][] = [
105+
'file' => $cdrData['recordingfile'],
106+
'start' => $formatted,
107+
'src' => $cdrData['src_num'],
108+
'dst' => $cdrData['dst_num']
109+
];
110+
}
111+
112+
}
113+
print_r(json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
114+
$this->response->sendRaw();
115+
}
116+
63117
/**
64118
* Скачивание записи разговора.
65119
* /pbxcore/api/cdr/records MIKO AJAM

0 commit comments

Comments
 (0)