Mudanças entre as edições de "PJI4-2017-2"
Linha 762: | Linha 762: | ||
{{collapse top | Aula 6}} | {{collapse top | Aula 6}} | ||
{{collapse top | Aula 6}} | {{collapse top | Aula 6}} | ||
+ | |||
+ | = 25/08: Projeto 1: Funções de PABX (continuação) = | ||
+ | |||
+ | {{collapse top | Aula 7}} | ||
+ | {{collapse top | Aula 7}} | ||
+ | |||
+ | = 29/08: Projeto 1: Funções de PBX: URA e correio de voz== | ||
+ | |||
+ | {{collapse top | Aula 8 }} | ||
+ | |||
+ | O que é uma URA (''Unidade de Resposta Audível'') ? Clique na imagem abaixo ... | ||
+ | |||
+ | [[imagem:Ura-tabajara.png|link=https://www.youtube.com/watch?v=38vvJlZCyvQ]] | ||
+ | <br>''URA Tabajara'' | ||
+ | |||
+ | Uma URA implementa um menu audível para auto-atendimento. Sua construção é feita toda no plano de discagem, como se pode ver no exemplo abaixo: | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | [default] | ||
+ | exten => 666,1,Goto(ura,s,1) | ||
+ | |||
+ | [ura] | ||
+ | exten => s,1,Answer | ||
+ | exten => s,2,NoOp(Ligação entrou na URA) | ||
+ | exten => s,n,Background(/var/lib/asterisk/sounds/benvindo) | ||
+ | exten => s,n,NoOp(Digite a opção/1-suporte/2-comercial/3-financeiro) | ||
+ | exten => s,n,WaitExten(6); caso nada tenha sido digitado durante a mensagem "benvindo", espera mais 6 segundos no máximo | ||
+ | |||
+ | exten => 1,1,NoOp(Chamada foi para Suporte) | ||
+ | same => n,Dial(SIP/2402,60) | ||
+ | same => n, Hangup | ||
+ | |||
+ | exten => 2,1,NoOp(Chamada foi para Comercial) | ||
+ | same => n,Dial(SIP/2801,60) | ||
+ | same => n, Hangup | ||
+ | |||
+ | exten => 3,1,NoOp(Chamada foi para Financeiro) | ||
+ | same => n,Dial(SIP/2000,60) | ||
+ | same => n, Hangup | ||
+ | |||
+ | exten => i,1,NoOp(Extensão inválida) | ||
+ | same => n,Playback(beep) | ||
+ | same => n,GoTo(s,3); volta para o menu | ||
+ | |||
+ | exten => t,1,NoOp(Tempo esgotado) | ||
+ | same => n,Dial(SIP/3401,60) | ||
+ | same => n,Hangup | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | A URA é composta por mensagens de voz, que instruem o usuário sobre o que ele pode fazer (isto é, apresentam as opções), e músicas, que o entreteem (!?) enquanto aguarda uma operação ser realizada. Assim, para criar uma URA minimamente funcional são necessários esses arquivos de voz. Para gravá-los, pode-se criar uma extensão especial, por exemplo, que atenda por ''9005nome_de_um_arquivo''. Ao chamar essa extensão, pode-se pronunciar a mensagem de voz assim que o Asterisk atender. Para encerrar a mensagem, deve-se digitar ''#''. O arquivo de voz resultante estará no diretório ''/var/lib/asterisk/sounds'', ou em qualquer outro diretório especificado na aplicação ''record''. | ||
+ | |||
+ | <syntaxhighlight lang=text> | ||
+ | exten=>_9005.,1,answer() | ||
+ | same=>n,record(/var/lib/asterisk/sounds/${EXTEN:4}.wav,5,0) | ||
+ | same=>n,playback(/var/lib/asterisk/sounds/${EXTEN:4}) | ||
+ | same=>n,hangup() | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Para a implantação de uma URA (e de muitas outras funções típicas de PBX) em um PBX Asterisk, é necessário conhecer os recursos que ele oferece. Dentre esses recursos, há aplicações e variáveis, já estudados em aulas anteriores, e características (''features''). Hoje serão vistos alguns desses recursos, que usaremos para implantar uma URA. | ||
+ | |||
+ | ==Correio de voz== | ||
+ | |||
+ | * [http://www.voip-info.org/wiki/view/Asterisk+Voicemail VoiceMail no Asterisk] | ||
+ | * [http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/asterisk-Voicemail.html Voice Mail (um texto mais completo)] | ||
+ | * [http://tele.sj.ifsc.edu.br/~msobral/pji4/voicemail.pdf Outro texto sobre correio de voz] | ||
+ | |||
+ | |||
+ | A função de correio de voz possibilita a gravação de mensagens de voz para usuários do PBX. Um usuário é identificado por um número de caixa postal, que usualmente corresponde ao seu número telefônico. A ativação dessa função envolve duas configurações no PBX: | ||
+ | # Devem-se declarar as caixas postais, com seus números, senhas, identificação de usuário e email. Isso se faz no arquivo [http://www.voip-info.org/wiki/view/Asterisk+config+voicemail.conf voicemail.conf]. | ||
+ | # Deve-se criar a lógica de discagem que possibilite a gravação de mensagens de voz. Isso se faz no plano de discagem, e a aplicação para gravar uma mensagem se chama [http://www.voip-info.org/wiki/view/Asterisk+cmd+VoiceMail voicemail]. | ||
+ | |||
+ | |||
+ | 1- Editar o arquivo voicemail.conf e deixar apenas as seguintes linhas: | ||
+ | |||
+ | <code>[general] | ||
+ | format=wav ;Formato do áudio a ser armazenado | ||
+ | maxmsg=100 ;Máximo de mensagens gravadas na pasta | ||
+ | minsecs=3 ;Tempo mínimo da mensagem | ||
+ | maxsilence=10 ;Período máximo de silêncio | ||
+ | maxlogins=3 ;Número máximo de tentativas de login por usuário | ||
+ | |||
+ | [default] | ||
+ | 2000 => 1234,um_nome,um_email</syntaxhighlight> | ||
+ | |||
+ | 2- Editar o arquivo extensions.conf, direcionar as chamadas não atendidas de uma extensão para o correio de voz e criar uma segunda extensão que dê acesso às caixas de mensagens: | ||
+ | |||
+ | <code> | ||
+ | ;VOICEMAIL MENU | ||
+ | ; | ||
+ | exten => 999,1,VoiceMailMain() | ||
+ | exten => 999,2,HangUp() | ||
+ | exten => 999,3,PlayBack(vm-goodbye) | ||
+ | exten => 999,4,HangUp() | ||
+ | |||
+ | ; | ||
+ | ; RAMAL 100 + VOICEMAIL (FOR TEST ONLY) | ||
+ | ; | ||
+ | exten => 2000,1,Dial(SIP/2000,5) | ||
+ | exten => 2000,2,VoiceMail(2000) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <br> | ||
+ | 3- Reloads: | ||
+ | |||
+ | <code>dialplan reload | ||
+ | voicemail reload </syntaxhighlight> | ||
+ | |||
+ | {{collapse bottom | Aula 8}} |
Edição das 15h09min de 29 de agosto de 2017
Endereço encurtado: http://bit.ly/pji4-20172
Projeto Integrador IV
Professores: Marcelo Maia Sobral ( Facebook) e Jorge Loureiro (jorge.loureiro@ifsc.edu.br)
Encontros: 3a feira/19:00, 6a feira/19:00
Atendimento paralelo: 3a e 6a feira 18:30 h
Coordenadoria pedagógica (Graciane): graciane@ifsc.edu.br (3381-2890, 3381-2842)
Objetivo Geral
- Implantar um PABX IP integrado com serviços de telefonia fixa e móvel convencionais.
- Prover a infraestrutura de rede necessária para o adequado funcionamento deste PABX IP.
- Integrar os serviços de telefonia com outros serviços de rede.
Links interessantes
- VoIP Hacking Techniques
- Asterisk não é um SIP proxy
- FoneRNP
- SwitchVox: PBX virtual
- Net Fone da Embratel é VoIP, mas não usa SIP]
- Estatísticas sobre VoIP no mundo
Provedores VoIP no Brasil
Avaliações
Aluno(a) | Avaliação 1 | Avaliação 2 | Avaliação 3 | Avaliação 4 | Nota final |
---|
Resumo de comandos da CLI para o Asterisk
- O Asterisk pode ser carregado de duas formas:
- foreground: utilizado para depurar problemas na inicialização do Asterisk, quando ele não puder ser inicializado.
- background: modo padrão de inicialização
- Conectar à CLI do Asterisk carregado
asterisk -r rasterisk
- Comandos na CLI
- Saindo da CLI sem interromper o processo
exit
- Carrega canais SIP previamente registrados
sip reload
- Mostra canais SIP registrados
sip show peers
- Carrega plano de discagem
dialplan reload
- Mostra a extensão criada no plano de discagem
dialplan show default
- Finalizando processo no Asterisk
sudo core stop now
- Ver aplicações disponíveis no Asterisk
core show applications
- Saindo da CLI sem interromper o processo
- Iniciando Asterisk em modo Background
sudo service asterisk start
- Carregar o Asterisk em modo ForeGround
sudo asterisk -gc
28/07: Apresentação da disciplina
Aula 1 |
---|
PBX IPUm PBX IP funciona como uma central telefônica, porém intermediando chamadas VoIP. Com isso, as chamadas são feitas de um telefone IP em direção ao PBX IP, que a encaminha ao telefone IP de destino de acordo com suas regras de discagem. A figura abaixo ilustra como funciona uma chamada VoIP típica através de um PBX IP.
PBX IP Asterisk
Características Básicas: faz tudo que um PABX pequeno e simples faz e pouco mais
Plano de discagemO 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:
[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
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: exten=>identificador,prioridade,aplicação
Como o processamento de uma chamada usualmente envolve uma sequência de extensões, existe uma sintaxe opcional para simplificar a declaração: exten=>identificador,prioridade,aplicação
same=>prioridade,aplicação
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: exten=>101,1,Dial(SIP/101)
same=>n,Hangup; a prioridade aqui terá o valor 2
Canais SIPCada 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: ; 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
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): ; 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
Experimento: comunicação entre telefones IP ou softphones por meio de um PBX IP
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
DICASComandos válidos no CLI do Asterisk:
|
02/08: Interligação de PBX Asterisk
Aula 2 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Supondo que cada cliente do provedor tenha seu próprio PBX, pode ser necessário interligar suas centrais com o PBX do provedor. A interligação entre PBX Asterisk pode ser feita via rede de dados usando os protocolos SIP ou IAX2 (porém este segundo está em desuso). No primeiro caso, o encaminhamento de uma chamada entre dois PBX funciona como uma chamada SIP usual, e isso significa que a sinalização é feita com SIP e o áudio flui em separado com RTP. No segundo caso, o protocolo IAX2 (Inter-Asterisk eXchange) encapsula tanto a sinalização quanto os fluxos de áudio, o que simplifica o estabelecimento do tronco.
Tronco SIPEm um entroncamento SIP (SIP trunking), um PBX pode encaminhar chamadas através de um tronco SIP. Essas chamadas podem ser originadas de diferentes formas, tais como telefones IP ou convencionais. Entre os PBX do entroncamento, as chamadas são sinalizadas com SIP e transmitidas com RTP (mais detalhes sobre esses protocolos serão vistos em aulas posteriores). A ativação de um entroncamento SIP entre dois PBX Asterisk pode ser feita seguindo o exemplo abaixo:
Atividade: estabelecendo chamadas entre diferentes PBX AsteriskNesta atividade, vamos realizar chamadas entre softphones registrados em diferentes PBX Asterisk. Isso implica definir um plano de numeração para os ramais da empresa. Sendo assim:
Padrões de extensõesExtensões podem ser representadas de forma compacta com padrões de extensões. Com esse recurso, muitas extensões podem ser atendidas com um único conjunto de regras, evitando um plano de discagem repetitivo. Por exemplo, se uma empresa possui ramais entre 100 e 199, o plano de discagem pode ser escrito assim: exten=>_1XX,1,Dial(SIP/${EXTEN})
same=>n,Hangup
A extensão _1XX contida na primeira linha está escrita como um padrão (pattern), pois inicia com o caractere _. Os caracteres que seguem _ indicam cada dígito que deve aparecer para satisfazer essa extensão. Nesse exemplo, deve aparecer 1 seguido de dois dígitos quaisquer entre 0 e 9 (é esse o significado do caractere X). Desta forma, essa extensão atende qualquer número entre 100 e 199. Por fim, o número de fato chamado é armazenado na variável ${EXTEN}, que pode assim ser usada dentro da regra de discagem. Alguns caracteres têm significado especial em padrões, como mostrado no exemplo (caractere X). A tabela abaixo lista esses caracteres:
VariáveisO uso de variáveis no Asterisk possui funcionamento semelhante àquele encontrado nas linguagens de programação, permitindo ao “programador” utilizar variáveis já definidas pelo Asterisk bem como definir suas próprias variáveis. As definições das variáveis devem ser feitas no arquivo extensions.conf. A sintaxe para trabalhar com variáveis no Asterisk é semelhante a do c-shell, porém as variáveis definidas pelo usuário não são sensíveis a caixa, ou seja, VAR e var referem-se à mesma variável.
Existem três tipos de variáveis:
Abaixo se pode ver um exemplo de plano de discagem que usa variáveis: [globals]
; definicao de uma variavel global
VENDAS=SIP/6112
[alunos]
; definicao de uma variavel global atraves do comando Global e aplicacao Set
exten=> 6666,1,Set(GLOBAL(COMPRAS)=SIP/6113)
exten=> 6666,2,NoOp(${GLOBAL(COMPRAS)})
; definicao de uma variavel especifica ao canal
exten=> 7777,1,Set(teste=1)
exten=> 7777,n,NoOp(${teste})
exten=> 7777,n,Set(teste=$[${teste} + 1])
exten=> 7777,n,NoOp(${teste})
exten=> 7777,n,Hangup
Extensões especiaisAlém das extensões criadas pelo usuário, o Asterisk apresenta algumas extensões especiais, tais como:
|
11/08: Projeto 1: continuação sobre entroncamento
Aula 3 |
---|
15/08: Projeto 1: Planejamento da Portaria Eletrônica
Aula 4 |
---|
|
18/08: Projeto 1: Funções de PABX
Aula 5 |
---|
Funções usando o plano de discagemPara implantar funcionalidades conhecidas ou novas no Asterisk usando o plano de discagem, devem-se conhecer alguns recursos avançados. Aqui são apresentados quatro deles: extensões especiais, aplicações, padrões de extensões e variáveis. AplicaçõesAs aplicações são usadas no plano de discagem. Assim, o processamento de uma chamada se faz pela execução sucessiva de aplicações, de forma a se obter o efeito desejado. DialEncaminha a chamada para um destino. Exemplo: exten=>_1XXXX,1,Dial(SIP/${EXTEN})
same=>n,hangup
BackgroundToca um arquivo de som como música de fundo. Esse arquivo deve estar em /usr/share/asterisk/sounds, e ser codificado com codec PCM ou WAV. Exemplo: exten=>666,1,Answer
same=>n,Background(hello-world)
same=>n,Hangup
PlaybackToca um arquivo de som. A diferença em relação a Background é que Playback devolve o controle ao Asterisk (i.e. ao plano de discagem) somente após tocar todo o arquivo. Esse arquivo deve estar em /usr/share/asterisk/sounds, e ser codificado com codec PCM ou WAV. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Hangup
WaitForça uma espera durante o processamento da chamada. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Wait(1)
same=>n,Playback(beep)
same=>n,Hangup
Answer e HangupAnswer atende uma chamada. Hangup termina uma chamada. Exemplo: exten=>666,1,Answer
same=>n,Playback(hello-world)
same=>n,Hangup
GoToPula para um contexto (opcional), extensão, prioridade específica. Exemplo: exten=>100,1,GoTo(vendas,s,1)
GoToIfTrata-se do comando GoTo condicional. Sua sintaxe é: GoToIf(condição?[rótulo se verdade]:[rótulo se falso]) Os rótulos podem assumir a forma: [[contexto],extensão,]prioridade Exemplo: [alunos]
exten=>6111,1,GoToIf($["${CALLERID(num)}" != "6112"]?2:4)
same=> n,Dial(SIP/6111,30)
same=> n,Hangup
same=> n,Answer
same=> n,Playback(hello-world)
same=> n,Hangup
SetModifica o valor de uma variável. Exemplo: exten=>666,1,Set(Tentativas=1)
same=>2,Dial(SIP/666,10)
same=>3,Set(Tentativas=${Tentativas}+1)
same=>4,GoToIf($[${Tentativas} < 2]?2:5)
same=>5,Hangup
LogGrava um texto qualquer no log do Asterisk. Exemplo: exten=>666,1,Log(DEBUG,"Chamada para 666")
same=>n,Dial(SIP/666,10)
same=>n,Hangup
NoOpNão faz nada, sendo útil para depurar o plano de discagem. Exemplo: exten=>100,1,NoOp(${CONTEXT})
Atividades
|
22/08: Projeto 1: Funções de PABX (continuação)
Aula 6 | ||||||||
---|---|---|---|---|---|---|---|---|
|