Distribuição sequencial Chatbot

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 queueId for 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:

  1. Tenta identificar primeiro pelo ticket.chatFlowId.

  2. Se não houver, tenta identificar pelo whatsapp.chatFlowId da 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 lastUserId for 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:

  1. Atualiza o campo lastUserId no ChatFlow com o ID do usuário selecionado (para que a rotação continue correta no próximo ticket).

  2. Cria um log da atribuição via CreateLogTicketService.

  3. 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.

Atualizado