Distribuição sequencial ChatFlow
A Distribuição Sequencial (identificada como Método "S") é um sistema que distribui tickets em uma fila rotativa entre os usuários que estão online.
O objetivo é garantir que cada usuário receba tickets de forma sequencial e equilibrada, evitando a concentração de atendimentos em um único atendente.
Como Funciona a Lógica
O sistema segue um fluxo de 5 etapas para determinar quem receberá o próximo ticket:
1. Busca de Usuários Online
O sistema identifica quem está disponível para receber o ticket:
- Se
queueIdfor fornecido: Busca usuários online associados àquela fila específica. - Se não encontrar (ou não houver fila): Busca todos os usuários online do tenant.
- Exclusão: Em ambos os casos, usuários com perfil de Admins ou Superadmins são excluídos da distribuição.
- Ordenação: A lista final é ordenada por ID (ASC) para manter uma ordem consistente.
2. Validação
O sistema verifica a lista gerada no passo anterior.
- Se não houver usuários online, o processo é encerrado sem atribuir o ticket.
3. Busca do ChatFlow
O sistema localiza as configurações do fluxo de conversa (ChatFlow) associado ao ticket:
- Tenta identificar primeiro pelo
ticket.chatFlowId. - Se não houver, tenta identificar pelo
whatsapp.chatFlowIdda conexão do WhatsApp associada.
4. Seleção Rotativa
Aqui ocorre a distribuição propriamente dita. O sistema obtém o lastUserId (o último usuário que recebeu atendimento) gravado no ChatFlow e encontra o próximo na lista:
- Se houver
lastUserId: O sistema avança para o próximo usuário da lista. - Rotação Circular: Se o
lastUserIdfor o último da lista, o sistema volta ao primeiro usuário. - Se não houver
lastUserId: O sistema começa distribuindo pelo primeiro usuário da lista (índice 0).
5. Atribuição do Ticket
Uma vez definido o usuário, o sistema finaliza o processo:
- Atualiza o campo
lastUserIdno ChatFlow com o ID do usuário selecionado (para que a rotação continue correta no próximo ticket). - Cria um log da atribuição via
CreateLogTicketService. - Atribui efetivamente o ticket ao usuário selecionado.
Resumo
Esta funcionalidade distribui tickets em ordem rotativa, garantindo que a carga de trabalho seja dividida sequencialmente entre os atendentes disponíveis, respeitando a fila e o status online.