Howto: PBX In A Flash (PiaF)
Resolvi escrever este guia para os que estão começando em telefonia IP agora, e não sabem bem por onde começar, ou para aqueles que já “fuçam” a algum tempo mas não sabem bem o que fazer com os seus laboratórios ou o que realmente estudar ou qual caminho seguir. Neste documento, eu procuro dar dicas e sugestões baseadas em experiências e situações pelas quais eu passei enquanto trabalhava exclusivamente como consultor de asterisk.
Realizei diversas interligações e migrações entre pbx convencionais e servidores asterisk, depois de muito bater cabeça por ai fui definindo padrões e procedimentos que eu mesmo deveria seguir para facilitar a minha vida e é isto que venho compartilhar agora.
Antes de começarmos, queria falar sobre instalações do asterisk x sistemas completos tipo trixbox, piaf e elastix.
Para ficar competitivo no mercado, eu considero muito importante gastar o mínimo possível de horas técnicas e fazer um trabalho bem feito. Para a interligação ou substituição da maioria dos PBX convencionais, um FreePBX tira de letra a tarefa de forma estável e de fácil gerenciamento. Claro que em alguns casos é bem mais interessante montar um Asterisk limpo sem nada, para algumas tarefas bem mais específicas, como por exemplo um sistema de gravação interligado a outro pbx, um sistema de voicemail, etc..
Porque o PiaF e não o Trixbox ou elastix?
Bem, na outra empresa que eu trabalhava focado em asterisk, o carro chefe era o TrixBox (antigo asterisk@home), um fator que eu nunca gostei no tb, é que ele sempre foi muito “bleeding edge”, então por diversas vezes encontrei alguns features meio bugados. Outro motivo, seria uma grande invasão de privacidade por parte da Fonality (empresa que mantem o TB) para com os seus usuários, para saber mais sobre o assunto, pode procurar sobre “Trixbox Call Home” para ajudar, já selecionei algo aqui, aqui, aqui e aqui!
E como terceiro ponto, a Fonality resolveu abandonar o FreePBX e passar para um gerenciador próprio, isto foi mais que o suficiente para procurar outra distro.
Elastix… na época que saiu o asterisk 1.4 o freepbx demorou um pouco para lançar uma versão definitiva, e a elastix lançou uma versão do seu produto usando o freepbx beta para asterisk 1.4… Isto me fez perder credibilidade com a distro.
E por fim encontrei o PiaF, na sua página inicial, vi algo que me agradou muito, pois bate 100% com a minha linha de pensamento “estamos comprometidos em lançar releases estáveis e não bleeding edge” Depois de passar um tempo pesquisando sobre a distro, observando a comunidade e depoimentos externos, percebi que valia a pena testar… De fato, a única coisa que eu posso reclamar é o fato de eles não terem o hudlite que era um produto muito interessante para as telefonistas, mas de resto a distribuição é muito estável e tendo me gerado pouquíssimos problemas.
Instalando o PiAF
Sem muito mistério, sem muito drama, botar o cd no drive iniciar com todas as opções default, ajustar as partições de acordo com o seu gosto e aguardar o primeiro reboot.
Neste momento o PiAF oferece 2 opções, baixar os arquivos da internet ou usar do próprio CD. Na versão 1.2 era apenas baixar da internet ou cd para “reseller”. Vale a pena seguir sempre o recomendado pelo setup, que seria baixar os arquivos da internet, neste meio tempo, vá buscar o seu primeiro café e aguarde…
Depois que ele faz todos os downloads e instala todos os programas/scripts, comece a fazer as atualizações, rode na respectiva ordem:
update-scripts
update-fixes
update-source (leia as próximas linhas ANTES de rodar este comando)
Observar que o piaf vai informar que o zaptel está rodando e que o sistema de telefonia ficara indisponível blá blá e precisará reinicializar o computador para desativar o zaptel. Após o reboot rode novamente o update-source.
I M P O R T A N T E:
NÃO atualize, o Kernel através do update-source nem permita que ele rode o yum update (obviamente também não rode estes comandos manualmente). Eu vi surgirem alguns problemas após estas atualizações, portanto tenho deixado elas de lado. A minha preocupação é manter o FreePBX e o Asterisk atualizados, não o sistema (estranho não? um dia explico o meu ponto de vista). Faça como quiser, o pbx é seu ![]()
Agora enquanto roda o update-source, busque mais um pouco de café e mantenha-se longe do teclado ![]()
Conforme recomendado pelo piaf, rode um novo update-scripts e em seguida update-fixes.
Trocando a senha do usuário maint
(Durante os updates do piaf, ele informa que foi descoberto um bug no sistema de autenticação do freepbx e desabilita o controle de usuários, a autenticação passa a ser feita pelo apache e voltamos a usar o usuário “maint”)
root@pbx:~ $ passwd-maint
-------------------------------------------
Set password for AMP web GUI and maint GUI
User: maint
-------------------------------------------
New password:
Re-type new password:
Updating password for user maint
Instalando os módulos
Ao invés de instalar apenas alguns módulos, eu recomendaria instalar todos por alguns motivos:
* Não altera o resultado final para um pbx de 100 a 150 ramais. (Desconsiderando o caso de Callcenters onde o uso do pbx e dos extensions é muito intenso)
* Frequentemente vejo colocarem “pbxizes” em redes isoladas ou localidades bizarras, sem acesso a internet, embaixo de escadas ou outros lugares nunca antes imaginados. Em alguns casos, pode acabar ficando difícil instalar um módulo em um pbx de produção, por isso sempre deixo todos os módulos instalados durante a implantação, se um dia precisar, “tá ali”.
* Para quem está aprendendo também é interessante, pois com o módulo instalado fica mais fácil de “fuçar”
Acesse o seu pbx através do endereço http://servidor/admin utilizando o usuário maint.
Vá em “Module Admin”
Check for updates online
Download all/ upgrade all
Process / Confirm
Irão surgir alguns erros de dependências, apenas clique em confirmar e aguarde a instalação de todos os pacotes. Repita todo o processo até que não reste mais nenhum pacote por instalar.
Instalando a placa TDM400 com 4 FXO
root@pbx:~ $ genzaptelconf
root@pbx:~ $ ztcfg -vvv
Zaptel Version: 1.4.12.1
Echo Canceller: MG2
Configuration
======================
Channel map:
Channel 01: FXS Kewlstart (Default) (Slaves: 01)
Channel 02: FXS Kewlstart (Default) (Slaves: 02)
nullChannel 04: FXS Kewlstart (Default) (Slaves: 04)
4 channels to configure.
Observação: Neste momento deve ter rolado uma pequena confusão para quem está iniciando agora com Asterisk; No zaptel.conf para módulos FXO, usa-se fxsks, aparecendo de forma invertida, já li uma explicação sobre isso, fazia muito sentido, mas honestamente, não lembro mais o motivo real, é porque é, e não importa muito. Se alguem lembrar, comenta ai! Este é o único ponto onde isso vai acontecer.
Agora edite o arquivo /etc/asterisk/zapata-channels.conf e separe os seus canais por grupos, exemplo de caso com duas linhas fixas e uma linha Cellfix:
Canais 1 e 2 no grupo 0 (ligando nas linhas fixas)
Canal 3 no grupo 1 (ligando no CellFix)
Canal 4 no grupo 2 (sem ligar em nada)
Salve o arquivo, conecte no asterisk e faça um reload da configuração.
root@pbx:~ $ asterisk -vvvr
Asterisk 1.4.21.2, Copyright (C) 1999 - 2008 Digium, Inc. and others.
Created by Mark Spencer markster@digium.com
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
== Parsing '/etc/asterisk/asterisk.conf': Found
Connected to Asterisk 1.4.21.2 currently running on pbx (pid = 3346)
Verbosity is at least 3
pbx*CLI> reload
...
pbx*CLI>
Verificando os canais da placa TDM:
pbx*CLI> zap show channels
Chan Extension Context Language MOH Interpret
pseudo default en default
1 from-pstn en default
2 from-pstn en default
3 from-pstn en default
4 from-pstn en default
pbx*CLI>
Ok, agora reinicialize seu PBX e verifique se tudo vai inicializar corretamente, zapata, asterisk, etc… Não havendo nenhuma surpresa após o reboot, a base do seu pbx está pronta! Agora basta configurar…
Configuração Básica:
Para termos um PBX básico operacional, precisamos do seguinte:
* Trunks
* Outbound routes
* Ramais configurados
* Inbound routes
* Music on Hold ?
* Desabilitando Features “perigosos”
* Pickup Groups
* Ajustes Finos
Configurando o Trunk:
Se clicar em Trunks, já vai haver um Trunk ZAP/g0 basta apenas adicionar o g1 (para o nosso Cellfix)
Add Zap Trunk em “Zap identifier” coloque g1 e clique em “Submit Changes”
Dialplan:
Antes de criarmos as rotas de saída, devemos pensar no nosso Dialplan, eu gosto de adotar o seguinte critério:
Ligações externas para a PSTN, sempre começam com Zero, ligações internas ou interligações com outras empresas do grupo, diretamente o número do ramal. Este por sua vez procuro manter sempre com 4 dígitos por questões de padronização, praticidade e facilidade na hora de montar um plano de numeração entre várias empresas. Exemplo:
Empresa A: Faixa de numeração 1100 até 1199
Empresa B: Faixa de numeração 1200 até 1399
Empresa C: Faixa de numeração 1400 até 1499
Assim podemos pensar da seguinte forma: Os dois primeiros dígitos são o “prefixo” da empresa e os dois últimos o número do ramal, ficando visualmente simples de entender.
Rotas de Saída (Outbound Routes):
Começamos deletando a rota 9_outside.
Agora criaremos uma rota de saída para cada tipo de ligação, basta clicar em Add Route e preencher os campos “Route Name” com o nome da rota, Dial Patterns e o Trunk Sequence.
O padrão que eu gosto de usar é o seguinte:
Route Name: Especiais
Dial Patterns:
0|1XX
0|0800XXXXX.
Trunk Sequence: (grupo de linha fixa)
1XX para policia, bombeiros, auxilio a lista, etc..
0|0800XXXXX. para números 0800 (observar que estes possuem tamanhos variados)
Route Name: Fixo_Local
Dial Patterns:
0|[2-6]XXXXXXX
Trunk Sequence: (grupo de linha fixa)
Route Name: Movel_Local
Dial Patterns:
0|[7-9]XXXXXXX
Trunk Sequence: (grupo cellfix)
Route Name: Fixo_DDD
Dial Patterns:
0|ZZ[2-6]XXXXXXX
0ZZ|ZZ[2-6]XXXXXXX
Trunk Sequence: (grupo de linha fixa)
Route Name: Movel_DDD
Dial Patterns:
0|ZZ[7-9]XXXXXXX
0ZZ|ZZ[7-9]XXXXXXX
Trunk Sequence: (grupo cellfix)
Route Name: Internacional
Dial Patterns:
0|00ZZXXXXX.
Trunk Sequence: (grupo de linha fixa)
Observar que no Dialplan, para as chamadas de longa distância, permitimos que o usuário disque sem a operadora (pode ser o padrão adotado pela empresa), mas caso o usuário seja teimoso e insista em usar operadora, também aceitamos, mas cortamos a operadora de forma transparente
Agora voltamos aos Trunks e montamos o nosso Dial Rules para os dois troncos:
XXXXXXXX
024+ZZXXXXXXXX
0800XX.
000ZZ|0024+XXXX.
1XX
Estas regras permitirão todas as chamadas configuradas nas Outbound Routes sendo que para as chamadas de DDD usaremos a operadora que nos forneça o melhor desconto ou pacote de ligações (usei o exemplo de 24)
Criação de Ramais (Extensions):
Agora precisamos criar os nossos ramais.
Vamos em “Add Extension” e depois Generic SIP Device
Os campos básicos (com exemplos) são:
User Extension: 1000
Display Name: Telefonista (Isto é legal pois se usar telefones IP ou softphones, o Display name aparecerá nas ligações internas, e também aparecerá nos relatórios de chamadas) Obs: Sempre uso APENAS caracteres alfa-numéricos, sem nenhum tipo de caracter especial como ç ~ + * ‘ é á, etc… Não sei qual impacto isto pode ter no sistema, portanto procuro evitar problemas
Secret: PARE! Coloque algo DECENTE, já existem vários tipos de bruteforce para asterisk (SIP principalmente) baseados em palavras de dicionário e coisas bobas como por exemplo Ext 1000 senha 1000. Um usuário malicioso interno ou externo, pode tranquilamente causar um grande prejuízo em um curto período de tempo, portanto, tome cuidado com este detalhe.
Clique em Submit Changes e adicione mais alguns extensions.
Rotas de entrada (Inbound routes):
Agora que já temos quase tudo pronto, devemos definir o que fazer com as chamadas recebidas. Vamos adicionar algo bem genérico, para isto, clique em Add Incoming route, pule todos os campos e vá direto para “Set Destination”. Marque Extensions e procure o ramal da Telefonista
clique em Submit e a sua rota de entrada está criada!
Musica de espera (Music On Hold)
Isto é básico? Sim, to de saco cheio de ligar para um PBX e ouvir sempre a mesma musica!
O Asterisk vem por default com 3 músicas pré instaladas, entretanto o FreePBX toca estas musicas sempre na mesma ordem. Mesmo que não façamos o upload de novas músicas, podíamos ao menos habilitar o random play né? Basta clicar em Enable Random Play e Submit! Simples não?
Desabilitando Features “Perigosos”
Alguns Features deveriam vir desativados por default pois podem causar transtornos e um certo perigo. Por segurança estes devem ser desabilitados. Se quiser habilitar estes features, crie contextos customizados ou procure maneiras seguras para a sua ativação.
Clique em Feature Codes e procure principalmente
* Chanspy (permite ouvir chamadas ativas a partir de qualquer telefone) Muito útil se bem usado, por exemplo: Um cliente meu tinha um helpdesk, e queria que o gerente do helpdesk tivesse a possibilidade de “ouvir” as chamadas ativas e “Sussurrar” (Whisper) apenas para o atendente, sem que o cliente escute. Desta forma ele podia ajudar seus funcionários durante uma ligação. O chanspy possui este feature (se customizado corretamente), mas você não gostaria que um funcionário qualquer escutasse uma chamada da diretoria apenas digitando um código…
* ZapBarge Semelhante ao chanspy mas ouve os canais das placas Zap.
* Gabcast (como instalamos o modulo e nao usaremos, desabilitamos)
* outros módulos que possam gerar confusão como Do not disturb, dictation, blacklist (dificilmente usado em um ambiente corporativo)
Aplicando as configurações:
O FreePBX não ativa as configurações no momento das alterações, evitando assim reloads desnecessários e que problemas apareçam entre uma configuração e outra.
Para aplicar as configurações clique no botão laranja que deve estar aparecendo no topo “Apply Configuration Changes” e confirme.
Ajustes Finos:
Agora faltam apenas pequenos detalhes para o nosso pbx ficar pronto. São eles:
No arquivo /etc/asterisk/zapata.conf
na parte [channels] adicionar:
busydetect=yes
busycount=4
Isto faz com que o asterisk “desconecte” uma linha quando esta ouvir o tom de “ocupado” (tú tú tú). No meu primeiro pbx fiquei quebrando cabeça quando as linhas ficavam penduradas por tempo indeterminado, este ajuste resolveu o problema
No arquivo /etc/asterisk/features_general_custom.conf podemos facilitar a vida de nossas amigas telefonistas..
transferdigittimeout => 5 ; tempo em segundos para esperar entre os digitos quando estiver transferindo uma chamada
courtesytone = beep
xfersound = beep ; beep que indica que uma transferência foi concluída
xferfailsound = beeperr ; beep de erro que indica que uma transferência não foi concluída
featuredigittimeout = 2000 ; Tempo máximo em ms para ativar um feature. o default é 500ms e NORMALMENTE as telefonistas tem problemas
; para digitar *2 em menos de 500ms, subindo isso para 1500 ou 2000 resolve o problema.
Instalando prompts de voz em português
A Intelbras http://www.intelbras.com.br mantém uma distribuição de SoftPBX baseada em Asterisk, esta chama-se DISC-OS http://www.disc-os.org e eles gentilmente cederam os prompts de voz em português (pt_BR) para a comunidade, através da licença Creative Commons http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Vá até o site do DISC-OS http://www.disc-os.org e na seção downloads, procure o pacote Disc-OS Sounds.
Faça o download deste pacote dentro da pasta /var/lib/asterisk.
Nesta mesma pasta descomprima o arquivo:
# tar xvfz Disc-OS-Sounds-1.0-pt_BR.tar.gz
E ajuste o proprietário da pasta sounds recursivamente.
# chown asterisk:asterisk sounds -R
Edite os arquivos:
/etc/asterisk/sip_general_custom.conf
/etc/asterisk/iax_general_custom.conf
/etc/asterisk/zapata.conf
Altere o parâmetro language para pt_BR. Exemplo:
# vi /etc/asterisk/sip_general_custom.conf
language=pt_BR
Realize um reload do asterisk para que as novas configurações entrem em vigor.
# asterisk -rx reload
Pronto, agora o seu PBX Asterisk já fala Brasileirês (pt_BR)!
Ajustando o Timezone do php.ini
Não sei quanto a tua instalação, mas o meu freepbx sempre fica com o horário incorreto. Clique em Time groups e verifique se o tempo mostrado está correto, se estiver incorreto, você deve ajustar o /etc/php.ini
Procure o parâmetro date.timezone e coloque a sua timezone correta ex:
date.timezone = America/Sao_paulo
Lista com todos os Timezones
http://www.php.net/manual/en/timezones.php
Reinicialize o httpd e recarregue a página para verificar o novo horário.
Pickup groups
Já ia esquecendo deste detalhe…. Se um telefone estiver tocando na mesa ao lado, você pode digitar *8 no seu telefone e capturar a ligação, mas para isto é preciso realizar um pequeno ajuste. Tentando evitar confusões em ambientes maiores de telefonia separamos os telefones por grupo, evitando assim, coisas do tipo, o Adão do almox capturando por acidente uma chamada para o refeitório enquanto tentava atender o telefone do seu colega de serviço que foi ao banheiro para concretizar o número 2.
Geralmente eu divido os pickup groups por salas, todos os telefones de uma sala ficam no mesmo grupo. Basta editar o extension novamente e adicionar um número no campo Pickup Group, aproveite para adicionar o mesmo número no Callgroup, um dia será útil.
Observação: Alguem me reportou a muito tempo atrás que valores altos no pickupgroup apresentavam problemas as vezes, acho que isso é meio que lenda urbana mas nunca testei efetivamente, até porquê eu começo do grupo 1 em diante, na real, o número em si não afeta em nada nem aparece, é apenas para o asterisk saber que o telefone 1001 pode capturar chamadas do 1029.
e agora?
Depois destes passos, você já deve ter em mãos um servidor básico de telefonia pronto para entrar em produção com um funcionamento básico. Mas é claro que não vai parar por aí, ainda tens muito o que fuçar e muitos recursos a implementar. A minha dica é foco no que é mais convencional, como IVR (URA – atendimento automático), anúncios, filas (queues), grupos de chamadas (ring groups – procuro usar sempre 3 dígitos no range de 600 a 699), condições de tempo (time conditions – para ter atendimento diferenciado durante o dia e durante a noite por exemplo.), VoiceMail, Conferencias (estes eu gosto de usar 5 dígitos começando em 8 ex 80001 80002 sem conflitar com o dial plan), PIN sets, Call Parking, Callback e DISA.
Outros itens importantes para verificar são:
* Interligação entre 2 ou mais servidores de telefonia (recomendo IAX2 e não SIP)
* Uso de provedores VoIP para redução de custos em interurbanos
Recomendo aprender a usar e implementar BEM estes recursos que citei acima, pois são os itens mais úteis e mais pedidos por clientes.
Também é muito importante sentir-se a vontade com comandos básicos e o debug/verbose do console do asterisk. Isto vai ajudar e muito na solução de problemas.
Apenas para finalizar, eu sempre blasfemei contra o FreePBX quando eu precisava criar um contexto customizado direto extensions_custom.conf. Pior é que esta é uma coisa bem normal de um cliente pedir, e na maioria esmagadora das migrações que eu fiz, foi o único feature que o FreePBX não atendeu. Entretanto encontrei um módulo que gerencia muito bem os contextos customizados praticamente acabando com a necessidade de editar arquivos que ficam difíceis de manter (pois a cada mudança nas outbounds routes, os contextos customizados que usavam estas rotas, quebravam).
Este módulo está disponível aqui: http://www.freepbx.org/trac/ticket/1447
Mas quando que é preciso criar um contexto custom? O motivo mais frequente é quando o cliente pede para ter alguns telefones que não podem realizar chamadas externas (exemplo o ramal da portaria, vigilância, etc..) ou telefones que podem realizar apenas chamadas para números locais fixos. Este tipo de solicitação é bem frequente.
Leitura recomendada: http://dumbme.mbit.com.au/piaf/piaf_without_tears.pdf
Novamente espero ter ajudado de alguma forma.
Sugestões, dúvidas ou xingamentos, basta comentar.
Prezado Eduardo,
Gosto muito do teu Blog. Existem muitas informações que tenho obtido por ele. No entanto, o vejo um pouco desatualizado, acredito que se deva a outras ocupações que tenhas.
Estou com um problema na configuração de um PBX Asterisk. utilizava o Disc-OS, que atendia as minhas expectativas, mas migrei para o Elastix por conta de mais recursos e facilidades que ele oferece.
Não tenha conhecimentos vançados em Linux ou Asterisk, e isso é a causa das minhas dificuldades.
No Disc-OS conseguia escolhaer os ramais que poderiam ter acesso a determinadas rotas saintes (troncos FXO), mas no Elastix não consigo fazer isso.
Explico: tenho quatro linhas analógicas ligadas a uma placa Digium TDM410P. Quero que, por exemplo, a linha 4 fique reservada exclusivamente para um grupo de ramais, não podendo ser utilizada pelos demais para chamadas saintes.
Agradeço pela ajuda.
José,
Independente de ser piaf ou elastix, ambos utilizam o FreePBX.
Você pode instalar o modulo custom-contexts para criar e manter vários contextos distintos permitindo que que cada ramal tenha permissões diferentes.
[]‘s
Boa tarde,
Fiquei admirado com sua imenssa vontade de ajudar,…
parabens,….
meu amigo,… sou novo em asterisk, seguindo suas instruções montei um servido com o piaf, a principio tera apenas linhas voip, adquiri um plano do terra para testar, e um da uol. o da uol não consigo nem registrar, e o do terra, eu registro mais não consigo efetuar nenhuma chamada,…
os ramais estão funcionando perfeitamente,…
Grato,..
aguardo contato…
Você precisa criar uma rota de saída para VoIP, por exemplo,
Vamos supor que vc criou uma rota sip chamada terra.
exten => 0[2-5]XXXXXXX,Dial(SIP/terra/${EXTEN:})
se o comando sip show register estiver OK, então não tem como dar errado.
oi sabes me dizer se piaf ja tem openr2 e oslec como canselador de eco.
obrigado
Marcelo,
Você vai precisar instalar os dois manualmente.
[]‘s
Caros, você já instalou o Piaf com placas da digivoice ? Se sim, tem como me passar o esquema ?
Normalmente eu trabalho com placas da digium ou openvox.
De uma olhada neste tópico onde um usuário explica como instalar esta placa no elastix.
http://www.digivoice.com.br/forum2/viewtopic.php?id=532
As minhas observações sobre o tutorial são:
1- “tente instalar o kernel devel através do yum!”
2- Preste atenção, não execute o make install no source do asterisk conforme o usuário citou.
Boa sorte