Telefonia Nesta sessão, irei detalhar particularidades da telefonia e como analisar. SNGREP Using SNGREP  Consultar chamadas SIP: ->  sngrep Teclando f7 você consegue filtrar os métodos de requisição SIP teclando f3 você consegue filtrar pelo número que aparece na requisição: Ex de ligação no sngrep: INVITE:  Indica que o usuário está sendo convidado a participar de uma sessão multimídia. Trying:  Indica que a requisição está sendo processada. 200 OK(Answer):  Indica a confirmação de atendimento. ACK:  Confirmação de mensagem recebida como resposta final a um INVITE. OPTIONS:  Faz uma pergunta sobre quais métodos e extensões são suportados pelo servidor e pelo usuário descrito no campo de cabeçalho. BYE:   Usado para liberar os recursos associados a uma ligação e forçar a desconexão/desligamento da mesma. CANCEL:   Cancela uma requisição que ainda esteja pendente, ou seja, em andamento. Main Screen  Idx : Coluna do número da linha . Method : Coluna do tipo de mensagem SIP . SIP From : Coluna do campo "De" (From) da mensagem SIP . SIP To : Coluna do campo "Para" (To) da mensagem SIP . Msgs : Coluna da quantidade numérica de mensagens . Source : Coluna do IP e porta de origem . Destination : Coluna do IP e porta de destino . Call State : Coluna do identificador da chamada . ESC Quit : Pressione ESC para sair do sngrep . Enter : Mostra mais informações sobre a linha destacada. Space : Ao pressionar barra de espaço , a linha é selecionada . Isso permite selecionar múltiplas linhas e pode ser usado junto com a opção F2 (salvar) . F1 Help : Abre o menu de ajuda . F2 Save : Permite salvar a sessão atual de captura (diálogos) em um arquivo .pcap ou .txt , definindo caminho e nome do arquivo . F3 Search : Permite pesquisar de forma mais específica e detalhada . F4 Extended : Mostra uma visualização estendida . F5 Clear : Limpa a tela . F7 Filter : Similar à busca, mas com mais opções de filtro para refinar os resultados. F8 Settings : Abre as configurações do SNGREP , incluindo interface, opções de captura, opções de fluxo de chamada e configurações EEP/HEP Homer . F10 : Permite escolher quais colunas serão exibidas na janela do sngrep . SPAM  User-Agent : A maioria das tentativas de spam mostra um User-Agent indesejado , como o exibido neste exemplo. Registration  Registration Expanded  Call Setup  Invite 200 OK Call completou F3 Search  F7 Filtro  F8 Configurações  Interface EEP/HEP HOMER Call Flow Capture log no grep do asterisk Podemos verificar o tronco e o contexto em que ele está passando em tempo real utilizando o comando a seguir asterisk -rvvvvvvvvvvvvv | grep -e "9900"  (Pode ser colocado no lugar do 9900 o número que foi ligado ou o ramal) Exemplo: 1. Informações iniciais da chamada PJSIP/9923-0000011c is ringing PJSIP/9923-0000011c answered Descrição Indica o estado da chamada do ramal 9923 usando o driver PJSIP . Evento Descrição ringing O ramal está tocando answered A chamada foi atendida 2. Início do Dialplan NoOp("PJSIP/9923-0000011c", "S - 20 - 1 - Bina Dinâmica (Solutions)") Parâmetro NoOp() Função usada apenas para log/debug dentro do dialplan. Parâmetro Valor Significado Canal PJSIP/9923 Canal que iniciou a chamada Mensagem S - 20 - 1 - Bina Dinâmica Identificação do fluxo de chamada 3. Definição de Variáveis 3.1 EXTERNPRC Set(__EXTERNPRC=032988611550) Descrição Número externo que originou ou será usado no processamento da chamada. Campo Valor Variável EXTERNPRC Valor 032988611550 Escopo __ indica variável herdada entre canais 3.2 ID_LINH Set(__ID_LINH=1772545025.284) Descrição Identificador da linha ou da sessão da chamada. Campo Descrição ID_LINH ID único da chamada 3.3 ID_ORGANIZACAO Set(__ID_ORGANIZACAO=1) Descrição Identifica a organização/empresa associada à chamada. 3.4 TIPOCALL Set(__TIPOCALL=S) Descrição Tipo da chamada. Valor Significado S Saída 3.5 CHANNEL(accountcode) Set(CHANNEL(accountcode)=S--32988611550--1772545025.284) Descrição Define o accountcode do canal para fins de CDR (bilhetagem) . Formato: TIPO--NUMERO--IDCHAMADA 4. Execução de Scripts AGI Os scripts são executados via Asterisk Gateway Interface . 4.1 Script: insCallSainte AGI(script.php, insCallSainte,032988611550,1772545025.284,177254...) Função Registrar a chamada no banco de dados. Parâmetros Ordem Parâmetro Descrição 1 insCallSainte Nome da função 2 032988611550 Número 3 1772545025.284 ID da chamada 4 timestamp Data/hora 4.2 Script: insProtocolo AGI(script.php, insProtocolo,032988611550,1772545025.284,...) Função Gerar protocolo de atendimento. Parâmetros Parâmetro Descrição Número Cliente ID chamada Identificação da ligação timestamp Data da ligação 4.3 Definição do protocolo Set(__PROTOCOLO=2603038511) Descrição Número único de protocolo de atendimento . 4.4 Script: actBlacklistSainte AGI(script.php,actBlacklistSainte,032988611550,...) Função Verifica se o número está na blacklist . Possível retorno Significado OK Número liberado BLOCK Número bloqueado 5. Verificação de Horário GotoIf("PJSIP/9923-0000011c", "0?encerrar") Descrição Verifica condição de atendimento (exemplo: horário de atendimento). Resultado Ação 1 continua 0 vai para encerrar 6. Log informativo NoOp("Sem conf de Bina: 78") Descrição Mensagem de debug indicando configuração de Bina ausente . 7. Definição de dados finais da chamada 7.1 ID_PAC Set(__ID_PAC=78) Identificação do paciente/cliente. 7.2 ID_TRONCO Set(__ID_TRONCO=78) Identificação do tronco SIP utilizado. 7.3 TELEFONE Set(__TELEFONE=1541032988611550) Número final utilizado na discagem. 8. Discagem da chamada Dial(PJSIP/1541032988611550@sipsolutionspuri,45,TtKkU(gravacao)) Aplicação Dial() Responsável por realizar a chamada. Parâmetros Campo Valor Descrição Tecnologia PJSIP Driver SIP Destino 1541032988611550 Número discado Tronco sipsolutionspuri Servidor SIP Timeout 45 Tempo máximo Flags TtKk Permissões de transferência U() gravacao executa gravação 9. Encerramento Hangup() Finaliza a chamada. 10. Mensagem final Spawn extension exited non-zero Significado O fluxo terminou retornando código diferente de zero , geralmente indicando: finalização por lógica retorno de AGI chamada encerrada Fluxo resumido da chamada Ramal 9923 atende ↓ Define variáveis da chamada ↓ Registra chamada (AGI) ↓ Gera protocolo ↓ Verifica blacklist ↓ Valida horário ↓ Define tronco ↓ Discagem via SIP ↓ Gravação ↓ Encerramento   Conceitos básicos de telefonia Documentação Básica do Asterisk 1. O que é o Asterisk O Asterisk é um sistema de PBX (Private Branch Exchange) de código aberto que permite criar uma central telefônica baseada em software. Ele possibilita: Telefonia VoIP Integração com linhas SIP ou operadoras Filas de atendimento URA (menus automáticos) Gravação de chamadas Integração com sistemas externos Arquivos principais de configuração geralmente incluem: sip.conf ou pjsip.conf extensions.conf queues.conf voicemail.conf 2. Ramais (Extensions) Conceito Ramais representam usuários ou dispositivos telefônicos conectados ao sistema. Cada ramal pode ser: Telefone IP Softphone Gateway Aplicação Exemplo de configuração em PJSIP ( pjsip.conf ): [1001] type=endpoint context=interno disallow=all allow=alaw,ulaw auth=1001-auth aors=1001 [1001-auth] type=auth auth_type=userpass username=1001 password=senha123 [1001] type=aor max_contacts=1 Funções principais dos ramais Fazer chamadas internas Receber chamadas Participar de filas Transferir chamadas 3. Contextos Conceito Contextos organizam regras de discagem dentro do sistema. Eles definem: Quem pode ligar para quem Para onde uma chamada será direcionada Configurados no arquivo: extensions.conf Exemplo: [interno] exten => 1001,1,Dial(PJSIP/1001) exten => 1002,1,Dial(PJSIP/1002) exten => 2000,1,Queue(suporte) Vantagens Controle de permissões Segurança Organização do dialplan 4. Troncos (Trunks) Conceito Troncos conectam o Asterisk a outras redes telefônicas . Podem ser: Operadora VoIP Outro PBX Gateway GSM Linha PSTN Tipos comuns: SIP trunk IAX trunk Exemplo de tronco SIP: [operadora] type=endpoint transport=transport-udp context=entrada disallow=all allow=alaw,ulaw outbound_auth=operadora-auth aors=operadora Uso no dialplan: exten => _0X.,1,Dial(PJSIP/${EXTEN}@operadora) Isso permite fazer chamadas externas. 5. Filas (Queues) Conceito Filas são usadas para distribuir chamadas entre agentes . Muito utilizadas em: Call centers Suporte técnico Atendimento comercial Configuradas em: queues.conf Exemplo: [suporte] strategy=ringall timeout=15 retry=5 maxlen=10 member => PJSIP/1001 member => PJSIP/1002 Estratégias de atendimento Algumas estratégias: ringall – toca para todos rrmemory – round robin leastrecent – quem atende há mais tempo fewestcalls – menos chamadas atendidas Uso no dialplan: exten => 2000,1,Queue(suporte) 6. URA (IVR) URA significa Unidade de Resposta Audível , ou menu automático . Exemplo clássico: "Digite 1 para vendas, 2 para suporte." Configurado em extensions.conf . Exemplo: [ura-principal] exten => s,1,Answer() same => n,Playback(bem-vindo) same => n,WaitExten(10) exten => 1,1,Goto(vendas,s,1) exten => 2,1,Goto(suporte,s,1) Funções comuns: Playback() → toca áudio Background() → toca áudio e espera tecla WaitExten() → aguarda digitação 7. Autenticação A autenticação garante que apenas dispositivos autorizados possam registrar ramais . Ela ocorre via: Usuário Senha IP autorizado Exemplo: [1001-auth] type=auth auth_type=userpass username=1001 password=senha123 Boas práticas: Senhas fortes Bloqueio de IP Uso de firewall Limitar tentativas Ferramentas comuns: Fail2Ban Firewall 8. Problemas Comuns no Asterisk 1. Ramal não registra Possíveis causas: Usuário ou senha errados Porta SIP bloqueada NAT incorreto IP incorreto Comando para verificar: pjsip show endpoints 2. Sem áudio (one way audio) Problema comum em VoIP. Causas: NAT Firewall RTP bloqueado Solução: Configurar rtp.conf Liberar portas RTP 3. Chamadas caindo Possíveis motivos: Timeout SIP Problemas de rede Codec incompatível 4. Filas não chamam agentes Possíveis causas: Agentes offline Ramal não registrado Estratégia mal configurada Verificação: queue show 5. URA não reconhece digitação Pode ocorrer por: Codec incompatível Problema com DTMF Configuração comum: dtmf_mode=rfc4733 9. Comandos úteis no CLI Acessar console: asterisk -rvvv Comandos importantes: Ver ramais: pjsip show endpoints Ver registros: pjsip show contacts Ver filas: queue show Ver canais ativos: core show channels 10. Fluxo típico de chamada Fluxo comum em sistemas de atendimento: Operadora ↓ Tronco SIP ↓ Contexto de entrada ↓ URA ↓ Fila ↓ Ramal (Agente) Resumo:  No Asterisk: Componente Função Ramais Usuários/dispositivos Contextos Regras de discagem Troncos Conexão com operadoras Filas Distribuição de chamadas URA Menu automático Autenticação Segurança de acesso