feat: add call center queues

- packages/database: Agent, AgentSession, AgentStateEvent, AgentPauseEvent,
  PauseReason, Queue, QueueMember (agente.md secao 53)
- apps/api/src/queues: CRUD de filas gerando queues.conf pelo mesmo padrao
  do dialplan (arquivo compartilhado + module reload app_queue.so), mas
  SEM membros estaticos no arquivo — membership eh 100% dinamica via AMI
  (evita duas fontes de verdade conflitantes)
- apps/api/src/pause-reasons: CRUD de motivos de pausa
- apps/api/src/agents: CRUD administrativo de agentes (1:1 com User)
- apps/api/src/agent-console: maquina de estados do agente
  (LOGGED_IN/AVAILABLE/PAUSED), 'tela do agente' via
  login/available/pause/unpause/logout, cada transicao aciona AMI
  QueueAdd/QueuePause/QueueRemove de verdade e registra
  agent_state_events/agent_pause_events com inicio/fim
- apps/api/src/monitoring: GET /api/monitoring/queues (chamadas
  aguardando, agentes logados/pausados/disponiveis via AMI QueueStatus ao
  vivo) — metricas historicas (TME/TMA/SLA) ficam para a Fase 7

Testado ponta a ponta contra o Asterisk real: fila criada aparece via
'queue show'; agente loga, fica disponivel (QueueAdd confirmado, membro
dinamico visivel), pausa com motivo (confirmado 'paused:Almoco' ao vivo),
despausa, desloga (QueueRemove confirmado, fila volta a 'No Members').

Disposicoes de chamada e Callback adiados para a Fase 6 (dependem de
haver chamadas de campanha reais para classificar).
This commit is contained in:
2026-08-27 13:38:19 -03:00
parent cf3fc4b3ef
commit 63103d4335
29 changed files with 1627 additions and 15 deletions

View File

@@ -28,13 +28,16 @@ for f in "$CONFIG_SRC"/*.conf; do
cp "$f" "$CONFIG_DST/$name"
done
# extensions.conf inclui este arquivo (dialplan gerado pela aplicação) —
# precisa existir mesmo vazio no primeiro boot, antes de a API publicar
# a primeira versão (ver DialplanService).
# extensions.conf/queues.conf incluem estes arquivos gerados pela aplicação
# precisam existir mesmo vazios no primeiro boot, antes da primeira
# publicação (ver DialplanService / QueuesService).
mkdir -p /etc/asterisk-generated
if [ ! -e /etc/asterisk-generated/b2bcall-dialplan.conf ]; then
echo "; vazio até a primeira publicação em Telefonia -> Dialplan" > /etc/asterisk-generated/b2bcall-dialplan.conf
fi
if [ ! -e /etc/asterisk-generated/b2bcall-queues.conf ]; then
echo "; vazio até a primeira publicação em Call Center -> Filas" > /etc/asterisk-generated/b2bcall-queues.conf
fi
chown -R asterisk:asterisk "$CONFIG_DST" /var/lib/asterisk /var/log/asterisk /var/spool/asterisk /var/run/asterisk /etc/asterisk-generated