MIEEC | 2014/2015 Serviços de Comunicações Índice Introdução ........................................................................................................................ 2 Instalação ......................................................................................................................... 2 Configurações ................................................................................................................... 3 Criação de extensões ..................................................................................................... 3 Voicemail .................................................................................................................. 4 Conferências ..................................................................................................................5 Videochamadas ............................................................................................................. 6 Trunks ........................................................................................................................... 6 Filas de espera............................................................................................................... 9 Mensagens de Texto..................................................................................................... 11 Interactive Voice Response (IVR)................................................................................ 12 Restrições ..................................................................................................................... 14 Conclusão ........................................................................................................................ 14 Referências ...................................................................................................................... 15 Trabalho Laboratorial 5 – Asterisk 1 MIEEC | 2014/2015 Serviços de Comunicações Introdução Este trabalho foi realizado no âmbito da unidade curricular de Serviços de Comunicações da Faculdade de Engenharia da Universidade do Porto e teve como principais objectivos a introdução ao sistema Asterisk, aos IP PBX e às várias funcionalidades fornecidas pelos mesmos. Para tal, procedeu-se à configuração de dois IP PBX baseados em Asterisk, usando a distribuição Linux FreePBX, disponibilizada pela organização de mesmo nome, baseada em CentOS e com o Asterisk pré-instalado bem como outros componentes. O objectivo mínimo a cumprir era o de uma chamada entre duas extensões em PBXs diferentes ser efectuada com sucesso. Para além dessa funcionalidade, foram implementadas muitas outras, incluíndo IVR, mensagens de vídeo, chamadas conferência, entre outras. O objectivo deste relatório é essencialmente mostrar as funcionalidades implementadas e as configurações necessárias para as implementar. São também apresentadas algumas demonstrações do bom funcionamento de certas funcionalidades. No entanto, como isso também já foi feito na demonstração prática, este relatório não se foca em demonstrar extensivamente o bom funcionamento das funcionalidades implementadas. Instalação Para a implementação do Asterisk, optamos por utilizar a distribuição fornecida pelo FreePBX. Criou-se uma máquina virtual (na Oracle VM VirtualBox) em cada um dos nossos computadores pessoais e procedeu-se à instalação da imagem do FreePBX (http://downloads.freepbxdistro.org/ISO/FreePBX-64bit-6.12.65.iso). Após um processo de instalação comum em que é necessário fornecer uma password para o utilizador root o sistema está pronto a funcionar. De forma a evitar o inconveniente de estar dependente dos IP’s fornecidos pelo DHCP e do estado da rede eduroam, configuramos ainda uma rede nossa, com NAT, e definimos os IP’s com que os servidores PBX arrancam no startup script para a interface eth0, localizado em /etc/sysconfig/network-scripts/ifcfg-eth0. Trabalho Laboratorial 5 – Asterisk 2 MIEEC | 2014/2015 Serviços de Comunicações Para tudo funcionar correctamente foi ainda necessário colocar as máquinas virtuais em bridge, nas respectivas definições. Configurações Nesta secção são referidos os passos necessários e algumas das configurações utilizadas para implementar com sucesso os nossos IP PBX e as suas funcionalidades adicionais. Todas estas configurações foram sobretudo realizadas com recurso à GUI fornecida pelo FreePBX no browser. Só algumas vezes é que foi necessário editar directamente os ficheiros de configuração. Criação de extensões A identidade fundamental de um PBX são as extensões que são o equivalente a um número de telefone num PBX convencional. Uma extensão está associada a um utilizador e um utilizador pode possuir várias extensões. Para criar uma nova extensão, na interface gráfica, acede-se a Applications -> Extensions e de seguida selecciona-se “Add Extension”, como se pode ver nas imagens: Figura 1 – Criação de extensões De seguida selecciona-se o tipo de dispositivo, sendo que o “Generic CHAN SIP Device” foi o tipo de dispositivo mais utlizado por nós. No entanto, experimentamos também criar do tipo IAX2 para verificar se tinha alguma vantagem. O desempenho no entanto foi bastante semelhante entre os dois tipos. Trabalho Laboratorial 5 – Asterisk 3 MIEEC | 2014/2015 Serviços de Comunicações Figura 2 – Selecção do tipo de dispositivo Uma extensão tem um grande número de opções de configuração sendo que a maioria delas são opcionais. É no entanto obrigatório seleccionar pelo menos o número da extensão e um “secret”. Será com estes dados que nos conseguiremos registar num softphone para utilizar a extensão criada. Figura 3 – Atribuição de um número a uma extensão Ao criar as extensões fomos também criando utilizadores para associarmos as extensões. No menu das extensões existe a opção de associar uma extensão a um utilizador existente ou criar um novo. Outro campo importante a definir é o nome com que as chamadas de uma extensão aparecem na chamada, que nas nossas configurações fizemos corresponder ao nome do utilizador associado. Voicemail O voicemail é outra funcionalidade que pode ser configurada no menu de criação/edição de uma extensão. Para configurar o voicemail, basta activar a devida opção no menu da extensão. E configurar um código PIN. Além disso, activamos a opção de enviar os próprios voicemails como anexos para um endereço de e-mail. Trabalho Laboratorial 5 – Asterisk 4 MIEEC | 2014/2015 Serviços de Comunicações Figura 4 - Opções de configuração do Voicemail Para depois aceder ao voicemail basta marcar *98, indicar a mailbox (que corresponde ao nº da extensão) e o PIN. Conferências Uma situação de conferência pode-se alcançar de duas formas. Uma é, após se ter uma ligação estabelecida entre duas extensões, um utilizador convida outra extensão para a conversa através do software do seu softphone. Isto depende apenas do softphone utilizado e não requer nenhuma configuração adicional. Outra opção é criar uma extensão especial para uma Conferência em Applications -> Conferences. Para aceder a esta conferência basta marcar o número da extensão como se se tratasse de uma extensão normal. No entanto, todas as extensões que marcarem o nº da conferência poderão comunicar simultaneamente uns com os outros. Podem ser definidas muitas opções adicionais para as conferências como código PIN, limite de utilizadores, administrador, música em espera, gravação da conferência e Trabalho Laboratorial 5 – Asterisk 5 MIEEC | 2014/2015 Serviços de Comunicações muitas outras. São todas bastantes simples de implementar no respectivo menu da interface gráfica e portanto, apesar de estarmos conscientes destas opções, achamos mais produtivo experimentar outras coisas mais complicadas. [1] Videochamadas Para um PBX passar a suportar videochamadas, basta editar as configurações de SIP e IAX. Em Settings -> Asterisk SIP Settings -> Chan SIP o que fizemos foi selecionar as opções “No NAT”; “Public IP” e fazer “Enable” ao Video Support. Adicionalmente, seleccionamos todos os codecs de vídeo para garantir máxima compatibilidade e aumentamos a bitrate máxima. Para o suporte de vídeo também em IAX fez-se algo semelhante nas configurações do IAX. Trunks Criou-se um Trunk para interligar os dois IP PBX implementados. Desta forma é possível às extensões de um PBX comunicarem com as extensões do outro PBX. O Trunk escolhido foi do tipo IAX (Inter-Asterisk eXchange) para maximizar a estabilidade, uma vez que este protocolo foi pensado para ser usado entre dois PBX Asterisk em detrimento do SIP. Figura 5 – Configurações básicas de um Trunk Trabalho Laboratorial 5 – Asterisk 6 MIEEC | 2014/2015 Serviços de Comunicações O Trunk mostrado neste exemplo foi criado no System1 para fazer a ligação com o System2. O System1 tem como número externo o número 20000 e o Sistem2 tem como número externo o 21000. O CallerID escolhido foi por isso o "Num20" para identificar o System1. Figura 6 – Configuração das Outgoing e das Incoming Settings Após preencher as configurações básicas do trunk é necessário configurar as incoming e as outgoing settings. São elas que vão definir, primeiro o sucesso da ligação entre os dois IP PBX e depois a forma como o tráfego é trocado entre eles. As configurações de Peer e User são necessárias. Em Peer foram preenchidas as informações que este sistema (System1) teria de introduzir para se ligar ao System2 (username e password) assim como os detalhes do PBX: IP e tipo. Em context, configura-se a forma como as chamadas que vêm do trunk devem ser tratadas: devem ser tratadas como se fossem chamadas externas, tendo de passar pelas rotas "incoming". Para o que quisemos fazer com o trunk não foi necessário introduzir mais nenhum Trabalho Laboratorial 5 – Asterisk 7 MIEEC | 2014/2015 Serviços de Comunicações parâmetro. Contudo, nestes detalhes é possível introduzir uma grande quantidade de regras para definir o funcionamento do trunk. Em User Details, configuraram-se as informações que o System2 envia para este sistema (System1). Estas informações são aquelas definidas no System2 no campo das Outgoing Settings. Nas Outbound Routes definem-se as rotas de saída. São estas rotas que vão utilizar os trunks criados. No nosso caso criou-se a rota "InterOfficetoSystem2": Figura 7 – Configuração de uma rota de saída A rota foi criada apenas com 20000 como CallerID externo, de acordo com o número exterior escolhido, para que qualquer chamada feita pelo trunk aparecesse como vinda do número externo e não de uma extensão específica. Escolheu-se Music On Hold personalizada. Trabalho Laboratorial 5 – Asterisk 8 MIEEC | 2014/2015 Serviços de Comunicações Figura 8 – Dial Patterns Por fim, é preciso definir os Dial Patterns que vão utilizar a rota criada. No nosso caso, o objectivo era que cada PBX tivesse as suas próprias extensões numeradas independentemente do outro PBX. Para uma extensão de um PBX ligar para uma extensão no outro, teria de marcar antes da extensão um prefixo que identificasse o PBX. Como esta rota serve para estabelecer a ligação ao System2 (com número externo 21000), definiu-se que quando fosse marcado um número da forma 21XXX, a outbound route utilizada seria esta e o trunk utilizado seria o System2, criado anteriormente para ligar ao System2. O 21 foi definido como prefixo, o que significa que pelo trunk apenas vai o número XXX, o prefixo é retirado antes de enviar a chamada pelo trunk. O número é abstraído como XXX porque todas as extensões criadas por nós são de 3 dígitos. [3,4] Filas de espera No nosso caso criaram-se 4 Queues (filas de espera): uma para o departamento de IT, uma para o departamento de Vendas, uma para o departamento de Recursos Humanos e uma para o departamento IAX. A cada uma das filas foram acrescentadas as extensões correspondentes. Neste caso é usado como exemplo a fila do departamento de IT. Trabalho Laboratorial 5 – Asterisk 9 MIEEC | 2014/2015 Serviços de Comunicações As extensões foram acrescentadas à fila da seguinte forma: a fila tem 3 extensões estáticas, que estão sempre na fila (workers) e uma extensão dinâmica, que pode entrar e sair da fila quando assim entender (boss). A lógica deste esquema era que cada departamento teria um call center com 3 trabalhadores para atender o telefone e o gestor do departamento poderia entrar na fila em alturas de maior carga: Figura 9 – Configuração de uma Fila de Espera (Queue) As extensões dinâmicas foram restritas às mencionadas, mas também é possível o contrário e permitir que qualquer pessoa entre na fila, ou à discrição da mesma ou mediante introdução de um PIN. A ring strategy escolhida foi a Ringall: quando fosse recebida uma chamada todas as extensões na fila não ocupada iriam tocar e a primeira a ser atendida ficaria com a chamada, no entanto, existem muitas outras estratégias passíveis de ser configuradas, Trabalho Laboratorial 5 – Asterisk 10 MIEEC | 2014/2015 Serviços de Comunicações incluindo algumas em que as extensões tocam por prioridades ou por ordens prédefinidas. Figura 10 – Ring Strategy escolhida Mensagens de Texto Para o PBX passar a suportar mensagens de texto, foi necessário ir um pouco além das opções fornecidas pela interface gráfica e editar directamente os ficheiros de configuração do PBX. Primeiro, recorrendo à interface gráfica, em Settings -> Asterisk SIP Settings -> Chan SIP -> Other SIP Settings adicionaram-se duas regras: accept_outofcall_message=yes outofcall_message_context=astsms Depois, editou-se o contexto astsms directamente em /etc/asterisk/extensions_custom.conf. Para isso foram-lhe adicionadas as seguintes linhas: [astsms] exten => _.,1,NoOp(SMS receiving dialplan invoked) exten => _.,n,NoOp(To ${MESSAGE(to)}) exten => _.,n,NoOp(From ${MESSAGE(from)}) exten => _.,n,NoOp(Body ${MESSAGE(body)}) exten => _.,n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)}) exten => _.,n,MessageSend(${ACTUALTO},${MESSAGE(from)}) exten => _.,n,NoOp(Send status is ${MESSAGE_SEND_STATUS}) exten => _.,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg) exten => _.,n,Hangup() ; ; Handle failed messaging exten => _.,n(sendfailedmsg),Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y%H:%M:%S)}] Your message to ${EXTEN} has failed. Retry later.") exten => _.,n,Set(ME_1=${CUT(MESSAGE(from),<,2)}) exten => _.,n,Set(ACTUALFROM=${CUT(ME_1,@,1)}) exten => _.,n,MessageSend(${ACTUALFROM},ServiceCenter) exten => _.,n,Hangup() exten => _.,n,Hangup() Após reiniciar o Asterisk com o comando amportal restart, o PBX passou a suportar o envio e recepção de mensagens de texto [2]. Trabalho Laboratorial 5 – Asterisk 11 MIEEC | 2014/2015 Serviços de Comunicações Figura 11 – Demonstração do bom funcionamento das mensagens de texto Interactive Voice Response (IVR) O FreePBX permite, de raiz, a configuração de um IVR (Interactive Voice Response/Introductory voice recording) para desempenhar uma grande variedade de funções. No nosso caso, configurou-se o IVR de forma a possibilitar um atendimento automático aos clientes que ligassem de fora da empresa (fora do PBX) para o número externo desta. Existem várias opções para a voz usada para o atendimento automático: pode-se usar os clips de voz que o FreePBX traz de raiz; pode-se configurar um motor de síntese de voz stand-alone para ser utilizado; ou pode-se gravar clips de voz que podem posteriormente ser carregados. Apenas é necessário referir que os clipes de voz têm de estar no formato WAV, com codificação PCM e com a bitrate de 8000Hz. No nosso caso gravou-se um curto clip de voz para ser usado com o IVR. O mesmo pedia para que fossem marcados 5 números que encaminhariam o utilizador para 2 extensões ou para 3 filas: Trabalho Laboratorial 5 – Asterisk 12 MIEEC | 2014/2015 Serviços de Comunicações Figura 12 – Entradas do IVR para reencaminhar os números marcados para as respectivas extensões Após o IVR estar configurado, é necessário configurar ou uma extensão específica ou uma incoming route para que se conseguisse telefonar para o mesmo. No nosso caso criou-se uma rota com o número Direct Inward Dial 000, para que o número introduzido quando se ligasse do System2 fosse o CallerID escolhido para a rota, ou seja, 20000. Ao passar pelo trunk no System2 o “20” seria removido e apenas o número “000” chega a este sistema. Figura 12 – Incoming Route Por fim, definiu-se o destino desta rota de entrada: Figura 13 – Destino da extensão 000 Trabalho Laboratorial 5 – Asterisk 13 MIEEC | 2014/2015 Serviços de Comunicações Restrições Por fim, experimentamos configurar restrições. Para isso, restringimos a extensão 004 do PBX 21000 a chamadas internas à empresa. Isto foi feito bloqueando o acesso desta extensão ao trunk que interligava os dois IP PBX. Esta configuração foi feita directamente nos ficheiros de configuração, tendo para isso adicionado as seguintes linhas ao ficheiro /etc/asterisk/extensions_custom.conf: [macro-dialout-trunk-predial-hook] exten => s,1,goto(${AMPUSER},1) exten => 004,1,Set(DIAL_TRUNK=OUT_2) Esta não será a melhor solução para restrições por é preciso configurar trunk a trunk e extensão a extensão e não dá a mensagem de erros mais adequada, retorna a mensagem 503 unavailable que às vezes é retornada quando há falhas na ligação aos PBX. No entanto bloqueou com sucesso o acesso da extensão 004 ao trunk OUT_2 que assegurava a ligação ao System1, o que era o objectivo principal. [5] Conclusão Com este relatório foi possível demonstrar o bom funcionamento dos sistemas Asterisk implementados, bem como as configurações que foram utilizadas para obter não só os resultados apresentados neste trabalho, como também os resultados apreentados na demonstração prática. Os resultados obtidos são, portanto, um bom indicador de que os conhecimentos práticos relativos ao Asterisk e ao FreePBX, bem como telefonia IP foram bem apreendidos. Tentamos também apresentar detalhadamente os passos seguidos para obter os resultados e funcionalidades apresentados, de forma a que este relatório forneça também uma espécie de "manual" que pode ser seguido para reproduzir os mesmos. Trabalho Laboratorial 5 – Asterisk 14 MIEEC | 2014/2015 Serviços de Comunicações Referências [1] http://wiki.freepbx.org/display/F2/Conference+Module+User+Guide [2] http://highsecurity.blogspot.pt/2012/03/asterisk-10-110-sms-messaging-or- sip.html [3] https://sysadminman.net/blog/2013/extension-to-extension-calling-between-2- freepbx-systems-5354 [4] http://wiki.freepbx.org/pages/viewpage.action?pageId=4161588 [5] http://moshe.im/blog/2009/10/09/freepbx-restrict-an-extension-to-a-specific-trunk/~ [6] http://www.asterisk.org/ [7] https://wiki.asterisk.org/ [8] http://www.ozekiphone.com/product-information-340.html Trabalho Laboratorial 5 – Asterisk 15