feat: add asterisk pjsip integration
- infrastructure/docker/asterisk.Dockerfile: Asterisk 22.10.1 LTS compilado do fonte oficial (Debian trixie nao distribui mais o pacote asterisk), com PJSIP, AMI, ARI, res_odbc/res_config_odbc, cdr_adaptive_odbc, cel_odbc, app_queue - infrastructure/asterisk/config: templates renderizados no entrypoint (secrets via envsubst, nunca versionados) + sorcery.conf/extconfig.conf para PJSIP realtime, dialplan de teste (extensao 600) - infrastructure/postgres/init/002-asterisk-realtime.sql: tabelas ps_endpoints/ps_auths/ps_aors/ps_contacts/ps_endpoint_id_ips/ ps_registrations/cdr/cel no schema 'asterisk' - infrastructure/nftables: protege AMI/ARI/SIP contra acesso pela LAN (interface ens18), trazido da Fase 9 do TODO para ja, sem afetar SSH nem a rede interna do Docker - docker-compose.yml: servico asterisk em network_mode: host (RTP); Postgres publicado em 127.0.0.1:5432 (nao 0.0.0.0) para o Asterisk alcanca-lo, ja que host network nao enxerga a rede Docker interna Testado: AMI login, ARI com auth (401 sem auth), pjsip realtime consultando Postgres sem erro, dialplan originate -> CDR e CEL gravados corretamente, healthcheck do compose passando.
This commit is contained in:
40
TODO.md
40
TODO.md
@@ -22,13 +22,39 @@ mestre original (`agente.md`, seções 90-93).
|
||||
- [ ] packages/database: schema inicial + migrations tool
|
||||
|
||||
## Fase 2 — Asterisk
|
||||
- [ ] Dockerfile Asterisk 22 LTS (host network)
|
||||
- [ ] PJSIP (transports, sem chan_sip)
|
||||
- [ ] AMI habilitado (bind local/rede interna apenas)
|
||||
- [ ] ARI habilitado (idem)
|
||||
- [ ] Realtime ODBC -> Postgres (schema asterisk)
|
||||
- [ ] CDR, CEL, queue_log habilitados
|
||||
- [ ] Dialplan inicial de teste
|
||||
- [x] Dockerfile Asterisk 22.10.1 LTS compilado do fonte (host network) —
|
||||
Debian trixie não tem mais o pacote `asterisk` nos repos oficiais
|
||||
- [x] PJSIP (transport UDP:5060; chan_sip nem existe mais a partir do Ast 21)
|
||||
- [x] AMI habilitado — testado login via 127.0.0.1:5038, bloqueado na LAN via nftables
|
||||
- [x] ARI habilitado — testado GET /ari/asterisk/info via 127.0.0.1:8088, 401 sem auth
|
||||
- [x] Realtime ODBC -> Postgres schema `asterisk` (sorcery.conf + extconfig.conf
|
||||
+ res_odbc.conf) — `pjsip show endpoints` consulta o Postgres sem erro
|
||||
- [x] CDR via cdr_adaptive_odbc — testado, grava em asterisk.cdr (ANSWERED,
|
||||
duration/billsec corretos). Nota: coluna `end` renomeada para
|
||||
`end_time` (palavra reservada no Postgres, cdr_adaptive_odbc não
|
||||
quota identificadores)
|
||||
- [x] CEL via cel_odbc — testado, grava em asterisk.cel (CHAN_START/ANSWER/
|
||||
HANGUP/CHAN_END)
|
||||
- [x] queue_log habilitado (padrão do app_queue, arquivo em /var/log/asterisk)
|
||||
- [x] Dialplan inicial de teste (contexto `b2bcall-healthcheck`, exten 600,
|
||||
Answer/Playback/Echo) — testado via `channel originate ... extension`
|
||||
- [x] nftables protegendo AMI/ARI/SIP na interface da LAN (ens18), trazido da
|
||||
Fase 9 para já — não testado a partir de outra máquina na LAN (só
|
||||
localmente, onde tráfego para o próprio IP vai por `lo` e não
|
||||
exercita a regra; revisar quando OpenSIPS/outro host estiver disponível)
|
||||
|
||||
### Pendências conhecidas da Fase 2 (não bloqueiam, revisitar depois)
|
||||
- [ ] `res_pjsip_outbound_registration` recusa carregar no boot (mensagem
|
||||
"no existing documentation" para o tipo 'registration' do sorcery) —
|
||||
carregamento manual via `module load` funciona mas é desfeito por uma
|
||||
flag interna de "declined at boot". Só afeta troncos com registration
|
||||
outbound; endpoints/aors funcionam normalmente. Investigar na Fase 4
|
||||
ao implementar cadastro de troncos com registration.
|
||||
- [ ] `res_config_ldap` gera ERROR de log no boot (sem LDAP configurado,
|
||||
não usamos). Cosmético — considerar `noload` em modules.conf.
|
||||
- [ ] `cdr_pgsql`/`cel_pgsql` não compilaram (falta libpq-dev na imagem);
|
||||
usamos `cdr_adaptive_odbc`/`cel_odbc` como alternativa funcional via
|
||||
ODBC — decisão adequada, não precisa dos módulos pgsql nativos.
|
||||
|
||||
## Fase 3 — Backend base
|
||||
- [ ] apps/api (NestJS + Fastify) bootstrap
|
||||
|
||||
Reference in New Issue
Block a user