[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
André Cabral
Criador André Cabral 02/10/2019

Tenho a seguinte situação em um sistema de telemarketing:

O usuario irá acessar uma rota específica do contato para efetuar um atendimento, porém quando ele estiver acessando essa rota outro atendente não poderá acessar aquela rota, daquele contato ao mesmo tempo.

Uma das opções é criar um campo no BD, mas corre o risco do usuário não concluir o atendimento.

Preciso bloquear de alguma forma temporária até a finalização do atendimento.

 

Alguém tem alguma ideia ou caminho pra eu resolver isoo?

 

 

Manager Carlos Ferreira 02/10/2019

Olá, André!
Tudo bem?

Existem alguns caminhos possível para resolver isso.

Você pode criar um lógica onde o atendente libera ou não esse "chat", usando justamente esse lógica que você sugeriu.
Você tem uma tabela de atendimento, e quando iniciar você marca que o atendimento está andamento, e quando o atendente finalizar o atendimento ele precisa liberar a sala, marcando que concluiu aquela sessão.

E você controla o acesso com middlewares, baseado nesse status...

Entendeu a ideia?

----------------

A outra alternativa possível seria trabalhando com real-time ( o curso de Laravel com Vue.js real-time pode te ajudar nisso )

Carlos Ferreira
Criador André Cabral 02/10/2019

Carlos, teria como exemplificar utilizando middlewares ?

 

André Cabral
Manager Carlos Ferreira 02/10/2019

Primeiro, você cria o Middleware, e aplica esse Middleware na rota do chat. Até aqui tudo bem?

O middleware pode ficar assim:
public function handle($request, Closure $next)
{
    // Pega o último registro da sala de bate papo
    $chat = NomeModelControlaOChat::latest()->first();

    // Verifica se a sala de chat está oculpada
    if ($chat->busy) {
        return redirect('chat-ocupado');
    }

    return $next($request);
}

Agora você cria essa rota "chat-ocupado" que exibe alguma view que informa que o chat está ocupado.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!