evobits

evobits · guia · asterisk

Asterisk: troncos, ramais, filas e qualidade pelo AMI

A sonda lê o Asterisk pelo AMI (Asterisk Manager Interface) com um usuário próprio e uma lista fechada de ações de leitura. O evobits nunca origina, derruba, transfere chamada nem roda comando no Asterisk.

Interface
AMI, porta 5038 (TLS na 5039)
Acesso
Usuário só de leitura, pela sonda
Precisa de
Sonda 1.0.9 ou mais nova
Onde no painel
Dispositivo > Adicionar sensor > Asterisk (AMI)

Copia esta página inteira em Markdown, com o texto para IA, para colar no Claude Code, no ChatGPT, no Gemini ou no assistente que vocês usam.

Exemplo de prompt
Preciso criar no nosso Asterisk o usuário AMI só de leitura do evobits.
Siga o guia que vou colar abaixo.

Nossa stack: (descreva aqui: como o Asterisk é gerenciado: arquivos, FreePBX, Issabel, contêiner).

Leia o guia inteiro e execute a seção "Texto para IA".
O token nunca vai escrito em arquivo: só a variável EVOBITS_TOKEN.

<COLE AQUI O TEXTO COPIADO PELO BOTÃO "COPIAR PARA IA">

01O que é monitorado

SensorValorLimiar de partida
Resposta do Asterisktempo de resposta do núcleo, em ms
Troncos registradostroncos PJSIP com registro de saída ativo; cada tronco com estado, canais, há quanto tempo está sem registro
Ramais onlineramais PJSIP disponíveis, em uso e indisponíveis
Canais ativoscanais e chamadas em curso
Chamadas esperando em filasoma de todas as filasatenção 5, fora 15
Maior espera em filaem segundosatenção 120, fora 300
Maior abandono em filaem %atenção 10, fora 25
Jitter máximopor tronco, p95 na última hora, em msatenção 30, fora 60
Perda máximapor tronco, na última hora, em %atenção 1, fora 3

Jitter e perda vêm dos eventos RTCP que o Asterisk publica durante as chamadas; sem chamada na última hora, o sensor fica "sem chamada" e não alerta. Troncos e ramais são os do PJSIP (o antigo chan_sip não é lido).

02Como funciona

  • O evobits pede: CoreStatus, CoreSettings, CoreShowChannels, PJSIPShowRegistrationsOutbound, DeviceStateList, QueueSummary, QueueStatus, e escuta o evento RTCPReceived. Para entrar: Challenge, Login, Logoff, Ping e ListCommands.
  • Nunca: Originate, Hangup, Redirect, Command, Reload, Setvar, QueueAdd, QueueRemove nem qualquer ação fora da lista. A sonda confere a lista antes de escrever no socket.
  • Login sempre por desafio MD5: a senha nunca trafega em texto, nem na porta comum nem na TLS. Se o Asterisk não oferecer o desafio, a sonda não envia a senha.
  • **Por que write = reporting:** no Asterisk, as ações que leem troncos, canais e o núcleo (CoreStatus, CoreSettings, CoreShowChannels, PJSIPShowRegistrationsOutbound) exigem a classe reporting em write. Um usuário com write vazio não lê troncos nem canais. A classe reporting libera também PJSIPRegister, PJSIPUnregister, PJSIPQualify e LoggerRotate, que o evobits não chama.
  • Usuário com escrita perigosa é recusado: depois do login, a sonda pede ListCommands (a lista do que o usuário pode fazer). Se aparecer Originate, Hangup, Command, Redirect, Setvar, Reload, QueueAdd, Atxfer, DBPut, ModuleLoad ou outra ação de escrita perigosa, o teste falha com "O usuário pode escrever no Asterisk" e nada mais é lido.
  • Uma sessão AMI fica aberta entre as leituras (para juntar os eventos RTCP) e fecha depois de 10 minutos sem uso.
  • Privacidade: do AMI só saem nomes de ramal e de tronco, estados e números. Número de quem ligou, nome de pessoa, nome de agente e o canal nunca entram na amostra.
  • A senha fica cifrada no evobits e nunca volta para a tela.

03Onde aparece

Na página do dispositivo do Asterisk: o cabeçalho ("No ar há 12 d · Asterisk 22.1.0 · 1 tronco sem registro"), o painel de troncos e ramais (no desenho do painel frontal) e as abas Troncos (estado, canais, jitter p95 e perda por tronco), Ramais e Filas (esperando, maior espera, abandono e nível de serviço). Os sensores entram nos dashboards e nos alertas como qualquer outro.

04Alertas

Os limiares da tabela acima já vêm prontos e podem ser mudados em cada sensor. Regras de alerta de dispositivo e de sensor valem como sempre (por exemplo, "tronco sem registro" ou "fila com mais de 5 esperando por 3 minutos").

05Limites e privacidade

  • Precisa de sonda 1.0.9 ou mais nova, que alcance o Asterisk na porta do AMI (5038, ou 5039 com TLS).
  • A leitura é a cada 30 s; o painel mostra até 800 ramais.
  • Nunca deixe a porta do AMI aberta para a internet: o permit do guia deixa só a sonda entrar.

06Como conectar

Na página do dispositivo do Asterisk: Adicionar sensor > Asterisk (AMI), tela "Conectar Asterisk". No servidor do Asterisk, como root:

**1. Acrescente no /etc/asterisk/manager.conf** (o [general] com enabled = yes já precisa existir):

[evobits]
secret = troque-por-uma-senha-longa
deny   = 0.0.0.0/0.0.0.0
permit = <ip-da-sonda>/255.255.255.255
read   = system,call,agent,reporting
write  = reporting

O permit é o IP com que a sonda chega ao Asterisk (atrás de NAT, o IP depois do NAT). Troque <ip-da-sonda> pelo IP da sonda do dispositivo; a tela de conexão mostra o valor certo.

2. Recarregue o AMI, no console do Asterisk:

asterisk -rx "manager reload"

**3. Cole o usuário (evobits) e o segredo na tela, rode o Teste** e escolha o que ler: Troncos, Ramais e canais, Filas, Qualidade (RTCP).

AMI com TLS (porta 5039)

No [general] do manager.conf:

tlsenable = yes
tlsbindaddr = 0.0.0.0:5039
tlscertfile = /etc/asterisk/keys/asterisk.crt
tlsprivatekey = /etc/asterisk/keys/asterisk.key

Recarregue e ligue "AMI com TLS (porta 5039)" na tela. A sonda confere o certificado: ele precisa ser de uma autoridade reconhecida e do nome do dispositivo (se o endereço do dispositivo é um IP, o certificado precisa ter esse IP). Certificado autoassinado só passa com a opção explícita de aceitar sem verificar (desligada por padrão).

07Como conferir

O Teste da tela mostra os degraus:

  1. 1Conexão: a versão do Asterisk e do AMI (por exemplo "Asterisk 20.11.1, AMI 9.0").
  2. 2Leitura: "leitura da lista fechada".
  3. 3Escrita: nenhuma ação perigosa.
  4. 4Itens: quantos troncos, ramais e filas foram achados.

Depois de criados, os sensores aparecem na página do dispositivo em menos de 1 minuto.

08Problemas comuns

MensagemO que fazer
Usuário ou segredo recusado, ou o permit do manager.conf não inclui a sondaconfira o segredo e o IP do permit; depois manager reload
A porta recusou a conexãoenabled = yes e port = 5038 no [general], bindaddr que a sonda alcance, firewall
A porta não responde como AMI do Asteriska porta é de outro serviço
O usuário pode escrever no Asterisktire system, call, originate, command, config, agent e all do write; deixe só reporting
O usuário não tem permissão de leiturafalta reporting no write ou alguma classe no read (system,call,agent,reporting)
O certificado TLS do Asterisk não conferecertificado autoassinado, vencido ou de outro nome
O Asterisk não ofereceu o login por desafio MD5versão ou configuração do AMI sem Challenge; o evobits não manda a senha em texto
Jitter e perda "sem chamada"nenhuma chamada no tronco na última hora, ou o Asterisk não publica RTCP

09Texto para IA

Para pedir a um assistente de código (Claude Code ou afins) que escreva a mudança no seu Asterisk. Ele só entrega os comandos; você decide quando rodar. Troque os marcadores entre < >; o token fica só na variável EVOBITS_TOKEN.

# Tarefa: criar no Asterisk o usuário AMI só de leitura do evobits

## Objetivo
Acrescentar ao Asterisk um usuário AMI chamado `evobits`, que o evobits usa para ler troncos, ramais, canais, filas e
RTCP, sem poder originar, derrubar ou transferir chamadas, rodar comandos ou recarregar o Asterisk, e que só aceite a
conexão da sonda do evobits (<ip-da-sonda>).

## Contexto
- Bloco a acrescentar em /etc/asterisk/manager.conf:
    [evobits]
    secret = <senha longa, vinda de um segredo>
    deny   = 0.0.0.0/0.0.0.0
    permit = <ip-da-sonda>/255.255.255.255
    read   = system,call,agent,reporting
    write  = reporting
- `write = reporting` é necessário: sem ele o Asterisk não deixa ler troncos e canais. Qualquer outra classe em
  `write` (system, call, originate, command, config, agent, all) faz o evobits recusar o usuário.
- O `[general]` do manager.conf precisa de `enabled = yes` e `port = 5038` (ou TLS na 5039 com `tlsenable = yes`,
  `tlsbindaddr`, `tlscertfile`, `tlsprivatekey` e certificado válido para o nome ou IP do servidor).
- Depois: `asterisk -rx "manager reload"` (não reinicia o Asterisk nem derruba chamadas).
- O evobits só lê: CoreStatus, CoreSettings, CoreShowChannels, PJSIPShowRegistrationsOutbound, DeviceStateList,
  QueueSummary, QueueStatus e o evento RTCPReceived. Login por desafio MD5.

## Passos
1. Descubra como o Asterisk é gerenciado (arquivos à mão, FreePBX, Issabel, Ansible, contêiner). Em FreePBX e
   parecidos, use o arquivo de inclusão próprio (por exemplo manager_custom.conf), não o arquivo gerado.
2. Confira se já existe um usuário `[evobits]`; se existir, mostre a diferença em vez de sobrescrever.
3. Acrescente o bloco do contexto, com a senha lida de um segredo ou variável (EVOBITS_AMI_SENHA), nunca escrita.
4. Confirme que o `[general]` tem `enabled = yes` e a porta que a sonda alcança.
5. Entregue os comandos e só rode `manager reload` depois do meu OK. Não reinicie o Asterisk.

## Regras
- Não mude nada além do bloco `[evobits]` (nem dialplan, nem PJSIP, nem outros usuários AMI).
- Não grave a senha em arquivo versionado nem na resposta.
- Não abra a porta do AMI para a internet.

## Como saber que deu certo
1. `asterisk -rx "manager show user evobits"` mostra o usuário com write = reporting.
2. No painel do evobits, "Conectar Asterisk", o Teste mostra Conexão com a versão, Leitura ok, Escrita sem ações
   perigosas e os troncos, ramais e filas achados.