- 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.