B2BCall Bootstrap 9857904c6d feat: add outbound routes (Issabel-style dial pattern masking)
Nova aba 'Dialplan -> Rotas de Saída': abstração amigável sobre o dialplan
bruto, no mesmo espírito das Outbound Routes do Issabel/FreePBX. O usuário
informa (prepend) + prefix | match pattern (sintaxe de padrão do Asterisk:
X/Z/N/faixas/coringas, sem o '_' inicial) e escolhe o tronco, sem escrever
exten=>/Dial() à mão.

- packages/database: model OutboundRoute + migration
- apps/api/src/outbound-routes: gerador determinístico (contexto
  b2bcall-outbound-routes, incluído em b2bcall-agents — contexto padrão de
  Extension.context), service/controller CRUD reaproveitando as permissões
  dialplans.*, 6 testes unitários
- apps/api/src/dialplan/dialplan.service.ts: publish() agora gera e
  verifica também o contexto das rotas, no mesmo pipeline de
  versionamento/rollback automático das entradas de dialplan brutas
- apps/frontend: aba com formulário (prepend/prefix/padrão/tronco) e
  preview ao vivo da máscara resultante

O prefixo é sempre removido do número antes de discar e substituído pelo
prepend — o tronco nunca vê o prefixo digitado pelo agente, só o número já
mascarado. Não usado pelo discador preditivo (campanhas já sabem o tronco
via Campaign.trunkId diretamente).

Build/lint/testes (api+frontend) verificados; teste end-to-end contra o
Asterisk real ficou pendente porque a senha do super_admin foi trocada
durante a sessão (acesso legítimo do usuário) — validação via UI delegada
ao usuário.
2026-08-27 20:13:21 -03:00
2026-08-27 10:17:07 -03:00
2026-08-27 12:23:02 -03:00

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

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.

Documentação

Documento Conteúdo
docs/ARCHITECTURE.md Decisões de arquitetura, estrutura do monorepo, rede
docs/INSTALL.md Instalação passo a passo
docs/OPERATIONS.md Operação do dia a dia, atualização, escala
docs/BACKUP_RESTORE.md Backup e restore
docs/SECURITY.md Postura de segurança e checklist de aceite
docs/DATABASE.md Modelo de dados e decisões de schema
docs/API.md Referência de rotas da API
docs/ASTERISK.md Configuração e diagnóstico do Asterisk
docs/OPENSIPS.md Por que não foi implantado nesta fase
docs/PREDICTIVE_DIALER.md Algoritmo do discador preditivo
docs/TROUBLESHOOTING.md Problemas reais encontrados e soluções
docs/RELATORIO_FINAL.md Relatório final de aceite do projeto
CHANGELOG.md O que foi entregue em cada fase
TODO.md Checklist detalhado, item a item, com notas de teste

Estrutura

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

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.

Description
No description provided
Readme 2.1 MiB
Languages
TypeScript 95.4%
Shell 2.1%
Dockerfile 1.4%
CSS 0.6%
Smarty 0.3%
Other 0.2%