PJI011104 - Projeto Integrador IV - 2022-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Dados importantes

Professor

Turma virtual

  • Acesse o sigaa bucando a disciplina PJI011104 - PROJETO INTEGRADOR IV (2021.2 - T01)

Aulas síncronas não presenciais

  • Horários
    • segundas e terças-feiras das 19:00 às 22:00
    • sábados letivos serão com atividades assíncronas.
    • Mais informações ver SIGAA

Aulas presenciais

  • Horários
  • Em condições de aulas presenciais: Sala 05, Laboratório Interativo e Meios de transmissão

Organização curricular

Roteiro de instalação do Asterisk

Passo 0: Requisitos para instalação do Asterisk

1) Certifique-se de ter o Virtualbox ou VMware Workstation (ou outro programa de virtualização) instalado em seu computador

Obs.: Chamaremos a máquina física que está hospedando a máquina virtual de hospedeira e a máquina virtual será chamada de máquina virtual.

Obs.: A máquina hospedeira pode ter qualquer sistema operacional.

Obs.: Para facilitar a interação entra a hospedeira e virtual, é importante que a máquina hospedeira tenha os pacotes de integração. No caso da hospedeira ser Debian/Ubuntu certifique-se de ter os pacotes build-essential, module-assistant e dkms (sudo apt update && sudo apt install build-essential module-assistant dkms && sudo m-a prepare e da máquina virtual utilize a opção de instalação dos pacotes extras no menu Devices > Insert Guest Additions CD Image... e depois /media/seu_usuario/VBox_GAs_versao$ sudo ./VBoxLinuxAdditions.run).

2) Instale o sistema operacional Linux (testado com Ubuntu Mate 16.04 LTS e 22.04 LTS, este roteiro pode não funcionar para outras distribuições e versões) em uma máquina virtual.

3) Instale o programa para discagem Zoiper 5 (testado com Zoiper5_5.5.8_x86_64) na máquina hospedeira e na máquina virtual. Para instalar no Debian/Ubuntu você pode utilizar o comando sudo dpkg -i Zoiper5_5.5.8_x86_64.deb.

4) Faça o download dos arquivos para Asterisk de áudio em português (disponibilizado para download).

5) Instale Programa PBX Asterisk (testado com asterisk-13.38.3, esse roteiro pode não funcionar para outras versões) seguindo os passos descritos nesta página.

Passo 1: Preparando a máquina virtual que será o servidor Asterisk

Considerando a instalação do Asterisk em uma máquina virtual Ubuntu, as informações a seguir se referem ao que deve ser feito dentro da máquina virtual.

1) Certifique-se de ter uma máquina virtual linux para instalar o Asterisk (recomendável que tenha ao menos 20GB de espaço em disco - você pode criar uma máquina virtual vazia, baixar uma das versões testadas do linux no formato ISO e utilizar esse arquivo como um CDROM para fazer a instalação)

2) Como serão feitos vários comandos que requerem privilégio de administrador, realize o seguinte comando para chavear o terminal para o modo de administração (root):

$ sudo su

Obs.1: Digite a senha de seu usuário (que necessariamente precisa ser um usuário que tenha privilégio de se tornar super usuário - pertencente ao grupo sudoers).

Obs.2: No comando acima foi utilizando o símbolo $ que representava que o terminal estava no modo de usuário comum, após o chaveamento para o modo de administração será utilizado o símbolo #.

Obs.3: Como regra de ouro, procure sempre estar atento as mensagens impressas no terminal. Diversos problemas podem ocorrer e muitas vezes estes são fáceis de resolver apenas seguindo as orientações impressas em casos de falhas. Caso não consiga resolver o problemas pelas próprias informações dadas, copie o erro dado e cole no google para verificar se outros usuários já experimentaram este problema e se há orientações de como resolvê-lo.

3) Certifique-se de que o sistema operacional da máquina virtual esteja atualizado:

# apt update && apt upgrade

4) Instalando as bibliotecas requeridas pelo Asterisk:

# apt install make wget libssl-dev ncurses-dev libnewt-dev libxml2-dev linux-headers-generic g++ libsqlite3-dev uuid-dev libjansson-dev

5) Instalando o gerenciador de banco de dados MySQL:

# apt install mysql-server libmysqld-dev

Obs.: Será utilizada a senha 1234 no mysql.

Passo 2: Intalando o Asterisk e realizando a configuração inicial do Asterisk

1) Baixe o arquivo tar.gz do Asterisk disponibilizado (versão 13.38.3) e mova para a pasta /usr/src.

2) Certifique-se de estar na pasta /usr/src:

# cd /usr/src

3) Descompacte o arquivo tar.gz com o comando:

# tar -zxvf asterisk-13.38.3.tar.gz

4) Entre na pasta descompactada digitando:

# cd asterisk-13.38.3

5) Realize a compilação do Asterisk

# ./configure --libdir=/usr/lib64

6) Realize a configuração da instalação

# make menuselect

Na tela de configuração marque a opção cdr_mysql do menu Add-ons (See README-addons.txt) e depois pessione Save & Exit

7) Realize a instalação

# make

# make install

# make samples

# make config


8) Teste se o asterisk está funcionando # service asterisk start

# rasterisk

Se o serviço subiu e o rasterisk rodou bem, deu tudo certo, você pode sair da interface cliente.

CLI> quit


Passo 3: Configurando o banco de dados MySQL para o Asterisk

1) Inicializando o serviço MySQL

# service mysql start

Após a execução é possível verificar se o serviço está rodando com o comando # service mysql status

2) Entrar no cliente MySQL:

# mysql -u root -p

Digite a senha 1234

3) Verifique as bases de dados existentes com o comando:

mysql> SHOW databases;

Deve aparecer uma listagem contento as bases information_shema, mysql, performance_schema e sys.

4) Crie a base para armazenamento de gravações do Asterisk (cdr):

mysql> CREATE DATABASE cdr;

Executando novamente mysql> SHOW databases; deve exibir esta nova base entre as bases existentes.

5) Crie um usuário para o Asterisk:

mysql> CREATE USER "cdr_user"@"localhost" IDENTIFIED BY "1234"; mysql> GRANT ALL PRIVILEGES ON cdr.* to "cdr_user"@"localhost"; mysql> FLUSH PRIVILEGES;

6) Entre na base de dados cdr:

mysql> use cdr;

No momento a base de dados está vazia (pode-se verificar isso com o comando mysql>show tables;

7) Crie a tabela cdr_table

CREATE TABLE cdr_table (
calldate datetime NOT NULL default CURRENT_TIMESTAMP,
clid varchar(80) NOT NULL default "",
src varchar(80) NOT NULL default "",
dst varchar(80) NOT NULL default "",
dcontext varchar(80) NOT NULL default "",
channel varchar(80) NOT NULL default "",
dstchannel varchar(80) NOT NULL default "",
lastapp varchar(80) NOT NULL default "",
lastdata varchar(80) NOT NULL default "",
duration int(11) NOT NULL default "0",
billsec int(11) NOT NULL default "0",
disposition varchar(45) NOT NULL default "",
amaflags int(11) NOT NULL default "0",
accountcode varchar(20) NOT NULL default "",
uniqueid varchar(32) NOT NULL default "",
peeraccount varchar(20) NOT NULL default "",
linkedid varchar(32) NOT NULL default "",
sequence int(11) NOT NULL default "0",
userfield varchar(255) NOT NULL default "",
monitor varchar(255) NOT NULL default ""
);

O comando mysql>show tables; deve mostrar que há uma tabela, mais detalhes podem ser visualizados com o comando SHOW columns FROM cdr_table;.

8) Para sair do cliente MySQL digite:

mysql> exit;

Passo 4: Pré-configuração do gravador de chamadas do Asterisk

Está sendo utilizado o editor de textos vim que pode ser obtido com o comando # apt-get install vim, mas outro editor de texto qualquer pode ser utilizado.

1) Abra o arquivo cdr.conf para edição:

# vim /etc/asterisk/cdr.conf

2) Configure a forma de gravação de dados de chamadas:

No vim para entrar em modo de edição, digite i.

[mysql]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
accountlogs=yes

Feche e salve o arquivo clicando emn ESC, depois digite :wq e tecle ENTER.

3) Abra o arquivo cdr_mysql.conf para edição

# vim /etc/asterisk/cdr_mysql.conf

4) Adicione a configuração para uso do banco MySQL para gravação de dados:

[global]
hostname=127.0.0.1
dbname=cdr
table=cdr_table
password=1234
user=cdr_user
port=3306
sock=/var/run/mysqld/mysqld.sock
timezone=UTC

Passo 5: Pré-configuração do Asterisk

1) Edite o arquivo asterisk.conf:

# vim /etc/asterisk/asterisk.conf

2) Ative o modo verboso do Asterisk para que ele exiba mensagens detalhadas em tela.

  • Procure a linha onde está escrito verbose = 3 e descomente esta linha apagando o caracter ; do início da linha.

3) Reinicie o serviço Asterisk

# service asterisk restart

4) Entre no console do Asterisk

# rasterisk

5) Verifique se o cdr está configurado

CLI> cdr show status

Deve ser exibido que Logging está habilitado e o mysql está listado no backend.

Passo 6: Adição dos arquivos de som em Português Brasil

1) Baixe o arquivo Asterisk-sounds-pt_BR.tar.gz.

Este arquivo está compactando a pasta sounds que contém arquivos de áudio com dígitos, letras entre outros sons em português.

2) No terminal, vá até a pasta em que o arquivo foi baixado (provavelmente ~/Downloads) e descompacte o arquivo com o seguinte comando:

# tar -zxvf Asterisk-sounds-pt_BR.tar.gz

3) Mova a pasta original de sons do Asterisk para uma pasta backup:

# mv /var/lib/asterisk/sounds /var/lib/asterisk/sounds_backup

4) Mova os sons descompactados para a pasta sounds do Asterisk:

# mv sounds /var/lib/asterisk/

5) Abra o arquivo sip.conf para edição:

# vim /etc/asterisk/sip.conf

6) Na linha 344, descomente a instrução (removendo o ; no início da linha) e altere para o idioma pt_BR. Portanto, deve ficar assim:

language=pt_BR

7) Salve o arquivo sip.conf.

8) Recarregue as configurações sip do asterisk:

CLI> sip reload

Explorando as configurações de utilização do Asterisk

Passo 1: Configurando o primeiro ramal sip no arquivo sip.conf

1) Abra o arquivo sip.conf para edição

# vim /etc/asterisk/sip.conf

2) No fim do arquivo, adicione o ramal 1000 com permissão para realizar e receber chamadas (friend) e senha 1234

[1000]
type=friend
secret=1234
host=dynamic
qualify=yes

3) Salve o arquivo sip.conf

4) Abra o rasterisk

# rasterisk

5) Como o arquivo sip.conf foi modificado, recarregue o serviço asterisk com esse novo conteúdo:

CLI> sip reload

6) De dentro da máquina virtual, abra um softphone como o Zoiper utilizando como parâmetros:

  • Usuário: 1000 ou 1000@127.0.0.1
  • Senha: 1234
  • Domínio/SIP Server: 127.0.0.1

Após se registrar com sucesso, no rasterisk deve aparece uma mensagem paracida com esta a seguir

-- Registered SIP '1000' at 127.0.0.1:47843

Passo 2: Configurando o segundo ramal sip no arquivo sip.conf

1) No fim do arquivo, adicione o ramal 2000 com permissão para realizar e receber chamadas (friend) e senha 1234

[2000]
type=friend
secret=1234
host=dynamic
qualify=yes

2) Salve o arquivo sip.conf

3) Recarregue o serviço asterisk com esse novo conteúdo:

CLI> sip reload

4) Certifique-se de que a máquina virtual está com a configuração de rede no modo bridge

5) Obtenha o endereço IP da máquina virtual

# ip -4 a

Digamos que o IP da máquina virtual é 192.168.0.2

6) Da máquina hospedeira, abra um softphone como o Zoiper utilizando como parâmetros (substitua o endereço de IP pelo correto):

  • Usuário: 2000 ou 2000@192.168.0.2
  • Senha: 1234
  • Domínio/SIP Server: 192.168.0.2

Após se registrar com sucesso, no rasterisk deve aparece uma mensagem paracida com esta a seguir

-- Registered SIP '2000' at 127.0.0.1:47844

7) Tente realizar uma chamada, por exemplo do 1000 ligando para o 2000, no cliente rasterisk você deve ver a seguinte mensagem indicando que não pode realizar a chamada:

NOTICE[5906][C-00000003]: chan_sip.c:26602 handle_request_invite: Call from '1000' (127.0.0.1:47843) to extension '2000' rejected because extension not found in context 'public'.

Esta mensagem diz que a chamada do ramal 1000 para 2000 foi rejeitada pois não foi encontrada uma extensão no contexto 'public'. Uma extensão ou plano de discagem é um conjunto de ações que o Asterisk executa quando um ramal está ligando para outro em específico. Para que o 1000 possa ligar para o 2000 é necessário haver uma extensão indicando como se dará esta conexão. Atualmente esta extensão não existe, por isso a chamada foi rejeitada. Além disso, a mensagenm indica que o Asterisk tentou achar esta extensão no contexto 'public'. De fato, os ramais 1000 e 2000 não foram cadastrados em nenhum contexto específico, por isso, por padrão, estão no 'public'.

Passo 3: Criando uma extensão para identificação do ramal

1) Abra o arquivo extensions.conf para edição

# vim /etc/asterisk/extensions.conf

2) Próximo do fim do arquivo, localize a linha que contém a chave [public] e coloque um ; (ponto e vírgula) no início da linha que contém o a instrução include => demo. Portanto, deve ficar assim

;include => demo

3) Abaixo desta linha comentada (e também abaixo da chave [public]) copie as seguintes instruções:

exten => 655,1,NoOp("Identifica Ramal")
exten => 655,2,Answer()
exten => 655,3,Wait(1)
exten => 655,4,Playback(number&is)
exten => 655,5,SayDigits(${CALLERID(num)})
exten => 655,6,Wait(2)
exten => 655,7,Hangup()

Estas instruções estão declarando uma extensão. Quando um ramal que pertence ao contexto public tentar realizar uma chamada o Asterisk vai na chave [public] verificar se ele pode relizar esta chamada e como se dará esta ligação. Neste exemplo, um ramal do contexto public está ligando para o ramal 655. O que está sendo feito em cada linha está descrito a seguir:

  1. Imprime uma mensagem no rasterisk. Isso é util apenas para fins de verificação do comportamento do sistema (debug).
  2. O Asterisk atende a chamada (answer)
  3. Aguarda 1 segundo (wait)
  4. Reproduz (playback) um som que diz "o número é"
  5. Fala os números (SayDigits) do ramal que está realizando esta chamada
  6. Aguarda 2 segundos (wait)
  7. Encerra a ligação (Hangup)

4) Salve o arquivo extensions.conf

5) Recarregue os planos de discagem do asterisk:

CLI> dialplan reload

6) Do softphone realize uma chamada para o número 655.

Você deve ouvir uma mensagem informando o número do ramal que originou a ligação.

Passo 4: Testando a declaração de um novo contexto

1) No arquivo extensions.conf, digite [funcionarios] abaixo de [public].

2) Salve o arquivo extensions.conf e recarregue os planos de discagem do asterisk CLI> dialplan reload.

3) Do softphone realize uma chamada para o número 655

A chamada não deve funcionar, encerrando logo após a discagem.

No rasterisk você deve ver a seguinte mensagem: NOTICE[5906][C-00000006]: chan_sip.c:26602 handle_request_invite: Call from '1000' (127.0.0.1:47843) to extension '655' rejected because extension not found in context 'public'.

Isso está ocorrendo pois a extensão criada para o número 655 está dentro do contexto [funcionarios], e o ramal que está tentando ligar para esta extensão está em outro contexto (no caso, está em [public]). Observe que o conteúdo de um contexto inicia logo após o nome do contexto entre colchetes e terminal quando há outro nome de contexto entre colchetes.

Passo 5: Adicionando contexto aos ramais

No passo anterior, o plano de discagem para o número 655 foi colocado dentro de um contexto chamado [funcionarios], porém os ramais existentes 1000 e 2000, não estão configurados para nenhum contexto específico, portando são [public], e neste momento o [public] não possui planos de discagem. Portanto, vamos colocar os ramais dentro do contexto [funcionarios] para fazer o plano para o número 655 voltar a funcionar.

1) No arquivo sip.conf, edite os ramais 1000 e 2000 para que sejam incluídos no contexto [funcionarios], o resultado deve ficar assim:

[1000]
type=friend
secret=1234
host=dynamic
qualify=yes
context=funcionarios

[2000]
type=friend
secret=1234
host=dynamic
qualify=yes
context=funcionarios

2) Recarregue o asterisk com as novas configurações do arquivo sip.conf:

CLI> sip reload

Passo 6: Incluindo um contexto dentro de outro

No passo anterior configuramos os ramais 1000 e 2000 para pertencerem ao contexto [funcionarios], pois o plano de discagem para o número 655 estava configurado neste contexto. Agora vamos devolver o plano de discagem para o número 655 para o contexto [public] e em seguida faremos o contexto [funcionarios] herdar os planos de [public].

1) No arquivo extensions.conf, deixe o plano de discagem para o número 655 dentro do contexto [public], deixando o contexto [funcionarios] vazio:

[public]
exten => 655,1,NoOp("Identifica Ramal")
exten => 655,2,Answer()
exten => 655,3,Wait(1)
exten => 655,4,Playback(number&is)
exten => 655,5,SayDigits(${CALLERID(num)})
exten => 655,6,Wait(2)
exten => 655,7,Hangup()

[funcionarios]

Roteiro de instalação do Asterisk com freepbx utilizando docker

Pré-requisitos

Ter o Docker instalado na máquina hospedeira

Instalação básica do Asterisk com freepbx para testes

Instalação básica via docker com banco de dados MySQL embutido.

Obs.: Há diferentes imagens docker que trazem o Asterisk já previamente configurado, neste tutorial utilizaremos a imagem disponibilizada em [1].

1) Baixando a imagem docker tiredofit/freepbx:

$ docker pull tiredofit/freepbx:latest

Obs.: No lugar de latest, pode-se utilizar outra tag. Este tutorial foi realizado com a versão 15, portanto, para baixar a exata imagem que foi utilizada neste tutorial utilize o comando $ docker pull tiredofit/freepbx:15

Aguarde a realização do download completo.

Verifique se a imagem baixada está aparecendo na lista de imagens disponíveis no docker local.

$ docker image ls

2) Subindo um contêiner baseado na imagem tiredofit/freepbx:

Antes de subir o contêiner, podemos verificar se já há algum contêiner rodando. Espera-se que neste momento ainda não haja nenhum contêiner baseado na imagem tiredofit/freepbx, já que o comando para subir o contêiner ainda não foi executado:

$ docker ps

Para subir o contêiner, rode (esse contêiner está sendo apelidado de test-freepbx):

$ docker run --name test-freepbx tiredofit/freepbx

Este comando pode demorar alguns minutos (até 30). O terminal deve apresentar uma série de procedimentos de inicialização que são executados dentro do contêiner que incluem s6-init, fix-attrs, cont-init e a criação dos arquivos padrão para freepbx, utilização de "embedded db" no CDR, além da inicialização do WebServer para a interface freepbx. O último comando deve ser a inicialização do zabbix e do cron.

3) Acessando a interface Web do freepbx.

Para acessar a interface, é necessário saber o endereço IP do sistema que roda dentro do contêiner, para isso:

3.1) Abra um outro terminal

3.2) Verifique se o contêiner está rodando com o comando 'docker ps' (a seguir um exemplo de resposta):

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

bca6826ffaea tiredofit/freepbx "/init" 53 minutes ago Up 53 minutes 80/tcp, 443/tcp, 4445/tcp, 4569/tcp, 5060/udp, 5061/tcp, 5161/tcp, 8001/tcp, 8003/tcp, 8008-8009/tcp, 8025/tcp, 5160/udp, 10050/tcp, 18000-20000/udp test-freepbx

3.3) Conecte este novo terminal ao contêiner que foi apelidado de test-freepbx:

$ docker exec -it test-freepbx bash

3.4) Obtenha o endereço IP do contêiner com o comando ip -4 a (a seguir um exemplo de resposta):

# ip -4 a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever

Portanto, neste exemplo, o IP do contêiner é 172.17.0.2.

3.5) Para acessar a interface Web do freepbx, abra o browser e digite http://<IP do contêiner>/admin. Neste exemplo ficou http://172.17.0.2/admin

Obs.: Para desconectar o terminal do contêiner, digite exit.

4) Daqui em diante as configurações devem seguir a interface do freepbx que permite inclusive adicionar idiomas e arquivos de áudio.

Obs.: Os arquivos de configuração do Asterisk podem ser consultados em /etc/asterisk e os arquivos binários incluindo arquivos de sons ficam em /var/lib/asterisk, porém, não é recomendável modificar os arquivos manualmente. Para realizar configurações, deve-se utilizar a interface gráfica do freepbx.

5) Para encerrar o contêiner, pressional Ctrl+C no terminal que subiu o contêiner

6) Para reiniciar o contêiner que foi criado anteriormente

$ docker start -ai test

ATENÇÃO: Após derrubar o contêiner, se for dado novo comando $ docker run ... será criado um contêiner completamente novo.

Para aplicações finais (em ambiente de produção), a utilização do banco de dados embutido no contêiner docker do Asterisk não é recomendada pois no caso de perda deste contêiner, as informações do bando de dados também serão perdidas. Para evitar isso, utiliza-se um arquivo de banco de dados externo ao contêiner, além de que uma instalação profissional também deve estar associada a configurações extra de segurança tanto de acesso ao sistema quanto de backup de dados.

Instalação de um abiente de produção do Asterisk com freepbx

A instalação via docker apresentada para testes utiliza banco de dados embutido no container, o que é ruim pois a perda do container acarreta em perda dos dados do banco e também não trata de backup dos dados do banco. Nesta instalação para ambiente de produção, estes problemas são solucionados. Para isso está sendo utilizada a ferramente docker-compose, um orquestrador de contêineres, que concorre, em termos de funcionalidades, com a conhecida ferramenta kubernetes.

No docker-compose um arquivo no formato yml descreve os contêineres que deve ser carregados, suas configurações entre outros parâmetros como a configuração de rede a qual os contêineres estão conectados.

Para este tutorial será utilizado o exemplo dado por [2] na pasta example onde um arquivo docker-compose.yml é disponibilizado. No exemplo dado, três contêineres são criados:

  • freepbs-app: que sobe o serviço Asterisk e a interface Web freepbx. Este contêiner mapeia 4 volumes que são acessíveis da máquina hospedeira (./certs, ./data, ./log e ./data/www).
  • freepbx-db: sobe o serviço mariadb e mapeia a pasta ./db
  • freepbx-db-backup: realiza backup do banco de dados, mapeando a pasta ./dbbackup.

Todos os contêineres estão sob o "guarda-chuva" de um proxy reverso provido por uma rede chamada nginx-proxy. Na prática, o proxy reverso é um "guarda-chuva" do lado servidor. O nginx é um servidor web, que neste caso está sendo utilizado como "porta de entrada" para serviços providos por este conjunto de contêineres.

Procedimento:

1) Para subir esse conjunto de contêineres exemplo, é necessário baixar o arquivo docker-compose.yml em uma pasta qualquer.

2) Crie a rede nginx-proxy:

$ docker network create nginx-proxy

3) Para carregar o conjunto de contêineres, estando na pasta onde está o arquivo docker-compose.yml basta digitar:

$ docker-compose up

Ao subir os multiplos contêineres, deve ser possível observar as mensagens de carregamento de serviços nestes diferentes contêineres (freepbx-db, freepbx-db-backup e free-pbx-app)

4) Para verificar se os contêineres estão rodando, em um outro terminal digite:

$ docker ps

Deve ser possível ver três contêineres ativos.

4) Para conectar o terminal a um contêiner, por exemplo o freepbx-app, digite:

$ docker exec -it freepbx-app bash

Obtenha o IP da máquina da aplicação freepbx utilizando a mesma lógica apresentada no ambiente de testes.

Para desconectar, digite $ exit

Roteiro de instalação do Asterisk (apenas) utilizando docker

Pré-requisitos

Ter o Docker instalado na máquina hospedeira

Instalação do Asterisk de demonstração

1) Clonando o repositório https://github.com/mlan/docker-asterisk:

$ git clone https://github.com/mlan/docker-asterisk.git

Aguarde a realização do download completo.

2) Entre na pasta demo do repositório baixado

$ cd docker-asterisk/demo

3) De dentro da pasta demo, para subir o contêiner de teste digite:

$ docker-compose up -d

4) De dentro da pasta demo, para conectar com o console do Asterisk que está dentro do contêiner de teste digite:

$ docker-compose exec tele asterisk -rvvvddd

5) Do console do Asterisk pode-se executar diversos comandos, por exemplo, para listar os endpoints configurados, digite (observe que esse contêiner utiliza a bibioteca pjsip):

> pjsip show endpoints

Obs.: Para sair do console digite exit

6) Para conectar o terminal com o contêiner, de dentro da pasta demo, digite:

$ docker-compose exec tele bash

6.1) Para entrar no console do Asterisk digite:

# rasterisk

Informações adicionais

Descrição da tabela cdr_table

Alguns dos campos da tabela cdr_table são:

  • calldate: data e hora da chamada
  • clid: identificador único da chamada
  • src (source): quem fez a chamada (de onde originou a chamada)
  • dst (destino): destino da chamada
  • monitor: nome do arquivo de áudio que contém a gravação da chamada

Pastas do asterisk

  • /usr/src: Pasta utilizada neste tutorial para armazenar o asterisk-13.38.3.zip e os arquivos descompactados.
  • /var/lib/asterisk: Para com binários, incluindo arquivos de áudio
  • /etc/asterisk: Para com arquivos de configuração

Entendendo os parâmetros de configuração do Asterisk

Arquivo sip.conf

Tipos de SIP:

  • peer: Entidade SIP a qual o Asterisk envia chamadas (exemplo: um telefone ou central que que só recebe chamadas).
  • user: Entidade SIP a qual executa chamadas através do Asterisk (exemplo: um telefone que só faz chamadas).
  • friend: Entidade SIP que pode fazer e receber chamadas.

Qualify:

  • yes: O Asterisk testa de tempos em tempos se o dispositivo (terminal) está acessível (por padrão a cada 2 segundos)

Host:

  • dynamic: utilizado quando o IP do ramal não é fixado (caso comum de utilização de DHCP)

Context:

  • nome_do_contexto: um contexto pode conter diversos planos de discagem e o ramal que está neste contexto herda estes planos (os planos de discagem são declarados no arquivo extensions.conf).

Arquivo extensions.conf

[nome_do_contexto]
exten => nome_da_extensão, prioridade, aplicação()

  • O contexto é uma subdivisão do arquivo dos planos de discagem.
    • Pode ser único por ramal ou compartilhado entre vários ramais.
    • É possível também criar contextos para casos específicos (por exemplo, ligações a cobrar, DDD, DDI, etc) e também inserir um contexto dentro de outro.
    • Um contexto inicia com a declaração de seu nome entre colchetes (Ex.: [public]) e termina quando um novo contexto é declarado.
    • No início do arquivo extensions.conf existe um contexto chamado [globals], onde as variáveis globais são definidas e podem ser utilizadas por todo o plano de discagem, e o contexto [general], utilizado para definição de alguns parâmetros gerais.
  • O nome_da_extensão corresponde aos dígitos que estão sendo discados.
  • A prioridade indica a ordem de execução dos comandos, sempre seguindo da menor prioridade para a maior, em sequência.
  • A aplicação é a ação que será tomada. O Asterisk possui um grande conjunto de aplicações para diferentes ações. Por exemplo: Answer() para atender a chamada, Wait(x) para esperar x segundos, Hangup() para desligar a chamada, entre outras.

Comandos rasterisk

Mostra lista de comandos:

CLI> help , ou executando: $ asterisk -r -x "help"

Sair da interface cliente:

CLI> quit

Recarrega configurações SIP:

CLI> sip reload

Recarrega todas as configurações:

CLI> reload

Mostra status dos terminais cadastrados:

CLI> sip show peers

Resolução de problemas

PROBLEMA: Não está sendo possível acessar o servidor Asterisk de uma outra máquina

Solução: Liberação de portas do firewall para funcionamento do Asterisk

# iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

# iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT

PROBLEMA: Asterisk não está mais subindo depois que a máquina foi reiniciada

Solução: reinstalar o Asterisk (sem modificar os arquivos de configuração que já tenham sido editados)

Tente subir o serviço manualmente

$ sudo su

# service asterisk start

# service asterisk status

Se pelo comando status o serviço não subiu, tente reinstalar o Asterisk:

$ sudo su

# cd /usr/src/asterisk-13.38.3/

# make install

# service asterisk start

PROBLEMA: O áudio da máquina virtual não está funcionando

Solução: Nas configurações do cliente de virtualização, habilite a saída e entrada de áudio para sua máquina virtual

PROBLEMA: O softphone não está conectando, exibindo Request Timeout (code 408)

Solução: Certificar que o Asterisk está acessível ao cliente softphone

Os principais motivos de o softphone não estar alcançando o serviço Asterisk, pode ser por um problema de rede, erro na configuração do domínio/servidor SIP e também pode ser que o serviço Asterisk não esteja ativo. Dentre as ações:

  • Revise as configurações de IP do servidor e no softphone
  • Pingue a máquina servidora da máquina cliente
  • Verifique se o serviço Asterisk está rodando adequadamente
  • Verifique se o firewall não está bloqueando o serviço Asterisk

PROBLEMA: O softphone não está conectando, exibindo Forbidden (code 403)

Solução: Checar arquivo sip.conf e certificar que foi o Asterisk está com o sip.conf atualizado

Se o softphone não está conectando é possível que não exista um ramal com o identificação utilizada no softphone e também pode ser que o Asterisk não está atualizado com o sip.conf mais atual. Dentre as ações:

  • Revise as configurações no arquivo sip.conf
  • No rasterisk, verifique se sip.conf
  • No rasterisk, recarregue o sip CLI> sip reload