Arquitetura do Asterisk


Olá, pessoas! Vamos falar sobre a arquitetura geral do Asterisk? Do ponto de vista arquitetônico, o Asterisk consiste em vários módulos diferentes. Esta modularidade oferece flexibilidade quase ilimitada no desenvolvimento de sistemas baseados em Asterisk  Open Source Communications Framework. Como administrador do sistema Asterisk, você pode escolher quais módulos você pode carregar e configurar. Cada módulo carregável fornece recursos diferentes para o sistema. Por exemplo, um módulo pode permitir que seu sistema Asterisk se comunique com linhas telefônicas analógicas (POTS), enquanto outro pode adicionar relatórios de chamadas detalhados de recursos. neste post, discutiremos o estado geral de alguns componentes do Asterisk, vários tipos de módulos e seus recursos.

O Asterisk é um programa grande com um grande número de componentes interconectados. Abaixo está um diagrama simplificado destinado a ilustrar as inter-relações de alguns dos principais componentes entre si e com objetos fora do Asterisk.

É necessário entender e saber como o Asterisk funciona com dispositivos de rede externos e arquivos na rede local.

Arquitetura do Asterisk: o Asterisk tem um kernel que pode interagir com vários módulos. Os módulos, chamados de drivers de canal, fornecem canais que seguem a caixa de diálogo do Asterisk para executar o comportamento programado e facilitar a comunicação entre dispositivos ou programas fora do Asterisk. Os canais geralmente usam um mecanismo de ponte para interagir com outros canais. 

CORE (PBX) do Asterisk: o coração de qualquer versão do Asterisk é o Kernel chamado de CORE, que também pode ser chamado de PBX. O CORE (PBX) principal é um componente importante que fornece toda a infraestrutura. Entre as principais funções, o kernel lê os arquivos de configuração, incluindo no Dialplan (extensions.conf, extensions.ael e extensions.lua), e carrega todos os outros módulos, vários componentes, que fornecem maior funcionalidade. O kernel carrega e constrói o roteamento, que é um dos principais componentes de qualquer versão do Asterisk. O Dialplan contém uma lista de comandos que o Asterisk deve seguir para saber como lidar com chamadas de entrada e saída do Softswitch PBX IP.

Módulos do Asterisk: além da funcionalidade fornecida pelo núcleo do Asterisk, os módulos fornecem todas as outras funções. Muitos módulos são distribuídos com o Asterisk, embora outros módulos possam estar disponíveis para membros da comunidade ou mesmo empresas que criam módulos comerciais. Módulos distribuídos com o Asterisk podem ser criados com a instalação do Asterisk. Os módulos não são construídos apenas arbitrariamente, mas você pode afetar o tempo de carregamento, se eles serão carregados, a ordem de carregamento ou até mesmo descarregá-los/carregá-los em tempo de execução. A maioria dos módulos é configurada de forma independente e possui seus próprios arquivos de configuração. Alguns módulos suportam uma configuração que será lida estaticamente ou dinamicamente (em tempo real) a partir de bancos de dados. Em termos de logística, esses módulos são geralmente arquivos com a extensão ".so", que estão localizados no diretório de módulos do Asterisk (geralmente, isto é /usr/lib/asterisk/modules/). Quando o Asterisk inicializa, ele carrega esses arquivos e adiciona sua funcionalidade no sistema. Os módulos Asterisk que fazem parte do Kernel (CORE, que pode ser chamado de PBX) têm um nome de arquivo que se parece com pbx_xxxxxx.so.

Alguns exemplos de módulos: 
  • o chan_pjsip usa o res_pjsip e muitos outros módulos res_pjsip para fornecer uma pilha SIP para dispositivos SIP e para interagir com o Asterisk e uns com os outros através do Asterisk.
  • o app_voicemail fornece recursos de correio de voz tradicionais.
  • o app_confbridge fornece salas de conferência com muitos recursos adicionais. 
  • o res_agi fornece o Asterisk Gateway Interface, um API que permite gerenciar chamadas de scripts e programas externos ao Dialplan do Asterisk.


Chamadas e Canais do Asterisk: o principal objetivo do Asterisk é criar sistemas tolerantes a falhas e aplicativos em tempo real. Na maioria, mas não em todos os casos, isso significa que você estará lidando com o conceito de "desafios!". As chamadas na terminologia de telefonia geralmente se referem a um telefone que está se comunicando (chamando, comutando) com outro telefone através da rede telefônica. No entanto, no caso do Asterisk, a chamada geralmente usa um ou mais canais. Aqui estão alguns exemplos de chamadas/comutação:
  • O telefone chama outro telefone pelo Asterisk;
  • O telefone chama vários telefones de uma só vez (por exemplo, paginação) através do Asterisk;
  • O telefone chama o aplicativo, por exemplo, app_voicemail ou app_queue;
  • Criando um canal local para interagir com aplicativos ou outro canal.

Canais do Asterisk: os canais são criados pelo Asterisk usando o Channel Drivers. Eles podem usar outros recursos no sistema Asterisk para facilitar vários tipos de comunicação entre um ou mais dispositivos. Os canais podem ser conectados a outros canais e expostos a aplicativos e recursos. Os canais podem usar muitos outros recursos fornecidos por outros módulos ou bibliotecas externas. Por exemplo, os canais SIP usarão CODECs e módulos de formato ao transmitir áudio. Canais podem interagir diretamente com muitos módulos diferentes.

Roteamento do Asterisk: o Dialplan é uma das principais formas de controlar o comportamento do Asterisk. O Dialplan existe como arquivos de texto (por exemplo, extensions.conf) ou na linguagem de script interna do Dialplan, nos formatos de Asterisk Extension Language - AEL (extensions.ael) ou LUA (extensions.lua). Como alternativa, o Dialplan pode ser lido no banco de dados juntamente com uma configuração de módulo diferente. Ao escrever o Dialplan, você ativamente usará aplicativos e funções para influenciar canais, como o AGI, para receber instruções de controle de chamadas de scripts e programas externos.

Tipos de módulos do Asterisk: existem muitos tipos diferentes de módulos, cada um dos quais fornece suas suas próprias funções e recursos do Asterisk. Use o comando module module show na *CLI> para ver todos os módulos carregados em seu sistema Asterisk.

Drivers de Canal do Asterisk: os drivers de canal interagem com dispositivos fora do Asterisk e traduzem essa sinalização ou protocolo específico no kernel.

Aplicações Dialplan do Asterisk: aplicativos fornecem funções de chamada para o sistema. Um aplicativo pode atender uma chamada, reproduzir uma frase de som, desligar uma chamada ou fornecer um comportamento mais complexo, como um conjunto de filas, correio de voz ou chamadas em conferência.

Recursos Dialplan do Asterisk: as funções são usadas para recuperar, instalar ou controlar várias configurações da chamada. Por exemplo, uma função pode ser usada para definir o identificador de chamadas para uma chamada de saída.

Recursos do Asterisk: como o nome sugere, os recursos fornecem recursos para o Asterisk e seus módulos. Exemplos comuns de recursos incluem música em espera e chamada de estacionamento.

CODES do Asterisk: CODEC (que é um acrônimo para COder/DECoder) é um módulo para codificação ou decodificação de áudio ou vídeo. Normalmente os CODECs são usados para codificar a mídia para que ela ocupe menos largura de banda. Eles são necessários para converter o som entre CODECs de áudio e os tipos de cargas usados por vários dispositivos.

Driver de Formato de Arquivos do Asterisk: o driver de formato de arquivo é usado para salvar mídia em disco em um formato específico e para converter esses arquivos em fluxos de mídia na rede.

Driver de Gravação Detalhada de Chamadas (CDR) do Asterisk: os drivers de CDR gravam logs de chamadas no disco ou em um banco de dados.

Driver de Log de Eventos dos Canais (CEL) do Asterisk: os logs de eventos de chamadas são semelhantes aos logs de CDR, mas registram informações mais detalhadas sobre o que aconteceu dentro do Asterisk durante uma chamada específica.

Drivers de Ponte do Asterisk: os drivers de ponte são usados pela arquitetura de ponte do Asterisk e fornecem várias maneiras de conectar mensagens multimídia entre os participantes da chamada.

Módulos de Driver de Canal do Asterisk:  todas as chamadas de fora do Asterisk passam pelo driver de canal antes de chegar ao kernel, e todas as chamadas de saída passam pelo driver de canal no caminho para o dispositivo externo. O driver de canal PJSIP (chan_pjsip), por exemplo, se comunica com dispositivos externos usando o protocolo SIP. Ele converte a sinalização SIP no núcleo. Isso significa que o núcleo do Asterisk sinaliza um agnóstico. Portanto, o Asterisk não é apenas um mecanismo de comunicação SIP ou VoIP, é um mecanismo multi protocolo. Todos os drivers de canal tem um nome de arquivo que se parece com chan_xxxxx.so, tais chan_pjsip.so ou chan_dahdi.so.


Módulos de Aplicação para o Dialplan do Asterisk: módulos de roteamento fornecem função de chamada para o sistema. Esses aplicativos são lançados sequencialmente no plano de discagem. Por exemplo, uma chamada pode usar um aplicativo para atender uma chamada, outro para reproduzir um prompt de voz do disco e um terceiro aplicativo que permite ao chamador deixar o correio de voz em uma caixa de correio específica. Todos os módulos de aplicativos têm nomes de arquivos que se parecem com app_xxxxx.so, por exemplo, app_voicemail.so, no entanto aplicativos e funções também podem ser fornecidos pelo kernel e outros módulos. Módulos, como res_musiconhold e res_xmpp, fornecem aplicativos relacionados à sua própria funcionalidade.

Módulos de função de plano de discagem do Asterisk: as funções Dialplan são um pouco semelhantes às aplicações de Dialplan, mas em vez de executar o trabalho em um canal ou chamada específica, elas simplesmente recuperam ou definem uma configuração específica em um canal ou realizam manipulações de texto. Por exemplo, o recurso Dialplan pode extrair informações de ID do chamador de uma chamada recebida, filtrar texto ou definir um tempo limite para o chamador entrar. Todos os módulos de função do Dialplan tem nomes de arquivos que parecem func_xxxxx.so, por exemplo, func_callerid.so, mas aplicativos e funções também podem ser fornecidos pelo kernel e outros módulos. Módulos, como res_musiconhold e res_xmpp, fornecem aplicativos relacionados à sua própria funcionalidade.

Módulos de recursos do Asterisk: recursos fornecem funcionalidade ao Asterisk que pode ser chamada a qualquer momento durante uma chamada, mesmo se outro aplicativo estiver sendo executado em um canal. Os recursos são normalmente usados como eventos assíncronos, como reproduzir música no modo de espera quando uma chamada é colocada em espera ou a chamada está sendo estacionada. Módulos de recursos têm nomes de arquivos que se parecem com res_xxxxx.so, por exemplo, res_musiconhold.so. Os módulos de recursos podem fornecer aplicativos e funções, mesmo se esses aplicativos ou funções não tiverem módulos separados.

Módulos CODECs do Asterisk: os módulos do CODEC têm nomes de arquivos que se parecem com codec_xxxxx.so, como codec_alaw.so e codec_ulaw.so. CODEC são algoritmos matemáticos para codificação (compressão) e decodificação (descompressão) de fluxos de mídia. O Asterisk usa módulos CODEC para enviar e receber multimidia (áudio e vídeo). O Asterisk também usa módulos CODEC para converter (ou transcodificar) fluxos de mídia entre diferentes formatos. O Asterisk está equipado com módulos CODEC para os seguintes tipos de mídia:
  • ADPCM, 32 kbps;
  • G.711 A-law, 64 kbps;
  • G.711 U-law, 64 kbps;
  • G.722, 64 kbps;
  • G.726, 32 kbps;
  • GSM, 13 kbps;
  • LBC-10, 2,4 kbps;
O núcleo do Asterisk fornece um recurso de PCM Signed Linear de 16 bits que codifica ou decodifica todos os CODECs. Há outro módulo CODEC, codec_resample, que permite que o Signed Linear reveja diferentes taxas de amostragem de 12, 16, 24, 32, 44, 48 96 ou 192 kHz para facilitar a tradução. Módulos CODEC similares também podem ser instalados de suas dependências forem detectadas durante a compilação do Asterisk. Se os drivers DAHDI forem detectados, o codec_dahdi será instalado. Se as bibliotecas de desenvolvimento da Speex (www.speex.org) forem encontradas, o codec_speex também será instalado. Se a biblioteca de desenvolvimento do iLBC forem encontradas (www.ilbcfreeware.org), o codec_ilbc também será instalado. O suporte para os CODECs proprietários G.729A (caiu em domínio publico em janeiro de 2017) ou G.723.1 (também caiu em dominio publico em janeiro de 2017) é fornecido pela Digium em uma base comercial usando software (G.729A) ou hardware (G.729A e G.723.1). Para obter mais informações sobre a compra de licenças ou equipamentos para usar os CODECs G.729A e/ou G.723.1 com o Asterisk, visite o site da Digium.

Suporte para os CODECs Siren7 e G.722.1C Siren14 carregados de patentes, mas gratuitos, ou para SILK CODEC for Skype, podem ser incluídos no Asterisk fazendo o download dos módulos binários dos CODECs no site da Digium. Na interface de linha de comando do Asterisk (*CLI>), use o comando core show translation para exibir o tempo de tradução entre todos os formatos de áudio registrados.

Driver de formato de Arquivos do Asterisk: o Asterisk usa módulos de formato de arquivo para transferir arquivos de mídia (como áudio e vídeo) da rede e salvá-los em disco ou extrair arquivos especificados do disco e convertê-los de volta no fluxo de mídia. Embora isso seja frequentemente associado aos CODECs, pode haver mais de um formato disponível em um disco para um CODEC específico. Os módulos de formato de arquivo têm nomes de arquivo que se parecem com format_xxxxx.so, como format_wav.so e format_jpeg.so. A seguir está uma lista de módulos de formato incluídos nas versões mais recentes do Asterisk:
  • format_g719;
  • format_g723;
  • format_g726;
  • format_g729;
  • format_gsm;
  • format_h263;
  • format_h264;
  • format_ilbc;
  • format_jpeg;
  • format_ogg_vorbis;
  • format_pcm;
  • format_siren7;
  • format_sirem14;
  • format_sln;
  • format_vox;
  • format_wav_gsm;
  • format_wav;
Driver de gravação de chamadas (CDR) do Asterisk: os módulos CDR são usados para armazenar registros de detalhes de chamadas (CDRs) em vários formatos. Os mecanismos populares de armazenamento incluem arquivos delimitados por vírgula (CSV), bem como bancos de dados relacionais, como MySQL ou PostgreSQL. Registros com informações detalhadas sobre chamadas geralmente contêm um registro por chamada e fornecem informações detalhadas, por exemplo, quem fez a chamada, quem atendeu a chamada, o tempo necessário para ligar e assim por diante. Os gravadores de detalhes da chamada possuem nomes de arquivos que se parecem com cdr_xxxxx.so, por exemplo, cdr_csv.so. O módulo recomendado para conexão com back-ends de armazenamento de CDR é o cdr_adaptive_odbc.so.

Módulo de Driver de Evento (CEL) do Asterisk: os registros de eventos de chamadas registram as várias ações que ocorrem durante uma chamada. Assim, eles, como regra, descrevem os registros detalhados de chamadas com mais detalhes. Por exemplo, um registro de chamadas pode mostrar que Paula ligou para Roberto, que a ligação de Roberto soou por vinte segundos, depois o telefone tocou por quinze segundos e a ligação foi para o Correio de Voz de Roberto, onde Paula deixou o Correio de Voz por vinte e cinco segundos e desligou. O sistema também permite registrar eventos personalizados. Os módulos de registro de eventos de chamada possuem nomes de arquivos que se parecem com cel_xxxxx.so, como cel_custom.so e cel_adaptive_odbc.so. O módulo recomendado para conexão com back-ends de armazenamento de CEL é o cel_adaptive_odbc.so.

Módulo de Ponte do Asterisk: começando com o Asterisk 1.6.2 Standard, o Asterisk introduziu um novo método para conectar chamadas. Ele depende de vários módulos de ponte para controlar como os fluxos de mídia devem se misturar para os participantes quando forem chamados. Os módulos de ponte possuem nomes de arquivos que se parecem com bridge_xxxxx.so, como bridge_simple.so e bridge_multiplexed.so.

Diretórios e Estrutura de Arquivos do Asterisk: os diretórios de nível superior usados pelo Asterisk podem ser configurados no arquivo de padrão. Abaixo de cada cabeçalho, você também pode ver uma linha de configuração correlacionada no arquivo asterisk.conf.

  • Arquivo de Configuração do Asterisk;

    • astetcdir => /etc/asterisk/;
    • Este local é usado para armazenar e ler arquivos de configuração do Asterisk. Estes são geralmente arquivos .conf, .lua e .ael.

  • Módulos do Asterisk;

    • astmoddir=> /usr/lib/asterisk/modules/;
    • Módulos para download no formado Shared Object (.so), instalados pelo Asterisk ou pelo usuário, estão aqui.

  • Várias Bibliotecas;
    • astvarlibdir => /var/lib/asterisk/;
    • Aqui, elementos adicionais da biblioteca e arquivos contendo dados usados no tempo de execução são adicionados.
  • Diretório de Banco de Dados;
    • astdbdir => /var/lib/asterisk/;
    • Esse local é usado para armazenar o arquivo de dados do banco de dados interno do Asterisk. Nas versões do Asterisk usando o banco de dados SQLite3, o arquivo será nomeado como astdb.sqlite3.
  • Chaves de Criptografias;
    • astkeydir => /var/lib/asterisk/;
    • Ao configurar a criptografia baseada em chave, o Asterisk irá procurá-las nesse diretório.
  • Catálogo de dados do Sistema;
    • astdatadir => /var/lib/asterisk/;
    • Por padrão, sons do Asterisk são salvos e lidos no subdiretório de sons (sound/br) daquele local.
  • Interface AGI (Asterisk Gateway Interface);
    • astagidir => /var/lib/asterisk/agi-bin/;
    • Ao usar vários aplicativos AGI, o Asterisk, por padrão, procura os scripts AGI nesse diretorio.
  • Diretorio de Fila;
    • astspooldir => /var/spool/asterisk/;
    • Este diretório é usado para armazenar arquivos de filas de vários componentes do kernel e módulos do Asterisk. A maioria deles usa seus próprios subdiretórios, por exemplo:
      • dictate;
      • meetme;
      • monitor;
      • outgoing;
      • recording;
      • system;
      • tmp;
      • voicemail;
  • Processos em execução;
    • astrundir => /var/run/asterisk/;
    • Quando o Asterisk estiver rodando, você verá dois arquivos aqui: asterisk.crl e asterisk.pid. Estes são o soquete de controle e os arquivos PID (ID do Processo) para o Asterisk.
  • Logs;
    • astlogdir => /var/log/asterisk/;
    • Quando o Asterisk é configurado para fornecer saída de log, eles serão armazenados nesse diretório. 
  • Diretório binário do Sistema;
    • astsbindir => /usr/sbin/;
    • Por padrão, o Asterisk procura neste diretório por quaisquer binários do sistema que ele usa, se você mover o arquivo binário do Asterisk ou qualquer outro que ele usar, você precisará alterar este local.
Thats All FOLKS! (Isso é tudo, pessoal!)


 








Nenhum comentário

Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!

Tecnologia do Blogger.