Registros de atendimentos por fila
Motivação
O NX Suite tinha um único registro por atendimento. Quando o cliente passava por mais de um operador ou por mais de uma fila, todo o ciclo era contabilizado como um atendimento só. Isso gerava distorções nas métricas, principalmente em abandono e tempo de atendimento.
Para resolver, criamos uma nova estrutura de registro que grava cada etapa relevante do ciclo de vida do atendimento. Assim, cada transição gera um novo registro ou atualiza o registro correto, permitindo métricas coerentes por operador, fila e fluxo.
Como eram as métricas (antes)
- Um atendimento com operador A -> operador B contava como um único atendimento.
- Abandono no segundo operador contaminava o atendimento inteiro e inflava a taxa de abandono.
- Tempo de atendimento e tempo em fila eram agregados de forma imprecisa.
Como ficam as métricas (depois)
- Cada transferência cria um novo registro de etapa (operador/fila/fluxo).
- Abandono passa a ser atribuído à etapa correta.
- Tempo em fila, tempo em atendimento e SLA ficam precisos por etapa.
- Indicadores por operador e por fila ficam consistentes.
Estrutura de banco de dados (nova tabela)
A nova tabela de registros de atendimento armazena o histórico por etapa. Campos principais:
| Campo | Descrição |
|---|---|
id | Identificador do registro de etapa. |
client_id | Identificador do cliente. |
chat_id | Identificador do atendimento original. |
user_id | Operador vinculado ao registro (quando aplicavel). |
condition_id | Condição do atendimento na etapa. |
transfer_type | Tipo de transferência (fila, operador, fluxo). |
queue_start_at | Início da etapa em fila. |
queue_end_at | Fim da etapa em fila. |
start_attendance_at | Início do atendimento com operador. |
attendance_end_at | Fim do atendimento da etapa. |
is_active | Indica se a etapa está ativa. |
Obs.: os timestamps são preenchidos conforme o fluxo (fila, transferência, atendimento ativo, finalização).
Exemplos de cenários
Transferência de operador
O cliente entra em atendimento e é direcionado ao operador A. Ao transferir para o operador B:
- O registro do operador A é atualizado com
attendance_end_at. - É criado um novo registro para o operador B, com
start_attendance_at.
Exemplo de linhas (resultado de query):
| id | client_id | chat_id | user_id | condition_id | transfer_type | queue_start_at | queue_end_at | start_attendance_at | attendance_end_at | is_active |
|---|---|---|---|---|---|---|---|---|---|---|
| 101 | 2000 | vox0bdc07f9... | 52 | 5- Finalizado | USER_TO_USER | 2026-05-13 10:02:10 | 2026-05-13 10:05:00 | 2026-05-13 10:05:00 | 2026-05-13 10:12:30 | false |
| 102 | 2000 | vox0bdc07f9... | 52 | 5- Finalizado | NULL | 2026-05-13 10:02:10 | 2026-05-13 10:05:00 | 2026-05-13 10:12:30 | 2026-05-13 10:16:05 | false |
Transbordo para fluxo
O cliente entra em fila, não encontra operador dentro do tempo limite e ocorre transbordo para fluxo:
- O registro da fila é atualizado com
queue_end_at. - Um novo registro é criado para o fluxo, com o estado atual do atendimento.
Isso evita que o tempo de fila seja confundido com tempo de atendimento.
Exemplo de linhas (resultado de query):
| id | client_id | chat_id | user_id | condition_id | transfer_type | queue_start_at | queue_end_at | start_attendance_at | attendance_end_at | is_active |
|---|---|---|---|---|---|---|---|---|---|---|
| 201 | 2000 | vox1a2c3d4e5... | NULL | 5- Finalizado | TRANSHIPMENT_TO_FLOW | 2026-05-13 11:00:00 | 2026-05-13 11:05:00 | NULL | NULL | false |
Abandono na fila
O cliente passa pela fila mas encerra antes de ser distribuído para um operador:
- O registro de fila tem
queue_start_atequeue_end_atpreenchidos. As métricas de abandono ficam associadas somente à etapa do operador.
Exemplo de linhas (resultado de query):
| id | client_id | chat_id | user_id | condition_id | transfer_type | queue_start_at | queue_end_at | start_attendance_at | attendance_end_at | is_active |
|---|---|---|---|---|---|---|---|---|---|---|
| 301 | 2000 | vox1a2c3d4e5... | NULL | 15- Abandono na fila de espera | NULL | 2026-05-13 12:00:00 | 2026-05-13 12:04:00 | NULL | NULL | false |
Diagrama de fluxo (Excalidraw)
Como ler o fluxograma
O diagrama resume todos os pontos onde criamos ou atualizamos registros. Em termos práticos:
- O atendimento pode iniciar por fluxo (automação) ou por disparo manual (HSM/chamada).
- Se o atendido responde, o fluxo segue para operador; caso contrário, pode ocorrer transferência para fila.
- Na fila, a estratégia define se o atendimento vai para o operador ocioso por mais tempo ou fica visível para todos. Em ambos os casos, a primeira ação relevante já cria o registro da etapa.
- Se ninguém assumir dentro do tempo limite, ocorre transbordo. O transbordo pode ir para outra fila ou voltar para fluxo; cada transição atualiza o registro corrente e cria um novo.
- Na finalização, o registro ativo é atualizado com o encerramento e métricas finais.
- Em transferências (fila ou operador), o registro atual é atualizado e um novo registro é criado para a etapa seguinte.