feat: add telephony layer and asterisk-events worker
- packages/telephony: cliente AMI proprio sobre TCP puro (sem dependencia de terceiros pouco mantida) + interface TelephonyProvider + AsteriskTelephonyProvider (Originate, Hangup, QueuePause/Add/Remove, QueueStatus, ExtensionState, DeviceState, PJSIPShowEndpoints/Contacts, Reload, runCommand, stream de eventos). Testado contra o Asterisk real — o formato de resposta do Command mudou entre versoes do Asterisk (headers 'Output:' repetidos em vez de 'Response: Follows'/'--END COMMAND--'), corrigido apos inspecionar os bytes crus do protocolo - apps/asterisk-events: worker dedicado a manter a conexao AMI viva, normalizar eventos (Newchannel, DialBegin/End, Hangup, DeviceStateChange, ContactStatus, eventos de fila/agente), persistir ExtensionState no Postgres e publicar em Redis pub/sub para consumo em tempo real. Containerizado, alcanca o Asterisk (host network) via host.docker.internal a partir da rede bridge. Heartbeat no Redis para health check - packages/database: novos modelos Trunk, Extension, ExtensionState (migration aplicada) - packages/shared: secret-crypto.ts (AES-256-GCM para credenciais de trunk e senha SIP em repouso, master key externa ao banco) Testado ponta a ponta: chamada real originada -> eventos normalizados recebidos via Redis SUBSCRIBE, heartbeat renovando no TTL correto.
This commit is contained in:
@@ -131,6 +131,10 @@ services:
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- b2bcall-net
|
||||
# Permite alcançar o Asterisk (network_mode: host) via AMI/ARI a partir
|
||||
# da rede bridge — ver docs/ARCHITECTURE.md 3.2.1.
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
@@ -158,3 +162,37 @@ services:
|
||||
resources:
|
||||
limits:
|
||||
memory: 300M
|
||||
|
||||
asterisk-events:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: infrastructure/docker/asterisk-events.Dockerfile
|
||||
image: b2bcall-asterisk-events:0.1.0
|
||||
container_name: b2bcall-asterisk-events
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- b2bcall-net
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
asterisk:
|
||||
condition: service_healthy
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
ASTERISK_HOST: host.docker.internal
|
||||
POSTGRES_HOST: postgres
|
||||
REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "10m"
|
||||
max-file: "3"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 150M
|
||||
|
||||
Reference in New Issue
Block a user