|
|
Linha 121: |
Linha 121: |
| O Asterisk é um software complexo e com muitos recursos. Porém sua função mais elementar, que é intermediar chamadas, pode ser entendida com base em dois elementos importantes desse tipo de PBX. Esses elementos são o '''plano de discagem''' e '''configurações de canais'''. Na terminologia do Asterisk, um canal pode ser entendido como um ramal ou tronco. Para ter o Asterisk funcionando como uma central simplificada, é suficiente configurar esses dois elementos. | | O Asterisk é um software complexo e com muitos recursos. Porém sua função mais elementar, que é intermediar chamadas, pode ser entendida com base em dois elementos importantes desse tipo de PBX. Esses elementos são o '''plano de discagem''' e '''configurações de canais'''. Na terminologia do Asterisk, um canal pode ser entendido como um ramal ou tronco. Para ter o Asterisk funcionando como uma central simplificada, é suficiente configurar esses dois elementos. |
| | | |
− | === Plano de discagem ===
| |
| | | |
− | O plano de discagem define como cada chamada deve ser processada. As instruções de processamento residem no arquivo de configuração ''/etc/asterisk/extensions.conf''. O fluxo de processamento de chamadas pode ser visto resumidamente abaixo:
| |
− |
| |
− | [[imagem:Asterisk-fluxo.png|400px]]
| |
− |
| |
− |
| |
− | Um exemplo de plano de discagem simples pode ser visto abaixo:
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | [default]; o nome deste contexto ... default é o contexto predefinido do Asterisk
| |
− |
| |
− | # Chamadas para o número 101 são feitas via SIP para o canal "maria"
| |
− | exten=>101,1,Dial(SIP/maria)
| |
− | same=>n,Hangup()
| |
− |
| |
− | # Chamadas para "teste" serão atendidas com um som de beep, seguido
| |
− | # da reprodução do arquivo de som "hello-world", em seguida outro beep e
| |
− | # enfim se encerra a chamada.
| |
− | exten=>teste,1,Playback(beep)
| |
− | same=>n,Wait(1)
| |
− | same=>n,Playback(hello-world)
| |
− | same=>n,Wait(1)
| |
− | same=>n,Playback(beep)
| |
− | same=>n,Hangup
| |
− | </syntaxhighlight>
| |
− |
| |
− | A estrutura do plano de discagem é composta por ''extensões'' (um termo específico do Asterisk). Cada extensão identifica um número (ou usuário) que pode ser chamado, e como essa chamada deve ser processada. A sintaxe pode ser vista abaixo:
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | exten=>identificador,prioridade,aplicação
| |
− | </syntaxhighlight>
| |
− |
| |
− | * '''identificador''': o número ou usuário chamado
| |
− | * '''prioridade''': a prioridade da extensão. Isso determina a ordem de execução das extensões que tratam do mesmo identificador.
| |
− | * '''aplicação''': uma ação a ser realizada quando a extensão for processada. Por exemplo, a aplicação ''Dial'' determina que deve ser encaminhada a outro canal.
| |
− |
| |
− | Como o processamento de uma chamada usualmente envolve uma sequência de extensões, existe uma sintaxe opcional para simplificar a declaração:
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | exten=>identificador,prioridade,aplicação
| |
− | same=>prioridade,aplicação
| |
− | </syntaxhighlight>
| |
− |
| |
− | *'''same''': declara uma nova extensão com mesmo identificador da extensão imediatamente anterior
| |
− |
| |
− | Por fim, a ''prioridade'' (que define a ordem com que as extensões são processadas) declarada com o valor ''n'' equivale à prioridade da extensão imediatamente anterior incrementada em uma unidade:
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | exten=>101,1,Dial(SIP/101)
| |
− | same=>n,Hangup; a prioridade aqui terá o valor 2
| |
− | </syntaxhighlight>
| |
− |
| |
− | === Canais SIP ===
| |
− |
| |
− | Cada telefone SIP deve ter seu identificador cadastrado no Asterisk. O identificador pode tanto ser um número, análogo a um ramal, ou uma string alfanumérica. No terminologia do Asterisk, cada telefone SIP é chamado de ''canal SIP'', e deve estar declarado em /etc/asterisk/sip.conf:
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | ; Canal 2000 (um exemplo)
| |
− | [2000]
| |
− | defaultuser=maria ; o nome do usuário para fins de autenticação
| |
− | secret=kabrum
| |
− | type=friend ; pode efetuar e receber chamadas
| |
− | host=dynamic ; pode conectar-se a partir de qualquer endereço IP
| |
− | insecure=port,invite ;
| |
− | disallow=all
| |
− | allow=gsm ; habilita este codec para o João.
| |
− | allow=alaw ; outro codec
| |
− | allow=ulaw ; mais um codec
| |
− | qualify=yes; monitora o UAC
| |
− |
| |
− | ; Canal 1000 (outro exemplo)
| |
− | [1000]
| |
− | defaultuser=joao ; o nome do usuário para fins de autenticação
| |
− | secret=blabla
| |
− | type=friend ; pode efetuar e receber chamadas
| |
− | host=dynamic ; pode conectar-se a partir de qualquer endereço IP
| |
− | insecure=port,invite ;
| |
− | disallow=all
| |
− | allow=gsm ; habilita este codec
| |
− | allow=alaw ; outro codec
| |
− | allow=ulaw ; mais um codec
| |
− | qualify=yes; monitora o UAC
| |
− | </syntaxhighlight>
| |
− |
| |
− | Como se pode notar, a declaração de um canal SIP envolve muitos parâmetros que envolvem autenticação, controle de acesso, localização na rede, codecs e possivelmente outras capacidades. Como os valores de alguns parâmetros podem ser iguais para vários canais, o Asterisk possibilita a declaração de perfis (''templates''):
| |
− |
| |
− | <syntaxhighlight lang=text>
| |
− | ; Perfil alunos
| |
− | [alunos](!); a sequência "(!)" define isto como um perfil
| |
− | type=friend ; pode efetuar e receber chamadas
| |
− | host=dynamic ; pode conectar-se a partir de qualquer endereço IP
| |
− | insecure=port,invite ;
| |
− | disallow=all
| |
− | allow=gsm ; habilita este codec
| |
− | allow=alaw ; outro codec
| |
− | allow=ulaw ; mais um codec
| |
− | qualify=yes; monitora o UAC
| |
− |
| |
− | ; Canal 2000
| |
− | [2000](alunos); a sequência "(alunos)" copia as definições do perfil "alunos"
| |
− | defaultuser=maria ; o nome do usuário para fins de autenticação
| |
− | secret=kabrum
| |
− |
| |
− | ; Canal joao
| |
− | [joao](alunos)
| |
− | defaultuser=joao ; o nome do usuário para fins de autenticação
| |
− | secret=blabla
| |
− | </syntaxhighlight>
| |
− |
| |
− | === Experimento: comunicação entre telefones IP ou softphones por meio de um PBX IP ===
| |
− |
| |
− | * [http://tele.sj.ifsc.edu.br/~msobral/pji4/Zoiper_3.3_Linux_Free_32Bit_64Bit.tar.gz Instalador do softphone Zoiper]
| |
− |
| |
− |
| |
− | Para realizar esses exercícios você deve usar o Asterisk na máquina virtual ''Grafico-2''. Para testar as chamadas, use um softphone em seu celular ou em um computador.
| |
− |
| |
− |
| |
− | 1. Criar os seguintes canais SIP: 100 e 101 (escolha usuários e senhas para autenticação)
| |
− |
| |
− | 2. Crie um plano de discagem em que todos podem fazer chamadas para todos (isso é, 100 pode chamar 101, e vice-versa).
| |
− |
| |
− | 3. Configure os softphones de forma que se registrem no PBX Asterisk, usando as contas SIP criadas previamente.
| |
− |
| |
− | 5. A partir de um softphone faça uma chamada para a conta do outro softphone. Verifique se o softphone de destino acusou o recebimento de chamada. Caso isso não tenha ocorrido, verifique seu plano de discagem. Em seguida faça uma chamada em sentido contrário.
| |
− |
| |
− | 6. Execute o comando ''rasterisk -vvv'' no computador do Asterisk.
| |
− |
| |
− | 7. Usando o comando ''sip show peers'', visualize os estados dos canais SIP conhecidos pelo Asterisk.
| |
− |
| |
− | 8. Refaça uma chamada entre os softphones, e observe o que aparece na tela do ''rasterisk''.
| |
− |
| |
− | 9. Será possível verificar que chamadas estão em andamento no Asterisk usando o ''rasterisk'' ? Pesquise como se pode fazer isso.
| |
− |
| |
− | 10. Use o ''rasterisk'' para testar chamadas. Use o comando ''console dial canal_SIP'' para chamar um canal SIP (substitua ''canal_SIP'' pelo número a ser chamado). Ao final, execute ''console hangup''.
| |
− |
| |
− | 11. Acrescente mais um canal SIP, editando o arquivo ''sip.conf''. Configure um dos softphones para usar esse novo canal.
| |
− |
| |
− | 12. Teste chamadas entre os softphones usando esse novo número.
| |
− |
| |
− | === Possíveis problemas ===
| |
− |
| |
− | # Em cada softphone crie uma conta SIP, que deve ser identificada por ''ramal@IP_do_PBX'' (ex: se o PBX tiver IP 192.168.2.110, as contas de alunos podem ser 100@192.168.2.110 e 101@192.168.2.110).
| |
− | # Após definir as contas, verifique se os telefones indicaram que elas estão disponíveis (''online''). Você pode fazer essa verificação também no próprio Asterisk. Neste caso execute o seguinte comando para acessar o console do Asterisk: <syntaxhighlight lang=bash>
| |
− | sudo rasterisk -vvv
| |
− | host*CLI> sip show peers
| |
− | host*CLI> sip show peers
| |
− | Name/username Host Dyn Nat ACL Port Status
| |
− | 101/101 192.168.2.10 D 11270 OK (6 ms)
| |
− | 102/102 192.168.2.210 D 63169 OK (12 ms)
| |
− | 2 sip peers [Monitored: 2 online, 0 offline Unmonitored: 0 online, 0 offline]
| |
− | </syntaxhighlight>
| |
− | # Se algum dos telefones não aparecer como ''OK'' no console do Asterisk, verifique se o número de ramal e a senha configuradas no telefone são os mesmos declarados em ''/etc/asterisk/sip.conf''. Outro teste que se pode fazer é acessar o console do Asterisk, e depois tentar ativar as contas SIP nos telefones (i.e. colocá-las para indisponível ou ''offline'', e depois reativá-las). O Asterisk irá mostrar algumas linhas informativas sobre os registros dos telefones..
| |
− | # Se as contas SIP estão devidamente registradas no Asterisk, mas ainda assim as chamadas não são realizadas, o problema deve estar no plano de discagem. Neste caso, acesse o console do Asterisk e tente novamente fazer a chamada. Veja se o Asterisk informa na tela o motivo para a chamada não ser realizada. Em seguida, confira se seu plano de discagem (''/etc/asterisk/extensions.conf'') possui uma extensão que satisfaça a chamada que se deseja realizar. Isso é, se você estiver tentando chamar o ramal SIP 101@192.168.2.110, deve haver uma extensão assim: <syntaxhighlight lang=text>
| |
− | exten=>101,1,Dial(SIP/101)
| |
− | same=>n,Hangup
| |
− | </syntaxhighlight>
| |
− |
| |
− | ===DICAS===
| |
− |
| |
− | Comandos válidos no CLI do Asterisk:
| |
− |
| |
− | #Recarregar as configurações do arquivo sip.conf: <code> sip reload</syntaxhighlight>
| |
− | #Recarregar as configurações do arquivo extensions.conf: <code> dialplan reload</syntaxhighlight>
| |
− | #Ver canais SIP criados: <code> sip show peers</syntaxhighlight>
| |
− | #Gerar uma ligação via console: <code>console dial extensão@contexto</syntaxhighlight>
| |
− |
| |
− | === PBX baseados em Asterisk ===
| |
− |
| |
− | Existem softwares que implementam interfaces amigáveis para uso do Asterisk. Mais que isso, tais softwares criam um modelo de utilização do Asterisk, articulando seus recursos e funcionalidades de forma prática. Alguns deles são:
| |
− | * [https://www.freepbx.org/ FreePBX]
| |
− | * [https://www.elastix.org/ Elastix]
| |
− | * [http://www.snep.com.br/br/ SNEP]
| |
− |
| |
− |
| |
− | Algum deles poderia ser adequado ao projeto ? Ou seria melhor usar o Asterisk diretamente ?
| |
| | | |
| {{Collapse bottom | Aula 1}} | | {{Collapse bottom | Aula 1}} |