lucascardo12
3 years ago
6 changed files with 233 additions and 271 deletions
@ -1,211 +0,0 @@
|
||||
#!/usr/bin/php -q |
||||
<?php |
||||
|
||||
require __DIR__ . '/../../vendor/autoload.php'; |
||||
require __DIR__ . '/../../includes/config.php'; |
||||
|
||||
error_reporting(E_ERROR); |
||||
ini_set('display_errors', 0); |
||||
|
||||
use app\Controllers\AgentController; |
||||
use app\Controllers\BilheteController; |
||||
use app\Controllers\MessageController; |
||||
use app\Controllers\ClassificacaoController; |
||||
use app\Controllers\SupervisorQueueController; |
||||
use app\Core\Connect; |
||||
use app\Core\CoreMedia; |
||||
use app\Providers\Positus; |
||||
use app\Core\Media; |
||||
use app\Core\WhatsApp; |
||||
use app\Models\Message; |
||||
use app\Models\NotificaMedia; |
||||
use app\Providers\ApiTelegram; |
||||
|
||||
$agente = new AgentController(); |
||||
$bilhete = new BilheteController(); |
||||
$message = new MessageController(); |
||||
$media = new CoreMedia(); |
||||
$media2 = new Media(); |
||||
$notificaMedia = new NotificaMedia(); |
||||
$mensages = new Message(); |
||||
$classificacao = new ClassificacaoController(); |
||||
$supervisor = new SupervisorQueueController(); |
||||
|
||||
/* |
||||
* Para rodar como um processo normal é preciso passar "N" como primeiro parametro. |
||||
*/ |
||||
$notDaemon = isset($argv[1]) && (strtoupper($argv[1]) === 'N'); |
||||
|
||||
/* |
||||
* Inicializa o daemom quando N não for informado. |
||||
*/ |
||||
GetDaemon($notDaemon); |
||||
|
||||
declare(ticks=1); |
||||
$statusSignal = 0; |
||||
pcntl_signal(SIGTERM, "sig_handler"); |
||||
pcntl_signal(SIGHUP, "sig_handler"); |
||||
pcntl_signal(SIGUSR1, "sig_handler"); |
||||
pcntl_signal(SIGINT, "sig_handler"); |
||||
|
||||
$timeout_agent_alert = (CONF_WHATSAPP_TIMEOUT_AGENT_AVISO / 60); |
||||
$timeout_agent_desconexao = (CONF_WHATSAPP_TIMEOUT_AGENT_DESCONEXAO / 60); |
||||
$timeout_agent_classificacao = (CONF_WHATSAPP_TIMEOUT_AGENT_CLASSIFICACAO / 60); |
||||
$mensagem = [ |
||||
"ALERTA_INATIVIDADE" => "Você será desconectado em " . ($timeout_agent_desconexao - $timeout_agent_alert) . " minutos, para permanecer em atendimento clique em '/presente'", |
||||
"ALERTA_DESCONECTADO" => "Você foi desconectado por inatividade!", |
||||
"ALERTA_CLIENTE" => "Olá, como podemos lhe ajudar!", |
||||
"TIMEOUT_CLIENT_INATIVIDADE" => "O tempo da conversa foi expirado, por favor volte novamente a fila para um novo atendimento!", |
||||
"TALK_FINISHED" => "O atendimento foi finalizado!", |
||||
"TALK_ALERT_FINISH" => "Por favor, volte a comunicação com nosso atendimento em 1 minuto ou atendimento será encerrado!" |
||||
]; |
||||
|
||||
while (true) { |
||||
try { |
||||
$agentesLista = $agente->inactiveAgents(); |
||||
foreach ($agentesLista as $item) { |
||||
$positus = retornaApiMedia($item['SALA1']); |
||||
$freetime = $item['FREETIME'] / 60; |
||||
|
||||
if (($freetime >= $timeout_agent_alert) && ($freetime < $timeout_agent_desconexao) && !$item['SALA2'] && $item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$agente->timeFinishAgente($item['MATRICULA'], $item['RAMAL'], ($timeout_agent_desconexao - $timeout_agent_alert)); |
||||
$positus->enviarMsgIterativaBotao($item['RAMAL'], $mensagem['ALERTA_INATIVIDADE'], [ |
||||
[ |
||||
"type" => "reply", |
||||
"reply" => [ |
||||
"id" => "unique-postback-id-1", |
||||
"title" => utf8_encode("/presente") |
||||
] |
||||
] |
||||
]); |
||||
} else if ($freetime >= $timeout_agent_desconexao && $item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$agente->logoff($item['RAMAL']); |
||||
$positus->enviarMsg($item['RAMAL'], utf8_encode($mensagem['ALERTA_DESCONECTADO'])); |
||||
} else { |
||||
$agente->refreshAgent($item['RAMAL'], $item['SALA2']); |
||||
} |
||||
|
||||
if ($item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$chamadaSemClassificacao = $classificacao->agentClassificacaoPending($item['MATRICULA'], $item['FILA']); |
||||
if ($chamadaSemClassificacao) { //BLOQUEAR ATENDIMENTO SEM CLASSIFICACAO |
||||
if ($item['FREETIME'] % $timeout_agent_classificacao == 0) { |
||||
$classificacaoList = $classificacao->agentClassificacaoList($item['FILA']); |
||||
$retorno = $notificaMedia->verificaNotifica( |
||||
$chamadaSemClassificacao, |
||||
$item['RAMAL'], |
||||
utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
); |
||||
if ($retorno->quant == 0) { |
||||
$notificaMedia->addNotifica( |
||||
$chamadaSemClassificacao, |
||||
$item['RAMAL'], |
||||
utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
); |
||||
$positus->enviarMsg( |
||||
$item['RAMAL'], |
||||
utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
); |
||||
} |
||||
} |
||||
continue; |
||||
} |
||||
|
||||
$atendimento = $bilhete->bilheteForaHorario(CONF_EVENT_WHATSAPP_ESPERA, $item['FILA'], null, $item['SALA1']); |
||||
if ($atendimento) { |
||||
/** |
||||
* VALIDA O ATENDIMENTO |
||||
*/ |
||||
$response = $media->validaAtendimento($positus, $atendimento[0]->fila, null, $atendimento[0]->src, $item['SALA1']); |
||||
$bilhete->atenderBilheteForaHorario($atendimento[0]->uniqueid, $atendimento[0]->src, $atendimento[0]->fila, $item['MATRICULA'], $response['DATA']['uniqueid']); |
||||
$atendimento = $bilhete->bilheteForaHorario(CONF_EVENT_WHATSAPP_ESPERA, $item['FILA'], null, $item['SALA1']); |
||||
foreach ($atendimento as $cliente) { |
||||
$mensagemFila = 'Você está na posição ' . $media2->getClientQueueData($cliente->src, $atendimento)['QUEUE_POSITION'] . '. Aguarde ser atendido!'; |
||||
$positus->enviarMsg($cliente->src, utf8_encode($mensagemFila)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if ($item['STATUS'] == CONF_AGENT_STATUS_OCUPADO) { |
||||
if ($message->timeoutTalk($item['UNIQUEID'], $item['RAMAL']) == 'FINISH' && $agente->closeService($item['ORIGEM_DESTINO'], CONF_EVENT_WHATSAPP_TIMEOUT_CLIENTE, $item['SALA1'])) { |
||||
$positus->enviarMsg($item['ORIGEM_DESTINO'], utf8_encode($mensagem['TIMEOUT_CLIENT_INATIVIDADE'])); |
||||
$positus->enviarMsg($item['ORIGEM_DESTINO'], utf8_encode($mensagem['TALK_FINISHED'])); |
||||
$positus->enviarMsg($item['RAMAL'], utf8_encode($mensagem['TALK_FINISHED'])); |
||||
} |
||||
if ($message->timeoutTalk($item['UNIQUEID'], $item['RAMAL']) == 'ALERT') { |
||||
$msg = $mensages->findLastMessage($item['UNIQUEID']); |
||||
$retorno = $notificaMedia->verificaNotifica( |
||||
$item['UNIQUEID'], |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($mensagem['TALK_ALERT_FINISH']) . $msg->id |
||||
); |
||||
if ($retorno->quant == 0) { |
||||
$notificaMedia->addNotifica( |
||||
$item['UNIQUEID'], |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($mensagem['TALK_ALERT_FINISH']) . $msg->id |
||||
); |
||||
$positus->enviarMsg( |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($mensagem['TALK_ALERT_FINISH']) |
||||
); |
||||
} |
||||
} |
||||
} |
||||
$supervisor->calcTimeAwait(); |
||||
} |
||||
|
||||
sleep(3); |
||||
ignore_user_abort(true); |
||||
|
||||
/* |
||||
* Verifica se o processo deve ser encerrado |
||||
*/ |
||||
if (sig_status()) { |
||||
break; |
||||
} |
||||
} catch (Exception $ex) { |
||||
sleep(3); |
||||
Connect::setInstance(null); |
||||
logger('testeOff')->info($th->getMessage(), debug_backtrace()); |
||||
} |
||||
} |
||||
|
||||
function retornaApiMedia($media = '') |
||||
{ |
||||
switch ($media) { |
||||
case CONF_TELEGRAM_CHANNEL: |
||||
return new ApiTelegram(); |
||||
case CONF_WHATSAPP_CHANNEL: |
||||
return new Positus();; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
function GetDaemon($notDaemon) |
||||
{ |
||||
/* |
||||
* Se o script não for chamado com daemon sai sem executar nada. |
||||
*/ |
||||
if ($notDaemon) { |
||||
return 0; |
||||
} |
||||
|
||||
$pid = pcntl_fork(); |
||||
if ($pid) { |
||||
exit(0); //success |
||||
} |
||||
} |
||||
|
||||
function sig_handler($signo) |
||||
{ |
||||
global $statusSignal; |
||||
$statusSignal = 1; |
||||
} |
||||
|
||||
function sig_status() |
||||
{ |
||||
global $statusSignal; |
||||
pcntl_signal_dispatch(); |
||||
return $statusSignal; |
||||
} |
@ -1,29 +0,0 @@
|
||||
#!/usr/bin/php -q |
||||
<?php |
||||
|
||||
require __DIR__ . '/../../vendor/autoload.php'; |
||||
require __DIR__ . '/../../includes/config.php'; |
||||
|
||||
error_reporting(E_ERROR); |
||||
ini_set('display_errors', 0); |
||||
|
||||
use app\Controllers\AgentController; |
||||
use app\Controllers\BilheteController; |
||||
use app\Controllers\MessageController; |
||||
use app\Controllers\ClassificacaoController; |
||||
use app\Controllers\SupervisorQueueController; |
||||
use app\Providers\Positus; |
||||
use app\Core\Media; |
||||
|
||||
|
||||
$agente = new AgentController(); |
||||
$bilhete = new BilheteController(); |
||||
$message = new MessageController(); |
||||
$positus = new Positus(); |
||||
$media = new Media(); |
||||
$classificacao = new ClassificacaoController(); |
||||
$supervisor = new SupervisorQueueController(); |
||||
|
||||
$info = $agente->findRamal('556581282842'); |
||||
|
||||
print_r($info); |
@ -1,8 +0,0 @@
|
||||
<?php |
||||
$google_url = 'https://translate.google.com.br/translate_tts?ie=UTF-8&q=%se&tl=pt-BR&total=1&idx=0&textlen=5&tk=489936&client=t&prev=input&ttsspeed=0.50'; |
||||
|
||||
$text = urlencode('Ola tamba'); |
||||
|
||||
$url = sprintf($google_url, $text); |
||||
|
||||
copy($url, 'meu_arquivo.mp3'); |
@ -0,0 +1,196 @@
|
||||
<?php |
||||
|
||||
namespace service; |
||||
|
||||
error_reporting(E_ERROR); |
||||
ini_set('display_errors', 0); |
||||
|
||||
use app\Controllers\AgentController; |
||||
use app\Controllers\BilheteController; |
||||
use app\Controllers\MessageController; |
||||
use app\Controllers\ClassificacaoController; |
||||
use app\Controllers\SupervisorQueueController; |
||||
use app\Core\Connect; |
||||
use app\Core\CoreMedia; |
||||
use app\Providers\Positus; |
||||
use app\Core\Media; |
||||
use app\Models\Message; |
||||
use app\Models\NotificaMedia; |
||||
use app\Providers\ApiTelegram; |
||||
use Exception; |
||||
use Ratchet\ConnectionInterface; |
||||
|
||||
class MonitoraAgente |
||||
{ |
||||
public $agente; |
||||
public $bilhete; |
||||
public MessageController $message; |
||||
public $media; |
||||
public $media2; |
||||
public $notificaMedia; |
||||
public $mensages; |
||||
public $classificacao; |
||||
public $supervisor; |
||||
public $timeout_agent_alert; |
||||
public $timeout_agent_desconexao; |
||||
public $timeout_agent_classificacao; |
||||
public $mensagem; |
||||
|
||||
function __construct() |
||||
{ |
||||
$this->agente = new AgentController(); |
||||
$this->bilhete = new BilheteController(); |
||||
$this->message = new MessageController(); |
||||
$this->media = new CoreMedia(); |
||||
$this->media2 = new Media(); |
||||
$this->notificaMedia = new NotificaMedia(); |
||||
$this->mensages = new Message(); |
||||
$this->classificacao = new ClassificacaoController(); |
||||
$this->supervisor = new SupervisorQueueController(); |
||||
$this->timeout_agent_alert = (CONF_WHATSAPP_TIMEOUT_AGENT_AVISO / 60); |
||||
$this->timeout_agent_desconexao = (CONF_WHATSAPP_TIMEOUT_AGENT_DESCONEXAO / 60); |
||||
$this->timeout_agent_classificacao = (CONF_WHATSAPP_TIMEOUT_AGENT_CLASSIFICACAO / 60); |
||||
$this->mensagem = [ |
||||
"ALERTA_INATIVIDADE" => "Você será desconectado em " . ($this->timeout_agent_desconexao - $this->timeout_agent_alert) . |
||||
" minutos, para permanecer em atendimento clique em '/presente'", |
||||
"ALERTA_DESCONECTADO" => "Você foi desconectado por inatividade!", |
||||
"ALERTA_CLIENTE" => "Olá, como podemos lhe ajudar!", |
||||
"TIMEOUT_CLIENT_INATIVIDADE" => "O tempo da conversa foi expirado, por favor volte novamente a fila para um novo atendimento!", |
||||
"TALK_FINISHED" => "O atendimento foi finalizado!", |
||||
"TALK_ALERT_FINISH" => "Por favor, volte a comunicação com nosso atendimento em 1 minuto ou atendimento será encerrado!" |
||||
]; |
||||
} |
||||
|
||||
|
||||
function monitora(ConnectionInterface $conn) |
||||
{ |
||||
try { |
||||
$agentesLista = $this->agente->inactiveAgents(); |
||||
foreach ($agentesLista as $item) { |
||||
$positus = $this->retornaApiMedia($item['SALA1']); |
||||
//verifica os timeout do agente |
||||
$this->timeoutAgente($item, $conn); |
||||
|
||||
if ($item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$chamadaSemClassificacao = $this->classificacao->agentClassificacaoPending($item['MATRICULA'], $item['FILA']); |
||||
if ($chamadaSemClassificacao) { //BLOQUEAR ATENDIMENTO SEM CLASSIFICACAO |
||||
if ($item['FREETIME'] % $this->timeout_agent_classificacao == 0) { |
||||
$classificacaoList = $this->classificacao->agentClassificacaoList($item['FILA']); |
||||
|
||||
// $retorno = $this->notificaMedia->verificaNotifica( |
||||
// $chamadaSemClassificacao, |
||||
// $item['RAMAL'], |
||||
// utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
// ); |
||||
// if ($retorno->quant == 0) { |
||||
// $this->notificaMedia->addNotifica( |
||||
// $chamadaSemClassificacao, |
||||
// $item['RAMAL'], |
||||
// utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
// ); |
||||
$conn->send($this->enviaActions(CONF_NAME_REPONSE . " : " . $classificacaoList, 'classificacao')); |
||||
// $positus->enviarMsg( |
||||
// $item['RAMAL'], |
||||
// utf8_encode(CONF_NAME_REPONSE . " : " . $classificacaoList) |
||||
// ); |
||||
// } |
||||
} |
||||
continue; |
||||
} |
||||
|
||||
$atendimento = $this->bilhete->bilheteForaHorario(CONF_EVENT_WHATSAPP_ESPERA, $item['FILA'], null, $item['SALA1']); |
||||
if ($atendimento) { |
||||
/** |
||||
* VALIDA O ATENDIMENTO |
||||
*/ |
||||
$response = $this->media->validaAtendimento($positus, $atendimento[0]->fila, null, $atendimento[0]->src, $item['SALA1']); |
||||
$this->bilhete->atenderBilheteForaHorario($atendimento[0]->uniqueid, $atendimento[0]->src, $atendimento[0]->fila, $item['MATRICULA'], $response['DATA']['uniqueid']); |
||||
$atendimento = $this->bilhete->bilheteForaHorario(CONF_EVENT_WHATSAPP_ESPERA, $item['FILA'], null, $item['SALA1']); |
||||
foreach ($atendimento as $cliente) { |
||||
$mensagemFila = 'Você está na posição ' . $this->media2->getClientQueueData($cliente->src, $atendimento)['QUEUE_POSITION'] . '. Aguarde ser atendido!'; |
||||
$positus->enviarMsg($cliente->src, utf8_encode($mensagemFila)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if ($item['STATUS'] == CONF_AGENT_STATUS_OCUPADO) { |
||||
if ($this->message->timeoutTalk($item['UNIQUEID'], $item['RAMAL']) == 'FINISH' && $this->agente->closeService($item['ORIGEM_DESTINO'], CONF_EVENT_WHATSAPP_TIMEOUT_CLIENTE, $item['SALA1'])) { |
||||
$positus->enviarMsg($item['ORIGEM_DESTINO'], utf8_encode($this->mensagem['TIMEOUT_CLIENT_INATIVIDADE'])); |
||||
$positus->enviarMsg($item['ORIGEM_DESTINO'], utf8_encode($this->mensagem['TALK_FINISHED'])); |
||||
$positus->enviarMsg($item['RAMAL'], utf8_encode($this->mensagem['TALK_FINISHED'])); |
||||
} |
||||
if ($this->message->timeoutTalk($item['UNIQUEID'], $item['RAMAL']) == 'ALERT') { |
||||
$msg = $this->mensages->findLastMessage($item['UNIQUEID']); |
||||
$retorno = $this->notificaMedia->verificaNotifica( |
||||
$item['UNIQUEID'], |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($this->mensagem['TALK_ALERT_FINISH']) . $msg->id |
||||
); |
||||
if ($retorno->quant == 0) { |
||||
$this->notificaMedia->addNotifica( |
||||
$item['UNIQUEID'], |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($this->mensagem['TALK_ALERT_FINISH']) . $msg->id |
||||
); |
||||
$positus->enviarMsg( |
||||
$item['ORIGEM_DESTINO'], |
||||
utf8_encode($this->mensagem['TALK_ALERT_FINISH']) |
||||
); |
||||
} |
||||
} |
||||
} |
||||
$this->supervisor->calcTimeAwait(); |
||||
} |
||||
} catch (Exception $ex) { |
||||
Connect::setInstance(null); |
||||
logger('monitora')->info($ex->getMessage(), debug_backtrace()); |
||||
} |
||||
} |
||||
|
||||
function retornaApiMedia($media = '') |
||||
{ |
||||
switch ($media) { |
||||
case CONF_TELEGRAM_CHANNEL: |
||||
return new ApiTelegram(); |
||||
case CONF_WHATSAPP_CHANNEL: |
||||
return new Positus();; |
||||
default: |
||||
break; |
||||
} |
||||
} |
||||
|
||||
function timeoutAgente($item, $conn) |
||||
{ |
||||
$freetime = $item['FREETIME'] / 60; |
||||
if (($freetime >= $this->timeout_agent_alert) && ($freetime < $this->timeout_agent_desconexao) && !$item['SALA2'] && $item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$this->agente->timeFinishAgente($item['MATRICULA'], $item['RAMAL'], ($this->timeout_agent_desconexao - $this->timeout_agent_alert)); |
||||
$conn->send($this->enviaActions($this->mensagem['ALERTA_INATIVIDADE'], 'ALERTA_INATIVIDADE')); |
||||
} else if ($freetime >= $this->timeout_agent_desconexao && $item['STATUS'] == CONF_AGENT_STATUS_LIVRE) { |
||||
$this->agente->logoff($item['RAMAL']); |
||||
$conn->send($this->enviaActions($this->mensagem['ALERTA_DESCONECTADO'], 'ALERTA_DESCONECTADO')); |
||||
} else { |
||||
$this->agente->refreshAgent($item['RAMAL'], $item['SALA2']); |
||||
} |
||||
} |
||||
|
||||
function enviaActions($msg, $tipo) |
||||
{ |
||||
try { |
||||
$mensagem = []; |
||||
$mensagem["event"] = [ |
||||
"type" => 'actions', |
||||
"contact" => [ |
||||
"name" => 'Sistema', |
||||
"number" => '0' |
||||
], |
||||
"mensagem" => [ |
||||
"type" => $tipo, |
||||
"content" => utf8_encode($msg) |
||||
], |
||||
]; |
||||
return json_encode($mensagem); |
||||
} catch (\Throwable $th) { |
||||
logger('monitora')->info($th->getMessage(), debug_backtrace()); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue