Browse Source

Remove CoreMedia

main
lucas cardoso 2 years ago
parent
commit
5ac78c60b6
  1. 326
      app/Core/CoreMedia.php

326
app/Core/CoreMedia.php

@ -1,326 +0,0 @@
<?php
namespace app\Core;
use app\Core\Commands;
use app\Models\Message;
use app\Providers\Crypt;
use app\Controllers\QueueController;
use app\Controllers\AgentController;
use app\Controllers\BilheteController;
use app\Controllers\SystemMessageController;
use app\Interfaces\IApiMedia;
use app\Models\Atendimento;
use app\Models\Evento;
use app\Models\ListaNegraPalavras;
use app\Models\SupervisorModel;
use websocket\WsInterface;
/**
* Description of WhatsApp
*
* @author Lucas Awade
*/
class CoreMedia
{
/** @var IApiMedia $api api do provedor de mensagens */
protected $api;
/** @var Commands $commands classe de comandos do sistema*/
protected $commands;
/** @var QueueController $queue controller da queue*/
protected $queue;
/** @var AgentController $agente controller do agente*/
protected $agente;
/** @var ListaNegraPalavras $palavroes model de palavras banida*/
protected $palavroes;
/** @var WsInterface $ws classe de comandos do sistema*/
protected $ws;
/** @var Atendimento $atendimento model de atendimentos*/
protected $atendimento;
/** @var SupervisorModel $supervisor model de supervisor*/
protected $supervisor;
/** @var Evento $eventos model de eventos*/
protected $eventos;
/** @var BilheteController $eventos controller dos bilhetess*/
protected $bilheteController;
/** @var Message $message model de mensagens*/
protected $message;
/** @var SystemMessageController $systemController controller de mensagens de sistema*/
protected $systemController;
/** @var Crypt $crypt core de criptografia*/
protected $crypt;
public function __construct()
{
$this->ws = new WsInterface();
$this->queue = new QueueController();
$this->commands = new Commands();
$this->agente = new AgentController();
$this->crypt = new Crypt();
$this->atendimento = new Atendimento();
$this->message = new Message();
$this->palavroes = new ListaNegraPalavras();
$this->supervisor = new SupervisorModel();
$this->eventos = new Evento();
$this->bilheteController = new BilheteController;
$this->systemController = new SystemMessageController();
}
public function setApi(IApiMedia $api)
{
$this->api = $api;
}
/**
* Send the file to the active contact
*
* @return null
*/
public function inicia($data, IApiMedia $providere)
{
/** Validate $data */
$this->api = $providere;
$this->build($data);
if (!$this->api->getIsValidMessage()) {
return null;
}
if (!$this->api->baixarMidia()) {
$this->api->enviarMsg($this->api->getPhone(), "Não foi possivel entregar o aquivo para o agente. Envie novamente!");
}
// VERIFICA SE ? UM COMANDO
if ($this->commands->isCommand($this->api)) {
return null;
}
//verifica se tem atendimento em aberto, se tiver ja manda msg para o agente via ws
$atendiment = $this->atendimento->findAtenEmAberto($this->api->getPhone());
if ($atendiment) {
$this->enviaMensagemAgente($atendiment);
return null;
}
//verifica se tem atendimento em espera, se tiver ja mostra a sua posi��o na fila
$atende = $this->atendimento->getAtendimentoByCliente($this->api->getPhone());
if (empty($atende)) {
$atende = $this->atendimento->getAtendimentoByCliente($this->api->getPhone(), CONF_EVENT_ERRO_ATEND);
}
if ($atende) {
$this->mostraPosiscaoNaFila($this->api->getPhone(), $atende->fila);
return null;
}
//verifica se o cliente escolheu uma fila caso não escolheu manda as filas
$filas = $this->queue->listAllQueueWhatsApp($this->api->getMessage());
if ($filas['LIST']) {
//manda as mensagens personalizada do moment CONF_MOMENT_SAUDACAO
$this->systemController->sendMessageSystem(
CONF_MOMENT_SAUDACAO,
[["nome" => "@cliente_name", "valor" => $this->api->getProfile()]],
$this->api,
$this->api->getPhone()
);
$this->api->enviarMsg($this->api->getPhone(), $filas['LIST']);
return null;
}
// cria a atendimento
$this->criaAtendimento($filas['QUEUE'], $this->api->getPhone());
}
/**
* Set variables class
* @param array $data
* @return boolean
*/
public function build($data)
{
$this->api->setHook($data);
$this->validaPalavroes();
}
public function validaPalavroes()
{
try {
$msg = $this->api->getMessage();
$palavras = $this->palavroes->getAll();
foreach ($palavras as $key => $value) {
$pattern = "/\b($value->palavra)\b/i";
$msg = preg_replace($pattern, '*' . str_repeat('*', strlen($value->palavra)) . '*', $msg);
}
$this->api->setMessage($msg);
} catch (\Exception $th) {
}
return;
}
public function criaAtendimento($fila, $numero, $uniqueid = null)
{
try {
if (empty($uniqueid)) {
$uniqueid = $this->atendimento->createAtendimento(null, $numero, 'E', $this->api->getchannel(), $this->api->getProfile());
if ($uniqueid) {
$this->eventos->createEvento($uniqueid, 'EMESPERA', date('Y-m-d H:i:s'), date('Y-m-d H:i:s'), $fila);
}
}
$agentes = $this->agente->infoAgentes($fila);
if (empty($agentes)) {
$this->systemController->sendMessageSystem(
CONF_MOMENT_ENTRAR_FILA_SEM,
[],
$this->api,
$numero,
$fila
);
return null;
}
$agent = $this->supervisor->findAgentByQueue($fila, 'LIVRE');
if (empty($agent)) {
$this->systemController->sendMessageSystem(
CONF_MOMENT_ENTRAR_FILA_COM,
[],
$this->api,
$numero,
$fila
);
$this->mostraPosiscaoNaFila($numero, $fila);
return null;
}
$retServe = $this->atendimento->updAtendimento($uniqueid, $agent[0]->matricula);
if (empty($retServe)) {
$this->api->enviarMsg(
$numero,
'Erro ao gerar atendimento!'
);
return null;
}
$protocol = $this->bilheteController->generateProtocol($uniqueid);
//cria o evento de inicio de atendimento e criar o protocolo
if ($protocol) {
$event = $this->eventos->getStatusAtendimento($uniqueid);
$retCria = $this->eventos->createEvento(
$uniqueid,
CONF_EVENT_START,
date('Y-m-d H:i:s'),
date('Y-m-d H:i:s'),
$fila,
$agent[0]->matricula
);
if (!empty($retCria) && $event->evento != CONF_EVENT_START) {
$atendimentosAbertos = $this->atendimento->getAtendimentoAbertoByAgente($agent[0]->matricula);
$sup = new SupervisorModel();
$param = $this->atendimento->getQuantiAtendimentSimultaneos();
$ws = new WsInterface();
if ((count($atendimentosAbertos)) >= $param->prm_media_simultaneo) {
$sup->updateAgent($agent[0]->matricula, CONF_AGENT_STATUS_OCUPADO);
}
$this->systemController->sendMessageSystem(
CONF_MOMENT_INICIAR_ATENDIMENTO,
[["nome" => "@agente_name", "valor" => utf8_encode($agent[0]->nome)]],
$this->api,
$numero,
$fila
);
$this->api->enviarMsg(
$numero,
"Número do protocolo do atendimento é $protocol\n"
);
try {
if ($event->evento == CONF_EVENT_ERRO_ATEND) {
$ws->enviaMsg($ws->enviaActions(
'Este atendimento foi realocado para sua responsabilidade.',
're_start',
$agent[0]->matricula,
$uniqueid
));
$this->message->addMessage(
$uniqueid,
$agent[0]->matricula,
$agent[0]->matricula,
're_start',
'Este atendimento foi realocado para sua responsabilidade.',
$agent[0]->nome,
$this->api->getchannel(),
'read'
);
} else {
$ws->enviaMsg($ws->enviaActions('Atendimento iniciado!', 'start', $agent[0]->matricula, $uniqueid));
}
} catch (\Exception $th) {
return $ws->enviaActions('Atendimento iniciado!', 'start', $agent[0]->matricula, $uniqueid);
}
}
}
return;
} catch (\Exception $th) {
logger('criaAtendimento')->info($th->getMessage());
return;
}
}
public function mostraPosiscaoNaFila($numero, $fila)
{
$clientfila = $this->queue->clientQueueVerify($numero, $fila);
if ($clientfila['MESSAGE']) {
$this->api->enviarMsg($numero, $clientfila['MESSAGE']);
return null;
}
}
public function retornaConteudo()
{
switch ($this->api->getType()) {
case 'text':
return $this->api->getMessage();
case 'image':
case 'sticker':
case 'video':
case 'voice':
case 'audio':
case 'document':
return $this->api->getId();
case 'contacts':
return null;
case 'location':
return null;
}
}
function enviaMensagemAgente($atendiment)
{
$this->message->addMessage(
$atendiment->uniqueid,
$this->api->getPhone(),
$atendiment->matricula,
$this->api->getType(),
$this->retornaConteudo(),
empty($this->api->getProfile()) ? '' : $this->api->getProfile(),
$this->api->getchannel(),
"sended",
$this->api->getMimetype(),
$this->api->retornaTituloDocument(),
$this->api->getId()
);
$this->ws->enviaMsg(
$this->ws->convertToWebsocket(
$this->retornaConteudo(),
$atendiment->matricula,
$atendiment->uniqueid,
$this->api->getType(),
$this->api->getProfile(),
$this->api->getPhone(),
time(),
$this->api->getId(),
$this->api->getMimetype(),
$this->api->retornaTituloDocument(),
$this->api->getchannel()
)
);
}
}
Loading…
Cancel
Save