Skip to content

Commit

Permalink
#429 Расширил логирование при начале / завершении записи разговора
Browse files Browse the repository at this point in the history
  • Loading branch information
apor committed Nov 11, 2022
1 parent 538fd3c commit 838ad69
Show file tree
Hide file tree
Showing 9 changed files with 44 additions and 37 deletions.
25 changes: 14 additions & 11 deletions src/Core/Asterisk/AsteriskManager.php
Expand Up @@ -963,15 +963,17 @@ public function Monitor($channel, $file = null, $format = null, $mix = null)
*
* @return array
*/
public function MixMonitor($channel, $file, $options, $command='')
public function MixMonitor($channel, $file, $options, $command='', string $ActionID = '')
{
$parameters = ['Channel' => $channel];
$parameters['File'] = $file;
$parameters['options'] = $options;
$parameters = [
'Channel' => $channel,
'File' => $file,
'options' => $options,
'ActionID'=> $ActionID
];
if(!empty($command)){
$parameters['Command'] = $command;
}

return $this->sendRequestTimeout('MixMonitor', $parameters);
}

Expand All @@ -981,13 +983,16 @@ public function MixMonitor($channel, $file, $options, $command='')
* @link http://www.voip-info.org/wiki-Asterisk+Manager+API+Action+Monitor
*
* @param string $channel
* @param string $ActionID
*
* @return array
*/
public function StopMixMonitor($channel)
public function StopMixMonitor($channel, string $ActionID = '')
{
$parameters = ['Channel' => $channel];

$parameters = [
'Channel' => $channel,
'ActionID'=> $ActionID
];
return $this->sendRequestTimeout('StopMixMonitor', $parameters);
}

Expand All @@ -1003,9 +1008,7 @@ public function StopMixMonitor($channel)
public function DBPut($Family, $Key, $Val = '')
{
$parameters = ['Family' => $Family, 'Key' => $Key, 'Val' => $Val];
$res_data = $this->sendRequestTimeout('DBPut', $parameters);

return $res_data;
return $this->sendRequestTimeout('DBPut', $parameters);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Core/Workers/Libs/WorkerCallEvents/ActionDialAnswer.php
Expand Up @@ -104,7 +104,7 @@ private static function checkSmartIvrCalls($data):void

/**
* Обработка PickUp звонка.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
*/
private static function fillPickUpCdr($worker, $data):void
Expand All @@ -127,7 +127,7 @@ private static function fillPickUpCdr($worker, $data):void
$new_data['dst_chan'] = $data['agi_channel'];
$new_data['dst_num'] = $data['dst_num'];
$new_data['UNIQUEID'] = $data['id'];
$new_data['recordingfile'] = $worker->MixMonitor($new_data['dst_chan'], 'pickup_'.$new_data['UNIQUEID']);
$new_data['recordingfile'] = $worker->MixMonitor($new_data['dst_chan'], 'pickup_'.$new_data['UNIQUEID'], null, null, 'fillPickUpCdr');

unset($new_data['id'], $new_data['end']);
InsertDataToDB::execute($new_data);
Expand Down
6 changes: 3 additions & 3 deletions src/Core/Workers/Libs/WorkerCallEvents/ActionHangupChan.php
Expand Up @@ -90,7 +90,7 @@ private static function hangupChanEndCalls($worker, array $data, array &$transfe
'out' => true,
];
} else {
$worker->StopMixMonitor($row->dst_chan);
$worker->StopMixMonitor($row->dst_chan, 'hangupChanEndCalls');
$channels[] = [
'chan' => $row->dst_chan,
'did' => $row->did,
Expand Down Expand Up @@ -141,7 +141,7 @@ private static function regMissedCall(array $data, int $tmpCdrCount):void

/**
* Проверяем на SIP трансфер.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
* @param $channels
*/
Expand Down Expand Up @@ -180,7 +180,7 @@ private static function hangupChanCheckSipTrtansfer($worker, $data, $channels):v
$n_data['linkedid'] = $linkedid;
$n_data['UNIQUEID'] = $data['linkedid'] . Util::generateRandomString();
$n_data['transfer'] = '0';
$n_data['recordingfile'] = $worker->MixMonitor($n_data['dst_chan'], $n_data['UNIQUEID']);
$n_data['recordingfile'] = $worker->MixMonitor($n_data['dst_chan'], $n_data['UNIQUEID'], null, null, 'hangupChanCheckSipTrtansfer');
$n_data['did'] = $data_chan['did'];

InsertDataToDB::execute($n_data);
Expand Down
Expand Up @@ -32,7 +32,7 @@ class ActionMeetmeDial
*/
public static function execute(WorkerCallEvents $worker, $data):void
{
$worker->StopMixMonitor($data['src_chan']);
$worker->StopMixMonitor($data['src_chan'], 'ActionMeetMeDial_execute');

if (strpos($data['src_chan'], 'internal-originate') !== false) {
// Уточним канал и ID записи;
Expand Down
Expand Up @@ -23,8 +23,8 @@ public static function execute(WorkerCallEvents $worker, $data):void
$m_data = CallDetailRecordsTmp::find($filter);
foreach ($m_data as $row) {
// Пробуем остановить записть разговора.
$worker->StopMixMonitor($row->dst_chan);
$worker->StopMixMonitor($row->src_chan);
$worker->StopMixMonitor($row->dst_chan, 'ActionTransferCheck_'.$row->verbose_call_id);
$worker->StopMixMonitor($row->src_chan, 'ActionTransferCheck_'.$row->verbose_call_id);
// Установим признак переадресации.
$row->writeAttribute('transfer', 1);
$row->save();
Expand Down
Expand Up @@ -44,7 +44,7 @@ public static function execute(WorkerCallEvents $worker, $data):void

/**
* Заполнение не отвеченного звонка.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
*/
private static function fillNotAnsweredCdr($worker, $data):void{
Expand Down Expand Up @@ -85,7 +85,7 @@ private static function fillNotAnsweredCdr($worker, $data):void{
$info = pathinfo($row->recordingfile);
$data_time = ($row->answer === '') ? $row->start : $row->answer;
$subdir = date('Y/m/d/H/', strtotime($data_time));
$worker->MixMonitor($row->dst_chan, $info['filename'], $subdir);
$worker->MixMonitor($row->dst_chan, $info['filename'], $subdir, null, 'fillNotAnsweredCdr');
// Снимем со строк признак переадресации.
$row->writeAttribute('transfer', 0);
if ( ! $row->save()) {
Expand All @@ -96,7 +96,7 @@ private static function fillNotAnsweredCdr($worker, $data):void{

/**
* Обработка Local канала.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
*/
private static function fillLocalChannelCdr($worker, $data):void{
Expand Down Expand Up @@ -140,7 +140,7 @@ private static function fillLocalChannelCdr($worker, $data):void{
$data_time = 'now';
}
$subdir = date('Y/m/d/H/', strtotime($data_time));
$worker->MixMonitor($res->dst_chan, $info['filename'], $subdir);
$worker->MixMonitor($res->dst_chan, $info['filename'], $subdir, null, 'fillLocalChannelCdr');
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/Core/Workers/Libs/WorkerCallEvents/ActionUnparkCall.php
Expand Up @@ -27,12 +27,12 @@ class ActionUnparkCall
{
/**
* Снятие вызова с парковки.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
*/
public static function execute(WorkerCallEvents $worker, $data):void
{
$data['recordingfile'] = $worker->MixMonitor($data['dst_chan'], $data['UNIQUEID']);
$data['recordingfile'] = $worker->MixMonitor($data['dst_chan'], $data['UNIQUEID'], null, null, 'ActionUnparkCall');
InsertDataToDB::execute($data);
if (is_array($data['data_parking'])) {
InsertDataToDB::execute($data['data_parking']);
Expand Down
19 changes: 11 additions & 8 deletions src/Core/Workers/Libs/WorkerCallEvents/CreateRowTransfer.php
Expand Up @@ -38,11 +38,11 @@ private static function isFailRedirect($calls_data):bool

/**
* Обработка обрыва переадресации.
* @param $worker
* @param WorkerCallEvents $worker
* @param $data
* @param $calls_data
*/
private static function fillFailRedirectCdrData($worker, $data, $calls_data):void
private static function fillFailRedirectCdrData(WorkerCallEvents $worker, $data, $calls_data):void
{
// Возобновление записи разговора при срыве переадресации.
$row_data = $calls_data[0];
Expand Down Expand Up @@ -70,14 +70,14 @@ private static function fillFailRedirectCdrData($worker, $data, $calls_data):voi
}

if ($not_ended_cdr !== null && !$transferNotComplete) {
$worker->StopMixMonitor($not_ended_cdr->src_chan);
$worker->MixMonitor($not_ended_cdr->dst_chan, '', '', $not_ended_cdr->recordingfile);
$worker->StopMixMonitor($not_ended_cdr->src_chan, 'fillFailRedirectCdrData');
$worker->MixMonitor($not_ended_cdr->dst_chan, '', '', $not_ended_cdr->recordingfile, 'fillFailRedirectCdrData');
}
}

/**
* Обработка нормальной переадресации.
* @param $worker
* @param WorkerCallEvents $worker
* @param $action
* @param $data
* @param $calls_data
Expand All @@ -101,11 +101,14 @@ private static function fillRedirectCdrData($worker, $action, $data, $calls_data
}
}
// Запись разговора.
$worker->StopMixMonitor($insert_data['src_chan']);
$worker->StopMixMonitor($insert_data['dst_chan']);
$worker->StopMixMonitor($insert_data['src_chan'], 'fillRedirectCdrData');
$worker->StopMixMonitor($insert_data['dst_chan'], 'fillRedirectCdrData');
$recordingfile = $worker->MixMonitor(
$insert_data['dst_chan'],
'transfer_' . $insert_data['src_num'] . '_' . $insert_data['dst_num'] . '_' . $data['linkedid']
'transfer_' . $insert_data['src_num'] . '_' . $insert_data['dst_num'] . '_' . $data['linkedid'],
null,
null,
'fillLocalChannelCdr'
);
//
$insert_data['action'] = "{$action}_end_trasfer";
Expand Down
9 changes: 5 additions & 4 deletions src/Core/Workers/WorkerCallEvents.php
Expand Up @@ -45,7 +45,7 @@ class WorkerCallEvents extends WorkerBase
*
* @return string
*/
public function MixMonitor($channel, $file_name = null, $sub_dir = null, $full_name = null): string
public function MixMonitor($channel, $file_name = null, $sub_dir = null, $full_name = null, string $actionID=''): string
{
$resFile = $this->mixMonitorChannels[$channel]??'';
if($resFile !== ''){
Expand All @@ -61,7 +61,7 @@ public function MixMonitor($channel, $file_name = null, $sub_dir = null, $full_n
}
$srcFile = "{$f}.wav";
$resFile = "{$f}.mp3";
$this->am->MixMonitor($channel, $srcFile, $options);
$this->am->MixMonitor($channel, $srcFile, $options, '', $actionID);
$this->mixMonitorChannels[$channel] = $resFile;
$this->am->UserEvent('StartRecording', ['recordingfile' => $resFile, 'recchan' => $channel]);
}
Expand Down Expand Up @@ -95,16 +95,17 @@ public function setMonitorFilenameOptions(?string $full_name, ?string $sub_dir,
/**
* Останавливает запись разговора на канале.
* @param string $channel
* @param string $actionID
*/
public function StopMixMonitor($channel): void
public function StopMixMonitor($channel, string $actionID=''): void
{
if(isset($this->mixMonitorChannels[$channel])){
unset($this->mixMonitorChannels[$channel]);
}else{
return;
}
if ($this->record_calls) {
$this->am->StopMixMonitor($channel);
$this->am->StopMixMonitor($channel, $actionID);
}
}

Expand Down

0 comments on commit 838ad69

Please sign in to comment.