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:
@@ -60,7 +60,11 @@ RATE_LIMIT_LOGIN_MAX=5
|
||||
RATE_LIMIT_LOGIN_WINDOW_SECONDS=60
|
||||
|
||||
# --- Asterisk / AMI / ARI ------------------------------------------------
|
||||
ASTERISK_HOST=127.0.0.1
|
||||
# host.docker.internal (mapeado via extra_hosts no docker-compose.yml) —
|
||||
# os serviços da aplicação (rede bridge) alcançam o Asterisk (network_mode:
|
||||
# host) por aqui, já que "asterisk"/"127.0.0.1" não resolvem entre redes
|
||||
# diferentes do Docker (ver docs/ARCHITECTURE.md 3.2.1).
|
||||
ASTERISK_HOST=host.docker.internal
|
||||
AMI_PORT=5038
|
||||
AMI_USERNAME=b2bcall_ami
|
||||
AMI_SECRET=CHANGE_ME_STRONG_PASSWORD
|
||||
|
||||
Reference in New Issue
Block a user