Asterisk Real-Time Monitoring Service — (AMI + WebSocket)
O Monitor Azcall3 é um microserviço independente para monitoramento em tempo real de ramais, troncos e chamadas do Asterisk via AMI.
Ele coleta eventos do PBX, organiza o estado em memória e publica atualizações para o painel WebSocket (front Frest), exibindo o status dos ramais e troncos sem necessidade de recarregar a página.
Este módulo pode ser instalado e ativado por cliente, sem alterar o core do Azcall3.
/opt/monitor-azcall/
├── monitor-service.js # Serviço principal (Node.js + AMI + WS)
├── .env # Configurações de porta e AMI
├── public/ # Painel web (Frest-style)
│ ├── index.html
│ ├── monitor.js
│ └── styles.css
└── systemd/
└── monitor-azcall.service
# Examplo de configuração environment para Monitor AzCall
PORT=5120
PUBLISH_MODE=socket
SOCKET_NAMESPACE=/monitor
ALLOW_ORIGIN=*
# Configuração Asterisk Manager Interface (AMI) - pode ser múltiplos hosts separados por vírgula
AMI_HOSTS=127.0.0.1
AMI_PORT=5038
AMI_USER=usuario_ami
AMI_PASS=senha_ami
# Redis (se quiser implementar o modo redis)
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_CHANNEL=monitor-eventsProxyPass "/monitor/" "http://127.0.0.1:5120/"
ProxyPassReverse "/monitor/" "http://127.0.0.1:5120/"- Painel:
https://seudominio.com/monitor/ - WebSocket:
wss://seudominio.com/monitor
| Categoria | Recursos |
|---|---|
| Ramais | Listagem automática via PJSIPShowEndpoints + atualização por eventos PeerStatus |
| Troncos SIP | Listagem via PJSIPShowRegistrationsOutbound |
| Troncos IAX2 | Coleta via IAXpeerlist (eventos PeerEntry, PeerlistComplete) |
| Chamadas ativas | Identificação via CoreShowChannels e eventos NewChannel, Hangup, BridgeEnter, BridgeLeave |
| Conexão WS | Broadcast em tempo real + reconexão automática no front |
| Front-end | Painel leve em Frest (Bootstrap 5 + BoxIcons + Grid responsivo) |
| Status visual | Online/Offline, Registrado, Em chamada, Desconectado |
- Conecta ao AMI dos hosts definidos em
.env. - Executa as ações iniciais:
PJSIPShowEndpointsPJSIPShowRegistrationsOutboundIAXpeerlistCoreShowChannels
- Mantém um estado em memória (
Map) com:state = { peers: Map(), // ramais trunks: Map(), // troncos calls: Map() // chamadas ativas }
- Emite via WebSocket (
broadcast(event, data)) todos os updates:InitialStatePeerStatusRegistryNewCall,CallState,CallEndedBridgeEnter,BridgeLeave
Interface Moderna com:
- Navbar fixa (
Monitor Azcall) - Colunas:
- Ramais e Agentes
- Troncos
- Chamadas Ativas
- Indicadores de status (badges coloridas)
- Rodapé com créditos
Lógica do painel:
- Conecta via WebSocket ao backend (
/monitor) - Recebe e trata os eventos AMI
- Renderiza em tempo real os elementos
- Reconnection automática com contador de tentativas
Exemplo do mecanismo de reconexão:
ws.onclose = () => {
if (reconnectAttempts < maxReconnect) {
reconnectAttempts++;
statusEl.textContent = `Reconectando (${reconnectAttempts})...`;
setTimeout(connectWS, 3000);
} else {
statusEl.textContent = "Desconectado";
}
};Backend com ciclo de atualização a cada 5 segundos para renovar o estado visual.
- Base (Bootstrap 5)
- Layout em grid (
col-md-4) — 3 ramais por linha - Badges com cores dinâmicas (
bg-success,bg-danger,bg-secondary,bg-warnig) - Efeitos sutis de hover e sombra
O monitor pode ser embutido como página no painel do Azcall PbxIp via iframe:
<iframe src="https://seudominio.com/monitor/"
style="border:0;width:100%;height:calc(100vh - 80px);"></iframe>Ou adicionado no menu supervisor:
<li class="nav-item">
<a href="https://seudominio.com/monitor/" target="_blank" class="nav-link">
<i class="bx bx-pulse"></i>
<span>Monitoramento</span>
</a>
</li>Desativar o módulo → basta ocultar o menu.
| Evento | Descrição |
|---|---|
PeerStatus |
Atualiza status de ramal (OK, Unreachable, etc.) |
Registry |
Atualiza registro de tronco |
Newchannel |
Nova chamada iniciada |
Newstate |
Mudança de estado da chamada |
BridgeEnter / BridgeLeave |
Entrou ou saiu de uma ponte |
Hangup |
Chamada finalizada |
CoreShowChannel |
Chamada ativa detectada no carregamento inicial |
PeerEntry (IAX2) |
Tronco ou peer IAX detectado |
| Tipo | Critério |
|---|---|
| SIP Ramal | Description == "0" |
| PJSIP Ramal | OutboundAuths == "0" |
| PJSIP Tronco | OutboundAuths != "0" |
| SIP Tronco | Description == "trunk" |
| IAX Tronco | ChannelType == "IAX2" |
- Reconexão automática (Node e Front)
- Múltiplos AMI hosts simultâneos
- Estado em memória limpo e consistente
- Atualização de status via broadcast contínuo
Este projeto é licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Por favor, sinta-se à vontade para fazer um fork, envie um pull request ou abra uma issue para discutir melhorias ou bugs.
Para dúvidas, sugestões ou suporte, entre em contato:
- Email: [email protected]
- Site: portcallvoip.com.br
- GitHub: Israel Azevedo
- Whatsapp: Clique aqui
Sistema desenvolvido por Israel Azevedo (Aztell soluções em telefonia IP)
Versão:
v1.0.0
Data: Outubro/2025
Se este projeto lhe ajudou, considere fazer uma doação para apoiar o desenvolvimento contínuo:
- Link para Doação: Doe via Pix
