feat: add structured versioned dialplan and asterisk admin
- packages/database: DialplanEntry + DialplanVersion (schema/config
gerado, nunca dialplan cru vindo do usuario)
- apps/api/src/dialplan: DialplanService gera extensions a partir de
entradas estruturadas (campos com allowlist estrita de caracteres),
escreve em arquivo compartilhado via volume Docker 'dialplan-generated'
entre api e asterisk, recarrega via AMI ('dialplan reload') e valida
checando 'dialplan show <contexto>' por marcadores de erro. Falha na
validacao dispara rollback automatico para a versao anterior; rollback
manual tambem disponivel para qualquer versao no historico
- infrastructure/asterisk: extensions.conf agora inclui o arquivo gerado
pela aplicacao; entrypoint garante que ele existe (vazio) no primeiro
boot antes da primeira publicacao
- apps/api/src/asterisk-admin: status (AMI + heartbeat), module show, e
diagnostico com ALLOWLIST ESTRITA de comandos exatos (nunca shell
arbitraria) — agente.md secao 22
Testado ponta a ponta contra o Asterisk real: dialplan publicado fica
ativo imediatamente sem restart (confirmado via 'dialplan show'),
comando de diagnostico fora da allowlist rejeitado com 400.
This commit is contained in:
27
TODO.md
27
TODO.md
@@ -113,11 +113,28 @@ mestre original (`agente.md`, seções 90-93).
|
||||
na criação/reset, reset endpoint) — testado igual aos troncos
|
||||
- [x] GET /api/monitoring/extensions — status com prioridade de cor
|
||||
(offline/available/busy; pausa e agente logado chegam na Fase 5)
|
||||
- [ ] Painel visual de Ramais (WebSocket, prioridade de cores) — backend
|
||||
(gateway WS) pendente; ExtensionState/pub-sub já prontos como base
|
||||
- [ ] Dialplan estruturado (versionado, modo Advanced, validação+rollback)
|
||||
- [ ] Administração do Asterisk (abas: geral, pjsip, rtp, filas, cdr, cel, logs,
|
||||
ami, ari, modules, diagnóstico com allowlist de comandos)
|
||||
- [ ] Painel visual de Ramais (WebSocket) — backend (gateway WS) ainda
|
||||
pendente; ExtensionState/pub-sub e o endpoint de monitoramento já
|
||||
prontos como base (frontend consumirá via WS na Fase 8)
|
||||
- [x] Dialplan estruturado e versionado (dialplan_entries + dialplan_versions)
|
||||
— testado ponta a ponta: criar entradas -> publicar -> gera
|
||||
b2bcall-dialplan.conf (volume compartilhado api<->asterisk) -> AMI
|
||||
"dialplan reload" -> "dialplan show" confirma ativo, SEM restart.
|
||||
Validação estrita de caracteres em cada campo (nunca aceita entrada
|
||||
capaz de injetar linhas de config). Rollback automático se a
|
||||
verificação pós-reload detectar erro; rollback manual para qualquer
|
||||
versão anterior via endpoint dedicado. Limitação conhecida: detecta
|
||||
falhas estruturais/sintáticas, não erros semânticos como nome de
|
||||
aplicação Asterisk inexistente (só se manifesta em tempo de chamada)
|
||||
- [x] Administração do Asterisk: status (AMI + heartbeat asterisk-events),
|
||||
module show, e diagnóstico com ALLOWLIST ESTRITA de comandos exatos
|
||||
(core show uptime/channels/version, pjsip show *, queue show, module
|
||||
show, dialplan show) — testado: comando permitido executa, comando
|
||||
arbitrário rejeitado com 400. Abas de configuração fina (pjsip/rtp/
|
||||
cdr/cel/logs como formulário editável) ficam para quando o fluxo de
|
||||
"editor avançado com backup/validação" for generalizado além do
|
||||
dialplan — no momento config geral do Asterisk é só leitura via
|
||||
status/diagnóstico, não tem tela de edição de asterisk.conf/rtp.conf
|
||||
|
||||
## Fase 5 — Call Center
|
||||
- [ ] Agentes (agents, agent_sessions) separados de users
|
||||
|
||||
Reference in New Issue
Block a user