Fase 9 (segurança e produção): - GET /api/metrics: endpoint Prometheus com métricas reais (chamadas, agentes, filas, CPS por campanha), protegido por permissão - scripts/backup.sh, restore.sh, healthcheck.sh, install.sh, update.sh — testados contra o ambiente real (backup.sh e healthcheck.sh rodados de verdade; install.sh/update.sh validados por inspeção, ambiente atual já provisionado) - POST /api/agent-console/dispose: aplica disposição de chamada de verdade (lacuna deixada aberta desde a Fase 6), com ações CALLBACK (agenda retorno) e DO_NOT_CALL (suprime automaticamente) - apps/dialer-worker/src/callback-sweep.ts: reativa leads com callback vencido; GET /api/callbacks para consulta - apps/dialer-worker/src/wrap-up-sweep.ts: transição automática WRAP_UP -> AVAILABLE + despausa real na fila do Asterisk. Exigiu corrigir main.ts para conectar ao AMI mesmo em DIALER_SIMULATION=true (DIALER_SIMULATION deve impedir só originação de chamada, não ações administrativas de fila) - nftables revisado (sem alterações necessárias) - Documentação completa: INSTALL, OPERATIONS, BACKUP_RESTORE, SECURITY, DATABASE, API, ASTERISK, OPENSIPS (não implementado, motivo documentado), TROUBLESHOOTING - README.md e CHANGELOG.md reescritos Fase 10 (testes e aceite): - Quality gate completo executado: build/typecheck (7 workspaces), lint, 46 testes unitários, docker compose config/ps, healthcheck — tudo verde - Aceite de segurança (seção 92): 13 itens verificados ao vivo contra o sistema real, não só por inspeção de código - Aceite Asterisk (seção 93): os 5 comandos executados e documentados, comunicação API->AMI->Asterisk validada - docs/RELATORIO_FINAL.md: relatório final no formato da seção 96 Todos os fixtures de teste desta fase foram removidos/desativados ao final. Credenciais de acesso entregues separadamente em CREDENCIAIS.txt (fora do git, nunca versionado).
84 lines
3.3 KiB
Markdown
84 lines
3.3 KiB
Markdown
# B2BCall
|
|
|
|
Plataforma de discagem preditiva / call center — monorepo TypeScript
|
|
(Next.js + NestJS + PostgreSQL + Redis + Asterisk 22/PJSIP), construída e
|
|
testada de ponta a ponta contra containers reais.
|
|
|
|
## Stack
|
|
|
|
- **Frontend**: Next.js 15 (App Router), React 19, Tailwind CSS v4.
|
|
- **Backend**: NestJS 11 (Fastify), Prisma ORM.
|
|
- **Banco**: PostgreSQL 17 (schemas `public` + `asterisk`).
|
|
- **Cache/coordenação**: Redis 7 (CPS limiter, lock distribuído, EWMA de
|
|
pacing).
|
|
- **Telefonia**: Asterisk 22.10.1 (PJSIP, AMI, ARI, Realtime via ODBC).
|
|
- **Infra**: Docker Compose, Nginx (reverse proxy único), nftables.
|
|
|
|
## Início rápido
|
|
|
|
```bash
|
|
git clone <url> /opt/b2bcall
|
|
cd /opt/b2bcall
|
|
sudo ./scripts/install.sh
|
|
```
|
|
|
|
Ao final, a URL de acesso e o caminho do `FIRST_LOGIN.txt` (credenciais do
|
|
primeiro acesso) são impressos no terminal. Detalhes em
|
|
[`docs/INSTALL.md`](docs/INSTALL.md).
|
|
|
|
## Documentação
|
|
|
|
| Documento | Conteúdo |
|
|
|---|---|
|
|
| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Decisões de arquitetura, estrutura do monorepo, rede |
|
|
| [`docs/INSTALL.md`](docs/INSTALL.md) | Instalação passo a passo |
|
|
| [`docs/OPERATIONS.md`](docs/OPERATIONS.md) | Operação do dia a dia, atualização, escala |
|
|
| [`docs/BACKUP_RESTORE.md`](docs/BACKUP_RESTORE.md) | Backup e restore |
|
|
| [`docs/SECURITY.md`](docs/SECURITY.md) | Postura de segurança e checklist de aceite |
|
|
| [`docs/DATABASE.md`](docs/DATABASE.md) | Modelo de dados e decisões de schema |
|
|
| [`docs/API.md`](docs/API.md) | Referência de rotas da API |
|
|
| [`docs/ASTERISK.md`](docs/ASTERISK.md) | Configuração e diagnóstico do Asterisk |
|
|
| [`docs/OPENSIPS.md`](docs/OPENSIPS.md) | Por que não foi implantado nesta fase |
|
|
| [`docs/PREDICTIVE_DIALER.md`](docs/PREDICTIVE_DIALER.md) | Algoritmo do discador preditivo |
|
|
| [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) | Problemas reais encontrados e soluções |
|
|
| [`docs/RELATORIO_FINAL.md`](docs/RELATORIO_FINAL.md) | Relatório final de aceite do projeto |
|
|
| [`CHANGELOG.md`](CHANGELOG.md) | O que foi entregue em cada fase |
|
|
| [`TODO.md`](TODO.md) | Checklist detalhado, item a item, com notas de teste |
|
|
|
|
## Estrutura
|
|
|
|
```text
|
|
apps/
|
|
frontend Next.js — interface web completa
|
|
api NestJS — REST, autenticação, RBAC, telefonia, relatórios
|
|
dialer-worker Motor do discador preditivo
|
|
asterisk-events Conector AMI dedicado (eventos → Postgres/Redis)
|
|
packages/
|
|
database Schema Prisma + migrations
|
|
shared Utilitários compartilhados (permissões, criptografia)
|
|
telephony Client AMI/ARI próprio
|
|
infrastructure/
|
|
asterisk Configuração do Asterisk
|
|
nginx Reverse proxy
|
|
postgres Scripts de inicialização (schemas public + asterisk)
|
|
docker Dockerfiles
|
|
nftables Regras de firewall
|
|
scripts/ install.sh, update.sh, backup.sh, restore.sh, healthcheck.sh
|
|
```
|
|
|
|
## Desenvolvimento
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm -r build # build de todos os pacotes/apps
|
|
pnpm -r test # testes unitários (dialer-worker + api)
|
|
pnpm --filter @b2bcall/api lint
|
|
```
|
|
|
|
## Ambiente de referência
|
|
|
|
Construído e validado em Debian 13 (trixie), 2 vCPU / 1.9 GiB RAM — ver
|
|
`docs/ARCHITECTURE.md` §1 para as implicações dessa restrição nas decisões
|
|
de arquitetura. Recomendado 4 vCPU / 8 GiB RAM para produção com volume
|
|
real de discagem.
|