Não diga alô, diga Asterisk! Apostila AsteriskBrasil.org CAPA: Vários telefones fazendo um papel de parede e no meio um asterisco vazado em branco ou o inverso.

Ãndice de Capítulos

1 Sou alienígena, fale sobre Telefonia....................................................................................... 4 1.1.Breve história da telefonia...................................................................................................... 4 1.2.A evolução e as novas tendências........................................................................................ 6 1.1.1 Telefonia Analógica.............................................................................................................. 7 1.1.2 Telefonia Digital..................................................................................................................... 7 1.1.3 Telefonia IP............................................................................................................................. 7 1.1.4 Telefonia IP x Voz sobre IP.................................................................................................. 8 1.1.5 Telefonia Móvel...................................................................................................................... 8 2 Conhecendo o Asterisk.............................................................................................................. 9 2.1 Quem? Quando? Porque? Como?....................................................................................... 9 2.1.1 O que é o Asterisk?............................................................................................................... 9 2.1.2 Entendendo o desenvolvimento do Asterisk................................................................... 9 2.1.3 Participe também!............................................................................................................... 10 2.2 Arquitetura tecnológica do Asterisk.................................................................................... 10 2.2.1 Diretórios e arquivos.......................................................................................................... 10 2.2.2 O servidor............................................................................................................................. 12 2.2.3 Sopa de letrinhas... Codecs e Protocolos..................................................................... 12 2.2.3.1 Telefonia IP....................................................................................................................... 12 2.2.3.2 Telefonia Digital............................................................................................................... 13 2.2.3.3 Telefonia Analógica......................................................................................................... 13 2.2.3.4 CODECs............................................................................................................................ 13 2.2.4 Os Canais(channels)......................................................................................................... 13 2.2.4.1 Canal SIP (chan_sip.so)................................................................................................ 13 2.2.4.2 Canal IAX (chan_iax2.so)............................................................................................... 17 2.2.4.3 Canal Local (chan_local.so)......................................................................................... 18 2.2.4.4 Canal ZAP (chan_zap.so )............................................................................................. 18 2.2.4.5 Canal Unicall (chan_unicall.so)................................................................................... 18 2.2.5 Equipamentos periféricos................................................................................................. 19 2.2.5.1 Placas digitais e analógicas......................................................................................... 19 2.2.5.2 Telefones.......................................................................................................................... 20 2.2.5.3 ATAs................................................................................................................................... 20 2.2.5.4 Softphones........................................................................................................................ 21 2.2.5.5 Outros................................................................................................................................ 21 2.3 Documentação adicional e Downloads............................................................................ 21 3 Configurações básicas do Asterisk....................................................................................... 21 3.1 Inserindo os padrões de telefonia Brasileiro................................................................... 22 3.2 Adicionando a linguagem pt_BR ao Asterisk................................................................... 22 3.3 Criando ramais....................................................................................................................... 23 3.4 Criando troncos...................................................................................................................... 23 3.5 Realtime................................................................................................................................... 23 4 Mergulhando no Dialplan......................................................................................................... 24 4.1 Contextos(context).................................................................................................................. 25 4.1.1 Contexto [general]............................................................................................................... 25 4.1.2 Contexto [globals]............................................................................................................... 26 4.1.3 Parâmetro include.............................................................................................................. 27 4.1.4 Parâmetros específicos de um contexto........................................................................ 28 4.2 Extensões(exten).................................................................................................................... 28 4.2.1 Extensões especiais.......................................................................................................... 29 4.2.2 Padrões de discagem ...................................................................................................... 29 4.3 Prioridades.............................................................................................................................. 29 4.3.1 Prioridade n+101................................................................................................................ 30 4.3.2 Prioridade next..................................................................................................................... 30 4.3.3 Prioridade same................................................................................................................. 30 4.3.4 Sinais numéricos e prioridades...................................................................................... 31 4.4 Aplicações............................................................................................................................... 31 4.4.1 Aplicação Dial – Onde tudo começa............................................................................... 32 4.4.2 Aplicação Set....................................................................................................................... 33 4.4.2.1 Declaração de variáveis................................................................................................. 33 4.4.2.2 Execução de funções...................................................................................................... 34 4.4.2.3 AstDB................................................................................................................................. 35 4.4.3 Goto, GotoIf, GotoIfTime..................................................................................................... 36 4.4.4 Aplicação Macro.................................................................................................................. 36 4.4.5 Aplicação VoiceMail – O famoso Correio de Voz.......................................................... 36 4.4.5.1 Armazenamento de mensagens.................................................................................. 37 4.4.5.2 Configuração das caixas de correio de voz................................................................ 38 4.4.5.3 Notas importantes sobre a aplicação VoiceMail().................................................... 39 4.4.5.4 Aplicações complementares ao Correio de Voz....................................................... 39 4.4.6 MeetMe.................................................................................................................................. 42 4.4.7 Queue.................................................................................................................................... 42 4.5 AGI............................................................................................................................................. 49 4.6 Operadores............................................................................................................................. 49 4.6.1 Operadores Booleanos..................................................................................................... 49 4.6.2 Operadores Matemáticos.................................................................................................. 49 4.7 Exemplos completos de dialplan....................................................................................... 49 5 Gerenciando o Asterisk............................................................................................................ 49 5.1 Gerenciamento de ramais................................................................................................... 49 5.2 Gerenciamento de troncos................................................................................................... 50 5.3 CDR.......................................................................................................................................... 50 5.4 Troubleshooting..................................................................................................................... 50 5.4.1 Logging................................................................................................................................. 50 5.4.2 Eco......................................................................................................................................... 50 5.4.3 Picotamento......................................................................................................................... 50 5.4.4 Delay...................................................................................................................................... 50 5.4.5 Códigos SIP......................................................................................................................... 50 5.5 Backup...................................................................................................................................... 53 5.6 Tunning.................................................................................................................................... 53 5.7 Segurança............................................................................................................................... 53 5.8 Sistemas distribuídos e alta disponibilidade................................................................... 53 6 Dicas e Truques........................................................................................................................ 53 I.Ãndice com todas as aplicações disponíveis na série 1.2 do Asterisk............................. 53 II.Ãndice com todas as variáveis internas do Asterisk............................................................. 53 III.Siglas e Dicionário.................................................................................................................... 53

1 Sou alienígena, fale sobre Telefonia. Entende-se por telefonia, toda e qualquer forma de transmitir voz humana, de um ponto a outro com a utilização de instrumentos amplificadores.

Ou segundo o Wikipedia:

INSERIR DEFIFINICAO DO WIKIPEDIA

Impossível imaginar a evolução de toda a comunidade sem mencionar os devidos créditos ao poder, que nós ser humanos desenvolvemos de desejar comunicação a todo custo a toda hora e de várias formas.

Ainda somos e seremos escravos da transmissão e recepção de informação, é fato.

1.1. Breve história da telefonia X Alexander Graham Bell Elisha Gray

Nos idos de 1870, dois inventores, Elisha Gray e Alexander Graham Bell, ambos, indepedentemente projetaram um euipamento que poderia transmitir a voz eletronicamente, o famoso telefone. Ambos correram pra patentear suas soluções, porém Alexander Graham Bell ganhou a corrida por questões de algumas horas. Apartir deste momento os dois travaram uma batalha famosa sobre a invenção do telefone na qual Bell se saiu campeão.

Alexander Graham Bell nasceu em 1847 em Edinburgh, Escócia. Ele mudou-se para Ontario, e então para os Estados Unidos se estabelecendo em Boston antes de iniciar sua carreira como inventor. Ao longo de sua vida, Bell dedicou-se à educação de pessoas surdas. Este interesse o levou a inventar o microfone e, em 1876, a sua “maquina elétrica de voz(electrical speech machine)†que hoje nós chamamos de telefone. As notícias de seu invento rapidamente se espalharam pelo país e até na Europa. Em 1878, Bell realizou a primeira chamada em New Haven, Connecticut. Em 1884, chamadas de longa distância foram feitas entre Boston e Nova York.

Bell imaginou grandes possibilidades de uso para o seu invento, porém ele nunca imaginou que sua máquina de transmissão elétrica de voz pudesse também transmitir vídeo um dia. Esse dia chegou, e desde a sua morte em 1922 a indústria de telecomunicações tem vivenciado uma incrível revolução. Hoje pessoas que não houvem podem comunicar-se através de telefones especiais. Fibras óticas estão melhorando a qualidade e velocidade na transmissão de dados. Comunicações sem fio são capazes de deixa-lo informado e presente mesmo em locais remotos, enfim iremos abpradr um pouco sobre todos os benefícios que a máquina falante de Bell alavancou a toda a comunidade mundial.

1.2. A evolução e as novas tendências A busca incansável por reduções de custo, qualidade, versatilidade, independência, facilidade e demais adjetivos tornaram possível a evolução sistemática dos meios de comunicação. A Telefonia moderna é um dos produtos deste crescimento. É possível estar em dois lugares ao mesmo tempo. Atualmente falar ao telefone é algo que se faz em todo momento a toda hora e em qualquer lugar. Esteja você no trem, no ônibus, no metrô, no carro, no avião ou em lugares menos móveis como a sua casa, apartamento, escritório, fábrica, hotel ou motel, definitivamente estamos imersos neste mundo de circuitos e mais circuitos. Habilitar uma credencial neste mundo é tão simples quanto o seu uso, algo que em tempos remotos foi um investimento com visível participação na renda familiar, hoje é mais um adereço da moda e participa ativamente na vida de crianças. LINHA DO TEMPO: FOTOS DE VÃRIOS TELEFONES: DO MAIS ANTIGO PRO MAIS MODERNO Cada país possui o seu órgão que regulamenta os meios de comunicação, em alguns lugares existem órgãos específicos para o tema Telefonia. No Brasil este órgão é conhecido por ANATEL[1].

1.1.1 Telefonia Analógica

Método original inventando por diversos inventores e que encontrou seu ápice de desenvolvimento e utilização, ou melhor, de massificação durante os anos 50. Utiliza-se como meio de comunicação principalente os cabos de cobre, os pares de cobre que ainda hoje reinam nos quadros de distribuição de empresas de telefonia. 1.1.2 Telefonia Digital

Telefonia multiplexada, sinais digitais, processador de sinais digitais(DSP) entram em cena para transformar este sinal analógico, conhecido por voz, em um sinal digital. O sinal digital se distingue por identificadores individuais, trocados no momento que antecede o streaming de voz, a chamada fase de sinalização. Estes identificadores individuais permitem o convívio de diversos outros sinais ao mesmo instante. Em suma isso é o que chamamos de multiplexação. Várias chamadas acontecendo ao mesmo tempo e pelo mesmo meio físico.

Na Telefonia Digital comumente conhecida utiliza-se o transporte de voz sem compactação, assim como ela é, somente digitalizada. Enviando 64Kb por segundo com 8khz e 8 bits(...detalhar khz e bit...).

1.1.3 Telefonia IP

Telefonia IP é o conceito mais atual para utilização de comunicação por voz.. Como toda e qualquer tecnologia teve seus momentos de testes ferrenhos e provas de bala e fogo. Em determinado momento chegou-se a algo que se poderia dizer como: utilizável. Com custos ainda proibitivos para a sua massificação, a Telefonia IP criou-se em meio a grandes implementações de transporte de áudio.

Backbones de grandes empresas de telefonia já cruzavam o Atlântico lançando cabos e mais cabos por onde trafegariam enormes quantias de minutos de conversas, reuniões e bate-papos, todas elas utilizando o protocolo IP de comnicação.

O protocolo IP[2] chegou para trazer mais um conceito dentro dos meios de comunicação. Sua fácil implementação e sua riqueza em controles e documentação virou uma página importante na história das telecomunicações. Um dia foi o que chamavam de ARPANET[3], uma rede de dessentralização de informação criada como um artifício de estratégia militar pelo exército americano. A INTERNET hoje é o ponto de encontro de comunidades virtuais,

Os recursos de compactação de pacotes são extremamente necessários para se transportar voz em uma rede IP aberta e diversificada como a INTERNET. Hoje utiliza-se em quase todas as implementações de Telefonia os algoritmos de compactação de áudio.

Os chamados CODECs são parte indispensável em uma implementação de voz sobre IP. Os algoritmos de CODificação e DECodificação utilizam-se de funções matemáticas para transformar um pacote de voz com 64Kb para um pacote de, por exemplo, 8Kb. Cada algoritmo desse tem um nome/apelido. Alguns deles são G729a, µlaw, alaw, GSM, iLBC dentre outros[4].

1.1.4 Telefonia IP x Voz sobre IP

Telefonia IP e Voz Sobre IP, ou VoIP, são duas distintas classes na escala do transporte de voz.

Telefonia IP envolve todos os serviços e meios de utilização de voz empacotada. Correio de voz, gravação de chamadas, transferências, conferências todas elas ocorrendo no mesmo mundo IP, o uso destes infinitos recursos é caracterizado como Telefonia IP.

Voz sobre IP ou VoIP é ato de se transferir voz sobre um canal IP de comunicação em. Pode ser representado como sendo o combustível ou o meio de transporte da Telefonia IP.

1.1.5 Telefonia Móvel

Existem diversas formas de se comunicar de forma dinâmica, mas nenhuma delas se compara ao poder da mobilidade. O que em certa época era apenas um dos recursos disponíveis em aeronaves e foguetes hoje econtra-se em todos os lares do mundo, na maioria deles pelo menos.

A Telefonia Móvel tem sua masssificação claramente denotada pela disseminação dos famosos “telefones celularesâ€. Tecnologias como TDMA, CDMA, GSM tomaram conta da mídia e ainda hojem permanecem fortes em um crescente segmento das telecomunicações.

A Telefonia Móvel tem se tornado uma parceira ideal para o crescimento da Telefonia IP. Já existem diversos produtos IP encoporando tecnologias móveis, porém este ainda é um meio menos popular de transporte de voz.

2 Conhecendo o Asterisk O Asterisk é o canivete suiço das telecomunicações. Hoje ele faz muito mais que qualquer outra plataforma de telefonia(vídeo e imagem definitivamente também). O limite é sua criatividade, lembre-se disto sempre. 2.1 Quem? Quando? Porque? Como? O Asterisk foi criado em 1999 por Mark Spencer, fundador da Linux Support Services, uma empresa que inicialmente prestava serviços de consultoria e suporte em platafromas GNU/Linux(para não ferir alguns xiitas...). Em um determinado momento Mark encontrou-se em frente a um projeto de telefonia: A necessidade de solucionar um problema em seus atendimentos de chamados telefônicos(Help Desk). Hoje aquele seu projeto é considerado como uma das próximas inovações do mundo Open Source após o surgimento do Linux. Batizado como Asterisk, um caractere coringa em ambientes UNIX like, este software escrito originialmente em linguagem C(VERIFICAR SE É SOMENTE C) é parte do vasto território dos programas de código aberto disponíveis ao redor do globo. 2.1.1 O que é o Asterisk?

O Asterisk é um software de PBX, ou seja, um programa de computador que possui todos os recursos de uma Central Telefônica e faz a conexão de redes privadas de telefonia com a rede pública de telefonia. Assim como em qualquer 2.1.2 Entendendo o desenvolvimento do Asterisk

O estrondoso sucesso do Asterisk teve seu início com o lançamento da primeira versão estável do sistema, o Asterisk 1.0. Atualmente ele encontra-se na versão Asterisk 1.4. Seguindo os mesmos moldes de versionamento do Kernel Linux, o Asterisk possui um versão em desenvolvimento que tem o seu último dígito identificador um número ímpar, por exemplo, a versão atual em desenvolvimento é a versão Asterisk 1.5. Em breve, quando ela estiver estabilizada e devidamente testada, esta versão irá tornar-se Asterisk 1.6 e será divulgada comom última versão estável do sistema. Cada série(1.0, 1.2, 1.4, etc.) Tem seu prórpio mantenedor, ou seja, cada versão lançada tem um coordenador, que irá controlar o sistema após o seu lançamento. Cada nova versão lançada, automaticamente encerra o desenvolvimento de uma versão antiga. Por exemplo, no lançamento da versão Asterisk 1.6, o Asterisk 1.4 será descontinuado. Claro que correções de segurança e bugs ainda serão implementados, porém novas funcionalidades e a evolução do sistema será todo focado para a versÃo mais recente. O Asterisk utiliza o software SVN para versionamento de seu código e a ferramenta Mantis para registros de bugs e requisição de novas funcionalidades. 2.1.3 Participe também!

Para participar no desenvolvimento do Asterisk, você pode contribuir de diversas formas. Documentando o projeto, que envolve manuais, howtos, documentação de código entre outros. Projetos a para continente, país para pais e até de estado para estado. Para ser um desenvolvedor você precisa estar muito próximo do código do sistema e ter uma boa noção de programação e desejável conhecimento dos protocolos e padrões de telefonia. Como o Asterisk é distribuído sob a GPL 2.0, basta escrever suas linhas de código e reportar ao líder do projeto(o mantenedor do código da respectiva versão), ele irá determinar se o seu código irá ou não fazer parte do sistema. É claro que antes de se aventurar é importante e determinante que você participe da lista de emails dos desenvolvedores[5]. 2.2 Arquitetura tecnológica do Asterisk Basta entender um pouco sobre as características do Asterisk para começar a evoluir seus conhecimentos neste software. Este capítulo irá trazer o básico para iniciar uma imersão mais profunda neste sistema. INSERIR IMAGEM DESCRITIVA DO ASTERISK 2.2.1 Diretórios e arquivos

O Asterisk segue o modelo LSB[6] de disposição de diretórios e arquivos. Veja abaixo a espinha dorsal do sistema: /etc/asterisk Arquivos de configuração. Você irá conhecê-los com mais detalhes no decorrer deste livro ou gerando os arquivos de exemplo do sistema. Ao final da compilação do Asterisk, digite “make samplesâ€, para gerar estes arquivos. Exemplo de um arquivo de configuração do Asterisk: /etc/asterisk/sip.conf [101] ;contexto type=peers ;parâmetro de configuração context=ramais ;parâmetro de configuração secret=senha ;parâmetro de configuração language=pt_BR ;parâmetro de configuração disallow=all ;parâmetro de configuração allow=g729,alaw ;parâmetro de configuração mailbox=101@correio ;parâmetro de configuração ou /etc/asterisk/extensions.conf [ramais] ;contexto include ⇒ ramais.conf ;incluir conteúdo de outro arquivo exten ⇒ 101,1,Dial(SIP/101,10) ;extensão com prioridade 1 exten ⇒ 101,2,VoiceMail(u101@correio);extensão com proridade 2 Todos os arquivos seguem a notação acima com contextos e contéudos(parâmetros, includes e extensões). Os conteúdos variam de arquivo para arquivo e alguns contextos possuem comportamento expecial como veremos nos próximos capítulos deste livro. /var/lib/asterisk/sounds Arquivos de som do sistema. Mensagens e sons utilizados nas diversas aplicações do Asterisk ficam armazendas neste diretório. Caso você esteja usando o Asterisk no Brasil, você irá precisar configurar o sistema de acordo com a linguagem Português do Brasil, utilizando o código de linguagem pt_BR onde for requisitado. Alguns subdiretórios possuem arquivos de áudio específicos. /var/lib/asterisk/sounds/digits /var/lib/asterisk/sounds/letters /var/lib/asterisk/sounds/phonetic /var/lib/asterisk/agi-bin Diretório que contém as aplicações AGI[7] utilizadas pelo Asterisk. São pequenos programas auxiliares que podem ajudar o Asterisk em momentos de tomada de decisões no fluxo de uma chamada ou trazendo mais recursos e aplicações no formato “pluginâ€. /var/spool/asterisk Local para onde as chamadas são enviadas antes de chegar ao seu destino final. Aqui as chamadas são enfileiradas e saem uma a uma aos seus destinos. É aqui que também ficam as caixas postais dos ramais do sistema. /usr/lib/asterisk/modules O código do Asterisk é todo moduarizado, ou seja, você pode unir peça a peça para moldar o sistema de acordo com suas necessidades. Os arquivos neste diretório tem aseguinte nomenclatura: tipo_nome.so (Ex.: channel_zap.so) Alguns módulos bastante comuns em um sistema Asterisk são: format_g729.so Suporte ao codec g729 chan_sip.so Suporte ao protocolo SIP de comunicação IP app_voicemail.so Módulo que controla o correio de voz app_meetme.so Módulo que gerencia as conferências /var/log/asterisk Arquivos de log so sistema. Neste diretório você encontra os arquivos que contém os “rastros†de atividade do Asterisk. Você pode possuir diferentes arquivos cada qual com um nível de detelhamento ou tipo de mensagem. O arquivo que controla o seu conteúdo é o /etc/asterisk/logger.conf[8]. 2.2.2 O servidor

O Asterisk possui versões que podem ser ujtilizadas em FreeBSD, MacOSX, Linux dentre outros menos expressivos sistemas operacionais. A versão mais utilizada e melhor documentada e testada é a versão para o sistema operacional Linux. O hardware indicado para utilização do Asterisk varia de acordo com a sua utilização. Você deve dimensionar o seu sistema baseado na quantidade de ramais/troncos e/ou nas aplicações a serem utilizadas em sua implementação. Exemplo de maquina para SOHO Exemplo de maquina para Empresa Media Exemplo de maquina para Empresa Grande 2.2.3 Sopa de letrinhas... Codecs e Protocolos

Os protocolos de comunicação das mais variadas implementações de comunicação bem como os aclgoritmos de codificação e decodificação serão apresentados neste item. Estaremos abordando aqui somente aqueles suportados pelo Asterisk. 2.2.3.1 Telefonia IP

- IP (Internet Protocol) O protocolo base da rede Internet e de redes privadas. - TCP (Transport Control Protocol) Protocolo de transporte de dados em redes IP com controle de entrega de pacotes. - UDP (...) Protocolo de transporte de dados em redes IP sem controle de entrega de pacotes. - SIP (Session Initiation Protocol) Protocolo de transporte de pacotes de voz em redes de dados IP. O SIP é o protocolo mais utilizado nas implementações atuais de transporte de voz. Seu caráter aberto e fácil implementação tornaram este protocolo um padrão presente em todos(ou na grande maioria) os produtos e serviços de telefonia IP. - H323 (...) O H323 .... 2.2.3.2 Telefonia Digital

- MFCR2 (...) Uma variante brasileira deste protocolo é MFCR2DBR - PRI Padrão de sinalização E1 utilizado nos países norte americanos. 2.2.3.3 Telefonia Analógica

- FXS (Foreign eXchange Station) Sinalização enviada para telefones analógicos. - FXO (Foreign eXchange Office) Sinalização enviada para troncos analógicos 2.2.3.4 CODECs

- G729 - G723 - G726 - iLBC - Speex 2.2.4 Os Canais(channels)

Os canais são os responsáveis pela comunicação entre as aplicações, ramais e troncos do Asterisk. Todos os recursos que envolvem chamadas, são disponibilizados por meios de canais de comunicação, os “channels†do Asterisk. IMAGEM COM CANAIS E O ASTERISK O Asterisk possui diversos tipos de canais. Os tipos de canais possíveis são: 2.2.4.1 Canal SIP (chan_sip.so)

Este canal é reponsável pela comunicação SIP entre o Asterisk e ramais ou troncos que falem este protocolo. O canal SIP é configurado através do arquivo /etc/asterisk/sip.conf Os parâmetros de configuração SIP para o contexto [general] são: Parâmetros Valores Descrição disallow all|lista de codecs disallow=all Desabilita todos os codecs. allow all|lista de codecs Habilita todos(all) ou os codecs especificados e espaçados por vírgulas por ordem de preferência. Utilizar disallow=all para especificar alguns. allowexternalinvites yes|no Permite ou não o INVITE e REFER para domínios não locais. Deafult é yes. allowguest yes|no Permite ou não chamadas não conhecidas(guest). Default é yes autocreatepeer yes|no Se estiver como yes irá permitir que qualquer um se autentique ccomo peer(sem checagem de credenciais). Interessante em conjunto com o SER. Default é no. autodomain yes|no Habilita ou não a abilidade do Asterisk inserir hosts locais ou Ips locais a lista de domínios. Default é no. bindaddr número ip Endereço IP onde o Asterisk irá escutar as requisições SIP. Default é 0.0.0.0. bindport número inteiro Porta UDP onde o Asterisk irá escutar as requisições SIP. Default é 5060. callerid nome Callerid padrão caso nenhum seja especifdicado. O default é asterisk. canreinvite update|yes|no Permite que A e B trafeguem mídia de voz diretamente sem utilziar o Asterisk. Default é yes. checkmwi tempo em segundos Tempo em segundos do intervalo de checagem das caixas de correio. Default é 10. compactheaders yes|no Se o Asterisk enviará ou não cabeçalhos compacados(aabreviados) nas mensagens SIP. Default é no. context nome O contexto default. Usado quando um endpoint não possui esta informaçcão. defaultexpirey tempo em segundos O tempo em segundos para registros SIP(entrante/saintes). Default é 120. dtmfmode inband|info|rfc2833 Modo DTMF. Default é rfc2833. domain nome Lista de domínios, separados por vírgula, ao qual o Asterisk irá ser responsável. dumphistory yes|no Habilita o suporte de gerar um dump de conversas SIP no LOG_DEBUG. Default é no. extermip número ip ou nome Endreço IP ou nome do host que será colocado em mensagens SIP se o Asterisk estiver atrás de NAT. Se for usado o nome de host, ele será verificado somente uma vez. Usar externhost se o nome estiver associado a um IP dinâmico. externhost nome Nome do host que será colocado em mensagens SIP se o Asterisk estiver atrás de NAT. extermrefresh tempo em segundos Tempo em segundos que será feito um refresh do DNS do nome especificado em externhost. Default é 10. ignoreregexpire yes|no Indica quando usar a informação de Contact de um peer se esta informação estiver ociosa por ter alcançado seu tempo máximo de expiração.. language nome Idioma padrão para as aplicações Playback() e Background() localnet endereço ip/ mascara de rede Endereço de rede local e mascara. fromdomain nome de domínio Altera o campo From: do cabeçalho SIP quando o Asterisk é um UA(User Agent). insecure very|yes|no|invite|port Como tratar conexões SIP com peers. Default é no(autentica todas as conexões). maxexpirey tempo em segundos Tempo máximo, em segundos, que será aguardado para registros SIP. Default é 3600. musicclass nome Uma das classes de Música em Espera disponível no sistema(musiconhold.conf) musiconhlod nome Mesmo que musicclass nat yes|no|never|route Default é no. Use yes caso o seu UA esteja atrás de NAT. notifymimetype mediatype/subtype Permite sobrepor o tipo de midia[9] no MWI NOTIFY usado no correio de voz. notifyringing yes|no NOTIFY no momento de ringing. Default é yes. outboundproxy número ip ou dns srv Proxy para envio de chamadas saintes. Não especificar o prefixo _sip._udp em caso de DNS SRV. outboundproxyport número inteiro Porta UDP do proxy de chamdas saintes. pedantic yes|no Permite a checagem pedantic de callerid, cabeçalhos multiline SIP e cabeçalhos URI codificados. port número inteiro Porta SIP do UA. Não é a mesma coisa do que bindport. progreeinband never|no|yes Se é necessário gerar ring inband SEMPRE. Default é never/ promiscredir yes|no Permite o suporte a Redirects 302. Irá redirecionar todos a extensão local presente no campo Contact ao invés da extensão de destino. qualify yes|no|tempo em milisegundos Checa se o cliente(UA) está alcançavel. Se yes irá checar a cada 2000ms. Default é no. realm nome Alterar o realm padrão(asterisk). recordhistory yes|no Habilita o logging do histórico de transações SIP. regcontext nome Contexto padrão para utilizar nas respostas SIP REGISTERs dos servidores SIP. register ⇒ <username>:<password>:[authid]@<sip client/peer id in sip.conf>/<contact> Para realizar o registro SIP em outro server. registerattempts número inteiro Número de tentativas de registro antes de desistir de realizar o registro. Default é 0. registertimeout tempo em segundos Tempo para esperar para caracaterizar um timeout de registro. Default é 0(sem limite). relaxdtmf yes|no Relaxar a detecção DMTF. rtautoclear yes|no|tempo em segundos Auto expirar contas criadas no realtime. Default é 120. rtcachefriends yes|no Fazer cache de contas SIP na lista interna do Asterisk como é feito usando os arquivos de configuração ao invés de realtime. Default é no. rtpholdtimeout tempo em segundos Tempo, em segundos, de timeout de uma chamada em hold antes de derruba-la. Default é 0(ilimitado). rtpkeepalive tempo em segundos Tempo em segundos até que seja enmviado um RTP Keepalive em caso de inatividaade de um canal de voz. rtptimeout tempo em segundos Tempo em segundos até caracterizar a chamada como inativa. Default é 0(sem RTP timeout). rtupdate yes|no Envia updates de registry ao banco de dados do Asterisk quando estiver usando realtime. sendrpid yes|no Se um Remote-Party_ID do cabeçalho SIP devará ser enviado. Default é no. sipdebug yes|no Modo debug no início do módulo SIP. srvlookup yes|no Habilitar consultas DNS SRV. Default é no. tos valor qos Parametro QoS parra saída de chamdas. Valores numéricos pode ser usados como tos=184 trustrpid yes|no Se o Remote-Party-ID do cabeçalho SIP deverá ser confiável. useclientcode yes|no useregphone yes|no Para usar user=phone ao URI. useragent nome Customizar o cabeçalho User-Agent do protocolo SIP. Alterar a identificação do Asterisk. Default é asterisk. videosupport yes|no Para usar o suporte a vídeo. Default é no. vmexten nome Extenssão do dialplan para acessar o correio de voz. Default é asterisk. Parâmetros específicos para type=peer e type=user. Parâmetros Valores Descrição type host disallow allow allowexternalinvites Yes|no Permite ou não o INVITE e REFER para domínios não locais. Deafult é yes. allowguest Yes|no Permite ou não chamadas não conhecidas(guest). Default é yes 2.2.4.2 Canal IAX (chan_iax2.so)

Este canal é reponsável pela comunicação SIP entre o Asterisk e ramais ou troncos que falem este protocolo. O canal SIP é configurado através do arquivo /etc/asterisk/sip.conf Os parâmetros de configuração SIP são: Parâmetros Descrição Type host=0.0.0.0 Host permitido para acesso ao sistema. peer/user disallow=all peer/user allow=g729,ulaw peer friend 2.2.4.3 Canal Local (chan_local.so)

Canais do tipo “Local†são utilizados para acessar recursos locais do Asterisk. Você pode por exemplo chamar um ramal SIP utilizando a seguinte notação: Local/3333 ao invés de SIP/333. 2.2.4.4 Canal ZAP (chan_zap.so )

Os canais ZAP são utilizados para realizar a comunicação do Asterisk com o mundo da telefonia Digital e Analógica. É através dele que configuraremos os troncos E1(PRI), por exemplo, com uma operadora de telefonia. Ou através dele disponibilizamos ramais analógicos conectados diretamente ao servidor Asterisk. Para a utilização deste tipo de canal é necessário a utilização de placas(geralmente com barramento PCI) conectadas ao servidor Asterisk. Vamos falar um pouco mais sobre placas deste tipo mais adiante. O arquivo que configura este canal é o /etc/asterisk/zapata.conf. Veja na tabela abaixo os parâmetros disponíveis neste arquivo: Parâmetros Descrição language=pt_BR group=0 channels=1-4 2.2.4.5 Canal Unicall[10] (chan_unicall.so)

O canal Unicall é disponibilizado em um projeto a parte do Asterisk. É necessário aplicar um patch para disponibilizar este tipo de canal a um servidor Asterisk.

O responsável pelo desenvolvimento deste software é Steve Underwood. Steve utiliza o apelido “coppice†e pode ser encontrado madrugada adentro nos canais IRC e nas listas de discussão do projeto Asterisk.

O Canal Unicall tem enorme importância em território brasileiro, pois é ele o responsável pelo suporte ao protocolo de sinalização de E1 CAS MFCR2DBR.

O arquivo que configura este módulo é o /etc/asterisk/unicall.conf. Os parâmetros utilizados neste arquivo se assemelham muito com os parâmteros utilizado no arquivo de configuração de canais ZAP. Veja na tabela abaixo ps parâmetros disponíveis neste arquivo:

Parâmetros Descrição language=pt_BR group=0 channels=1-4 2.2.5 Equipamentos periféricos

O Asterisk, como qualquer outro ambiente de telefonia, possui apetrechos tecnológicos para disponibilizar um ambiente completo de comunicação. Telefones, placas, gateways, enfim, é necessário alguns acessórios para que se faça o uso completo do Asterisk.

Neste capítulo iremos conhecer alguns destes acessórios.

2.2.5.1 Placas digitais e analógicas

Para conectar o Asterisk às redes de telefonia convencionais(chamaremos de PSTN[11] estas redes no decorrer deste livro).

Existem diversos fabricantes de placas analógicas e digitais que possuem suporte no Asterisk. As mais conhecidas são as placas Digium, empresa de Mark Spencer, criador do Asterisk. Abaixo vamos listar alguns fabricantes e seus produtos.

Digium (LOGO)

TE110P (FOTO DA PLACA)

LISTAR TODAS AS PLACAS

Sangoma

LISTAR TODAS AS PLACAS

Voicetronix

LISTAR TODAS AS PLACAS

Go Varion

LISTAR TODAS AS PLACAS

Digivoice

LISTAR TODAS AS PLACAS

Khomp

LISTAR TODAS AS PLACAS

Pika

LISTAR TODAS AS PLACAS

O projeto Zapata Telephony[12] disponibiliza sob a licença GPL um projeto para fabricação de alguma destas placas, ou seja, no Asterisk até hardware utilizado pode ter especificação aberta.

A maioria das placas acima são basedas no projeto Zapata Telephony e suas configurações estão disponíveis no arquivo /etc/zaptel.conf.

2.2.5.2 Telefones

Impossível imaginar(pelo menos por enquanto) um sistema de telefonia sem telefones. Pois bem, o Asterisk possui uma lista extensa de telefones suportados. Vamos comentar sobre alguns deles.

Polycom FOTO

Cisco FOTO

Snom FOTO

Analógico SIEMENS (FXS)

UM BEM ANTIGO... (FXS)

2.2.5.3 ATAs

Analog Telephony Adapter, este é o significado de ATA. Um ATA é utilizado para transformar um telefone analógico em telefone IP. Existem diversos ATAs disponíveis no mercado, basicamente a sua diferença está na quantidade de portas(conectores). Existem ATAs de uma porta analógica e de até vinte e quatro portas analógicas, o que significa que podemos ter um telefone ou vinte e quatro telefones conectados no mesmo equipamento, cada qual com seu número próprio.

Um ATA é um gateway de pequeno porte que faz a converção de um sinal analógico para um sinal IP.

Alguns ATAs estão listados abaixo.

IAXy (FOTO)

Handy Tone (FOTO)

Linzsys PAP2 (FOTO)

2.2.5.4 Softphones

Softphones são telefones IP via software, ou seja, são telefones que podemos utilizar em um computador. Existem diversos(para nÃo dizer milhares) de opções de softwaphones disponíveis. Alguns comerciair, outros livres. Para Windows, Linux ou MacOSX, PDAs e handhelds, enfim, a oferta é grande e você saberá escolher o que melhor se adapta ao seu projeto.

Xten (SCREENSHOT)

Firefly (SCREENSHOT)

EyeBeam (SCREENSHOT)

Kphone (SCREENSHOT)

Ekiga (SCREENSHOT)

2.2.5.5 Outros

Channels banks PABX IPBX Gateways balun A balun is a device designed to convert between balanced and unbalanced electrical signals, such as between coaxial cable and ladder line. Baluns can be considered as simple forms of transmission line transformers. 2.3 Documentação adicional e Downloads

Canal Unicall – http://www.soft-switch.org/unicall

Projeto Asterisk – http://www.asterisk.org

Projeto AsteriskBrasil.org – http://www.asteriskbrasil.org

Biblia Sagrada do Engenheiro VoIP – http://www.voip-info.org

3 Configurações básicas do Asterisk Todas as configurações do Asterisk se encontram nos arquivos *.conf do diretório /etc/asterisk. Não existe distinção no local onde se configura um ramal ou um tronco ou mesmo uma sala de conferência. Todos estes recursos estão presentes, muitas vezes, nos mesmos arquivos de configuração. O que os distingue dentro do mesmo arquivo, são os contextos.

Antes de começar a Asteriskar é necessário fazer um preparo do seu sistema. Vamos tropicalizar o servidor e realizar alguns ajustes.

3.1 Inserindo os padrões de telefonia Brasileiro /etc/asterisk/.indications.conf [general] country = br [br] description = Brazil ringcadance = 1000,4000 dial = 425 busy = 425/250,0/250 ring = 425/1000,0/4000 congestion = 425/250,0/250,425/750,0/250 callwaiting = 425/50,0/1000 ; Dialrecall não é utilizado no Brasil. Use o padrão inglês. dialrecall = 350+440 ; Record não é utilizado no Brasil. Use tom de ocupado record = 425/250,0/250 ; Info não é utilizado no Brasil. Use o padrão inglês. info = 950/330,1400/330,1800/330 3.2 Adicionando a linguagem pt_BR ao Asterisk

O Asterisk possui um diretório onde ficam armazenados todos os áudios do sistema. A linguagem padrão é o inglês, portanto os áudios que acompanham o projeto estão todos gravados nesta língua. Para adicionar a linguagem Português do Brasil basta regravar os áudios e adiciona-los nos diretórios abaixo

# mkdir /var/lib/asterisk/sounds/pt_BR # mkdir /var/lib/asterisk/sounds/digits/pt_BR # mkdir /var/lib/asterisk/sounds/letters/pt_BR # mkdir /var/lib/asterisk/sounds/phonetic/pt_BR Os arquivos de áudio devem possuir o mesmo nome porém podem ser gravados com outros formatos de áudio. O formato padrão dos arquivos originais é o GSM, porém para se ter maior qualidade nas locuções é interessante gravar o áudio com uma qualidade mais alta.

Os áudios devem posssuir amostragem de 8Khz e qualidade de 16 bits para que se possa trafegar em redes de telefonia.

Observe que se um ramal, com suporte somente ao codec GSM, acessar o servidor com os áudios gravados em outro formato não GSM, o Asterisk irá realizar um processo de transcoding[13], o que irá trazer impactos de performance.

3.3 Criando ramais Ramal SIP: sip.conf

Exemplo:

Ramal Analógico(ZAP): zapata.conf

Exemlo:

Ramal IAX: iax.conf

Exemplo:

3.4 Criando troncos Tronco SIP: sip.conf

Tronco Digital(ZAP): zapata.conf

; Note the 'g2' in the TRUNK variable above. It specifies which group (defined ; in zapata.conf) to dial, i.e. group 2, and how to choose a channel to use in ; the specified group. The four possible options are: ; ; g: select the lowest-numbered non-busy Zap channel ; (aka. ascending sequential hunt group). ; G: select the highest-numbered non-busy Zap channel ; (aka. descending sequential hunt group). ; r: use a round-robin search, starting at the next highest channel than last ; time (aka. ascending rotary hunt group). ; R: use a round-robin search, starting at the next lowest channel than last ; time (aka. descending rotary hunt group).

Tronco Digital(Unicall)

Tronco Analógico: zapata.conf

3.5 Realtime O Realtime é um recurso relativamente novo no Asterisk. Em suma ele permite que se armazene configurações e o próprio plano de discagem do Asterisk em u m banco de dados relacional. Estas configurações, neste modo de operação, são automaticamente instanciadas no sistema, sem que haja a necessidade de se refazer uma leitura nos arquivos de configuração do Asterisk.

Este recurso é indispensável em ambiente de alto tráfego de telefonia. Um simples reiniciar da plataforma de telefonia poderia ocasionar interrupação de serviços por alguns instantes, mas o sufcietnte para ser sensível aos usuários.

O realtime ainda é um recurso novo no Asterisk, portanto nem tudo pode estar presente neste modo de operaçcão. Alguns arquivos de configuração ainda são necessários.

Use realtime sempre que possível.

4 Mergulhando no Dialplan O arquivo responsável pelo Dialplan, ou plano de discagem, do Asterisk é o /etc/asterisk/extensions.conf. Podemos chamar de a Peça Chave do Asterisk o arquivo extensions.conf. Um plano de discagem é composto por contextos, extensões, prioridades e aplicações. Alguns contextos são reservados e possuem uma sintaxe especial. Veja a sintaxe do arquivo /etc/asterisk/extensions.conf: [general] parametro01 = valor01 parametro02 = valor02 ... [globals] GLOBALVAR01 = valor01 GLOBALVAR02 = valor02 ... [contexto] exten ⇒ extensão,prioridade,aplicação(argumentos) Vamos analizar um pequeno trecho deste arquivo para entender sua morfologia e sintaxe. [ramais] exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,3,Hangup() exten ⇒ 102,1,Dial(SIP/102,10) exten ⇒ 102,2,VoiceMail(u102@correio) exten ⇒ 102,3,Hangup()

[ramais] é o contexto, 101 e 102 são as extensões o segundo parâmetro(1.2.3) são as prioridades e Dial, VoiceMail e Hangup são as aplicações.

Neste capítulo vamos entender um pouco mais sobre cada uma destas peças do plano de discagem do Asterisk.

Usando #include para incluir arquivos Você pode incluir outros arquivos dentro do dialplan, para isso adicione a seguinte linha dentro do extensions.conf. #include extensions_ramais.conf O conteúdo do arquivo /etc/asterisk/extensions_ramais.conf também estará disponível no dialplan. NÃO CONFUNDIR ESTE INCLUDE COM O INCLUDE DE CONTEXTOS, ANALISADO MAIS ADIANTE. Vale lenbrar que todos os arquivos do projeto Asterisk permitem a utilização de #include[14]. Porém há diferença entre dois 4.1 Contextos(context) [ramais] É o contexto do trecho de dialplan exemplificado acima, é ele o responsável pela diferenciação deste segmento de código para outros no mesmo arquivo. Este método possibilita a divisão do arquivo em grupos que podem ser totalmente distintos entre si. Os nomes dos contextos não podem conter espaços, somente caracteres alfanumericos. 4.1.1 Contexto [general]

O contexto [general] é utilizado para adicionar alguns parâmetros gerais de configuração do dialplan, portanto o nome de contexto general é reservado pelo Asterisk. São estes os parâmetros de configuração do contexto [general]: Parametro Valor Descrição static Yes|no If static is set to no, or omitted, then the pbx_config will rewrite

; this file when extensions are modified. Remember that all comments

; made in the file will be lost when that happens. writeprotect Yes|no if static=yes and writeprotect=no, you can save dialplan by

; CLI command 'save dialplan' too

; autofallthrough Yes|no ; If autofallthrough is set, then if an extension runs out of

; things to do, it will terminate the call with BUSY, CONGESTION

; or HANGUP depending on Asterisk's best guess (strongly recommended).

;

; If autofallthrough is not set, then if an extension runs out of

; things to do, asterisk will wait for a new extension to be dialed

; (this is the original behavior of Asterisk 1.0 and earlier). clearglobalvars Yes|no ; If clearglobalvars is set, global variables will be cleared

; and reparsed on an extensions reload, or Asterisk reload.

;

; If clearglobalvars is not set, then global variables will persist

; through reloads, and even if deleted from the extensions.conf or

; one of its included files, will remain set to the previous value.

; priorityjumping Yes|no ; If priorityjumping is set to 'yes', then applications that support

; 'jumping' to a different priority based on the result of their operations

; will do so (this is backwards compatible behavior with pre-1.2 releases

; of Asterisk). Individual applications can also be requested to do this

; by passing a 'j' option in their arguments. 4.1.2 Contexto [globals]

O contexto [globals], também é reservado pelo Asterisk. Ele é usado para definir variáveis globais ao plano de discagem. Disponíveis a todo o sistema e não somente a um canal específico. Veja neste exemplo como definir variáveis globais: [globals] CONSOLE=Console/dsp TRUNK01=Zap/g0 TIPORAMAL222=SIP Para utilizar estas variáveis no plano de discagem basta utilizar uma das seguintes sintaxes: ${VARIAVEL} Modo mais simples, que retorna o valor da variavel ${ENV(VARIAVEL)} Para utilizar o valor de uma variável de ambiente(sistema operacional) ${texto${VARIAVEL}} Acrescentando um prefixo a um valor de variável 4.1.3 Parâmetro include

É possível incluir um contexto dentro de outro utilizando o parâmetro include da seguinte forma: [ramais] include ⇒ ramaisIP exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,3,Hangup() exten ⇒ 102,1,Dial(SIP/102,10) exten ⇒ 102,2,VoiceMail(u102@correio) exten ⇒ 102,3,Hangup() Neste caso quem estiver com permissões de acesso ao contexto [ramais] também terá acesso ao contexto [ramaisIP]. Isto é possível graças ao parametro include dentro do contexto [ramais]. Os includes podem assumir uma condição de tempo para serem ativados. Por exemplo, poderíamos inserir o include do exemplo acima da seguinte forma: [ramais] include ⇒ ramaisIP|9:00-17:00|mon-fri|*|* exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,3,Hangup() exten ⇒ 102,1,Dial(SIP/102,10) exten ⇒ 102,2,VoiceMail(u102@correio) exten ⇒ 102,3,Hangup()

Neste caso o contexto [ramaisIP] só estaria disponível para o contexto ramais, de segunda a sexta das nove as cinco horas da tarde.

4.1.4 Parâmetros específicos de um contexto

Alguns parâmetros diferentes de exten ⇒ podem ser usados dentro de contextos.

Você pode acessar um plano de discagem remoto, de outro servidor Asterisk, utilizando o parâmetro swicth ⇒.

switch ⇒ IAX2/user:password@bigserver/local Variantes do swicth ⇒ também podem ser úteis.

lswicth ⇒ Loopback/12${EXTEN}@outroontexto O lswitch ⇒ possui a mesma função do parâmetros switch, porém quando você deseja passar um valor que contenha uma variável, ele não faz a subistituição da mesma, ou seja, a string é enviada de forma literal.

eswitch ⇒ Loopback/12${EXTEN}@outrocontexto O eswitch ⇒ realiza a mesma função do lswitch ⇒ porém realiza a substituição de variáveis antes de encaminhar o dialplan ao realtime. 4.2 Extensões(exten) Uma extensão pode ser composta por letras, números ou uma combinação de ambos. exten ⇒ Define uma linha de programação do dialplan. São elas as responsáveis pela inteligência do Asterisk. Por elas configuramos as tarefas contidas nos planos de discagem bem como a sua ordem de execução. exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,3,Hangup() Este dialplan nos diria, se falassse português, a seguinte frase: “Quando alguém ou alguma coisa digitar(enviar estes dígitos: 101) ao Asterisk, ele irá executar a alpicação Dial com o argumento SIP/101,10. Após concluída esta primeira ação ele irá executar a aplicação VoiceMail com os parâmteros u101@correio. Por último execute a aplicação Hangup sem parâmetro algum.†E em português brasileiro, mais claro ainda: “Chame o ramal 101, se ele não atender envie esta chamada para o seu Correio de Voz e desligue a chamda em seguida.†Chamamos de extensão a seguinte porção deste exmplo: exten ⇒ 101 Após a vírgula temos as chamadas Prioridades e na sequência as Aplicações. 4.2.1 Extensões especiais

Algumas extensões expeciais presentes no Asterisk são: exten ⇒ t Representa timeout exten ⇒ s Exten inicial, quando uma chamda for enviada a um contexto sem uma extensão definida. S de start. exten ⇒ h Extensão de hangup exten ⇒ o Extensão out, utilizado pela aplicação VoiceMail exten ⇒ talk exten ⇒ hint exten ⇒ fax exten ⇒ T exten ⇒ failed 4.2.2 Padrões de discagem

É possível utilizar caracteres coringas como valor de extensões. Se uma extensão é iniciada com o caractere underscore '_' isto não é interpretado literalmente pelo Asterisk e sim como um padrão de discagem.

Os padrões de discagem definem coringas para representar dígitos ou um grupo de dígitos sem ter a mecessidade de especifica-los explicitamente como uma extensão do plan o de discagem.

Veja a seguinte linha de um dialplan:

exten ⇒ _014ZZXXXXXXX,2,Macro(chama-tronco,2,${EXTEN}) Neste caso qualquer número que inicie com 014, tenha um total de 12 dígitos, sendo o quarto e quinto dígito um número entre 1 e 9 e os demais números sendo qualquer dígito entre 0 e 9 irá seguir por essa linha do diaplan enviando para a macro chama-ramal o valor da variável ${EXTEN}.

Veja, na tabela abaixo, o significado de todos os padrões de discagem disponíveis:

Padrão Descrição X Qualquer dígito entre 0 e 9 Z Qualquer dígito entre 1 e 9 N Qualquer dígito entre 2 e 9 [1235-9] Qualquer dígito entre colchetes (neste exemplo, 1,2,3,5,6,7,8,9 . O ponto é um coringa, siginifica qualquer coisa (Por exemplo _9011. significa qualquer coisa começando com 9011 menos o prórpio 9011) ! wildcard, causes the matching process to complete as soon as it can unambiguously determine that no other matches are possible 4.3 Prioridades As prioridades são o segundo parâmetro das extensões. É com ela que definimos a rodem de ações dentro de um plano de discagem. As prioridades devem ser especificadas de forma crescente e não precisam necessariamente ser contínuas, por exmplo: exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,3,Hangup() As prioridades 1, 2 e 3 poderiam ser escritas da seguinte forma: exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,15,VoiceMail(u101@correio) exten ⇒ 101,18,Hangup() 1, 15 e 18 são as novas prioridades. Isso pode ajudar muito em casos onde se está desenvolvendo um dialplan e existe a necessidade de se adicionar linhas entre as extensões já criadas. Lembre-se que as prioridades sempre devem começar com 1 nestes casos. VERIFICAR A VERACIDADE 4.3.1 Prioridade n+101

Uma prioridade específica merece atenção. A prioridade n + 101. Veja o exemplo abaixo. exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,102,VoiceMail(b101@correio) exten ⇒ 101,3,Hangup() Neste caso a prioridade 102, ou 1 + 101 diz que caso a prioridade número 1 encontre sinal de ocupado o Asterisk deve enviar a chamada para a prioridade 102, caso contrário continuará executando a prioridade seguinte a número 2. 4.3.2 Prioridade next

A prioridade next ou simplesmente n siginifica a prioridade anterior mais um.

exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,n,VoiceMail(u101@correio) exten ⇒ 101,1+101,VoiceMail(b101@correio) exten ⇒ 101,n,Hangup() Moleza hein?

4.3.3 Prioridade same

A prioridade same ou simplesmente s, significa que esta prioridade tem o mesmo valor da prioridade anterior.

A prioridade s+1 tem o mesmo valor que a prioridade n.

exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,s+1,VoiceMail(u101@correio) exten ⇒ 101,102,VoiceMail(b101@correio) exten ⇒ 101,s+1,Hangup() 4.3.4 Sinais numéricos e prioridades

As prioridades podem ser seguidas de um sinal '+' (ou outro sinal numérico)e um valor a ser somado. Este recurso é utilizável em conjunto com as prioridades next e same.

exten ⇒ 101,1,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,1+101,VoiceMail(b101@correio) exten ⇒ 101,3,Hangup() 4.3.5 Apelidos para prioridades

As prioridades podem possuir apelidos ou alias para que possam ser referenciadas com a aplicação Goto() ou em outras áreas do plano de discagem..

Este apelidos devem ser especificados entre parentesis logo após o valor da prioridade, como no exemplo abaixo.

exten ⇒ 101,1(dial),Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,dial+101,VoiceMail(b101@correio) exten ⇒ 101,3,Hangup() Outro exemplo:

exten ⇒ 101,1(,Dial(SIP/101,10) exten ⇒ 101,2,VoiceMail(u101@correio) exten ⇒ 101,102,VoiceMail(b101@correio) exten ⇒ 101,n,Goto(${EXTEN},hangup) exten ⇒ 101,hangup,Hangup() 4.4 Aplicações As aplicações formam o coração do dialplan. Elas trazem aplicativos pré empacotados ao plano de discagem. As aplicações são o terceiro parâmetro de uma extensão. Uma aplicação pode receber parâmetros e sua notação é a seguinte: Aplicação(parâmetro1,parâmetro2,parâmtero3) Geralmente os parâmetros são separados por vírgula “,†ou pipeâ€|â€. Para verificar todas as aplicações disponíveis em seu sistema Asterisk, execute o seguinte comando na *CLI: *cli> show applications Vamos falar um pouco mais sobre algumas delas. 4.4.1 Aplicação Dial – Onde tudo começa...

A aplicação Dial pode ser encaraqda como a principal de todas elas. É ela que nos permite realizar chamadas, ou melhor, é ela que as realiza. O Dial em termos Asterísticos, conecta um canal(channel) a outro canal(channel). Um exmplo de utilização da aplicação Dial pode ser visto abaixo: exten ⇒ 101,10,Dial(SIP/101,10) No caso acima a aplicação Dial possui dois parâmetros, o primeiro especifica o canal e informações necessárias para a sua utilização, o segundo parâmetro designa a duração em segundos que a aplicação Dial irá tentar estabelacer o canal. Exiiste a possibilidade de um terceiro parâmetro, chamado de flag. Por exemplo, a linha de exten ⇒ acima poderia estar escrita da seguinte forma: exten ⇒ 101,10,Dial(SIP/101,10,tw) Um flag é representada por uma letra do alfabeto e cada uma tem sua função. No exemplo acima utilizamos as flags t e w. Veja abaio o significado destas e de outras flags disponíveis para o comando Dial. Flag Descrição T Permite a transferência pelo orginador da chamada t Permite a transferência pelo recebedor da chamada W Permite a gravação sob demanda do orginador da chamada w Permite a gravação sob demanda do orginador da chamada f forces callerid to be set as the extension of the line making/redirecting the outgoing call. For example, some PSTNs don't allow callerids from other extensions than the ones that are assigned to you. d This flag trumps the 'H' flag and intercepts any dtmf while waiting for the call to be answered and returns that value on the spot. This allows you to dial a 1-digit exit extension while waiting for the call to be answered - see also RetryDial o Restore the Asterisk v1.0 CallerId behaviour (send the original caller's ID) in Asterisk v1.2 (default: send this extension's number) r Gerar ringtone antes mesmo de começar a chamar o ramal. Usar com cuidado. m[classe] Toca uma música em espera a pessoa que está chamando um ramal. Utilizar m(classe da música em espera). Utilizar em conjunto com a opção “râ€. M(x[^argumento]) Executes the macro (x) upon connect of the call (i.e. when the called party answers) h Permite o recebedor desligar uma chamada pressionando *. H Permite o originador desligar uma chamada pressionando *. C Reset the CDR (Call Detail Record) for this call. This is like using the NoCDR command. P[(x)] Usa o PrivacyManager, usando “x†como valor do banco de dados.(x é opcional) g When the called party hangs up, exit to execute more commands in the current context G(contexto^ramal^prioridade) If the call is answered, transfer both parties to the specified context and extension. The calling party is transferred to priority x, and the called party to priority x+1. This allows the dialplan to distinguish between the calling and called legs of the call (new in v1.2). A(arquivo) Toca um anúncio(arquivo.gsm|.wav|.*) para o recebedor da chamada. D([chamado][:chamador]) After the called party answers, send digits as a DTMF stream, then connect the call to the originating channel. (You can also use 'w' to produce .5 second pauses.) L(x[:y][:z]) n IMPORTANTE! - Não utilize espaços entre as flags da aplicação Dial(), pois eles não irão funcionar. - Se você utilizar algumas destas flags(t, T, h, H, w, W ou L) na aplicação Dial() o Asterisk sempre estará no mediapath, ou seja, o parâmetro canreinvite=yes não irá funcionar. 4.4.2 Aplicação Set

A aplicação Set tornou-se muito mais expressiva na versão Asterisk 1.2. Diversas aplicações foram inutilizadas pois desenvolveu-se sua análoga no formato de funções da aplicação Set. Em versões anteriores do Asterisk, a aplicação Set foi muito utilizada para nomear variáveis(globais e de canal). Vamos conhecer um pouco sobre as opções que esta aplicação fornece para a construção de um plano de discagem. Estas opções são três, Declaração de Variáveis, Execução de funções e Interação com o AstDB(Banco de dados interno do Asterisk) 4.4.2.1 Declaração de variáveis

Utilizando a aplicação Set, podemos declarar variáveis no sistema Asterisk. A declaração de váriáveis nas versões anteriores do Asterisk(série 1.0) eram realizadas pela aplicação SetVar. Atualmente ela foi descontinuada em favor da aplicação Set. Para declarar uma variável de canal(válida somente no momento da chamada ou enquanto o canal estiver sendo executado) utilize o exemplo abaixo como referência: exten ⇒ 101,1,Set(TEMPORING=30) exten ⇒ 101,2,Dial(SIP/101,${TEMPORING},tw) exten ⇒ 101,3,VoiceMail(u101@correio) exten ⇒ 101,103,VoiceMail(b101@correio) exten ⇒ 101,4,Hangup() Após declarar uma variável você pode fazer uso dela inserindo o nome da variável entre um cifrão e uma chave aberta e outra chave fechada como abaixo: ${TEMPORING} O Asterisk irá substituir ${TEMPORING} por 30 que neste exmplo significa que o tempo que a aplicação Dial irá utilizaar para chamar o ramal 101 será de 30 segundos. Para declarar uma variável global, ou seja, visível por todas as extensões do seu diaplan, utilize a aplicação SetGlobalVar. 4.4.2.2 Execução de funções

Como dito no início deste tópico, tem se migrado uma série de pequenas aplicações para o formato de função. Isto significa que a aplicação Set tem outras habilidades que não seja somente a declaração de variáveis ela pode realizar funções antes executadas por aplicações. As funções possuem uma sintaxe muito semelhante a utilizada na declaração de variáveis, porém as funções recebem um argumento a mais antes do valor declarado. Veja o exemplo abaixo: exten ⇒ s,1,Set(TIMEOUT(digit)=30) No caso acima estamos usando a função “TIMEOUT†com o argumento “digit†para declarar o tempo máximo entre os dígitos....... A função TIMEOUT foi concebida apartir de suas análogas aplicações DigitTimeout, AbsoluteTimeout e ResponseTimeout. Como na declaração de variáveis o uso de ${} também é permitido caso queira utilizar o valor retronado da função em algum outro lugar do seu plano de discagem. Veja o exemplo abaixo: Algumas funções disponíveis são estas: Função Argumentos Descrição TIMEOUT Digits|absolute|response CALLERID All|Name|num|rdnis LANGUAGE CUT DB CDR MATH CHECK MD5 MD5 GROUP_COUNT DB_EXISTS FAMILA/CHAVE Checa se existe o PAR/CHAVE no AstDB SIP_HEADER Você pode verificar todas as funções disponíveis executando show functions na linha de comando Asterisk. *cli> show functions 4.4.2.3 AstDB

O AstDB é o banco de dados interno do Asterisk. Este banco de dados não é um banco de dados relacional como o MySQL, Oracle, PostgreSQL. O AstDB é um banco de dados baseado no Berkeley DB v.1.

O Asterisk armazena seus dados dentro do AstDB utilizando o seguinte formato:

FAMILIA/CHAVE=VALOR

Cada familia pode ter somente uma chave com o mesmo nome.

Resursos poderosos podem ser utilizados com o AstDB. Você pode, por exemplo, desenvolver aplicações(você vai estudar sobre AGI para realizar este desenvolvimento) que inserem dados sobre a disponibilidade de uma ramal. É claro que o prórpio Asterisk guarda esta informação dentro do AstDB, porém você pode manipular esta informação e forçar um status. Um exmeplo prático desta aplocaçcão poderia ser um recursos de Não Perturbe, que quando o usuário digitar uma extensão o plano de discagem aramazena um avalor de FAMILIA/CHAVE dentro do AstDB que será consultado no momento de uma chamada para este ramal.

Vamos conhecer um pouco mais sobre esta apliucação nas próximas linhas, fique tranquilo.

Inserindo/Extraindo/Apagando entradas no AstDB

As funções de inserção, extração e remoção do AstDB estão disponíveis tanto na linha de comando do Asterisk(*CLI) ou através de aplicações que podem ser usadas em seu plano de discagem.

Para inserir dados no AstDB é necessário utilziar a aplicação Set, pois trata-se de declaração de um valor, e ele será aramazenado dentro do banco de dados do Asterisk. Veja a sintaxe de inserção abaixo.

exten ⇒ extensão,prioridade,Set(${DB(FAMILIA/CHAVE)=VALOR}) Para apagar uma entrada do banco de dados do Asterisk, é necessário utilizar a aplicação Dbdel como mostrado na linha abaixo.

exten ⇒ extensão,prioridade,DBdel(FAMILIA/CHAVE) Veja o exemplo real abaixo. É uma aplicação de não perturbe que traz ao usuário a possibilidade de indisponibilizar o seu ramal quando necessário discando o código *11 em seu telefone. O nÃo perturbe pode ser desabilitado digitando *13 no telefone. Em ambos os casos o plano de discagem irá utilizar a variável interna do Asterisk CALLERIDNUM como valor de chave da família NP.

[app-naoperturbe] exten ⇒ *11,1,Answer exten ⇒ *11,2,Wait(1) exten ⇒ *11,3,Set(${DB(NP/${CALLERIDNUM})=YES}) exten ⇒ *11,4,Playback(nao-perturbe) exten ⇒ *11,5,Playback(ativado) exten ⇒ *11,6,Hangup() exten ⇒ *13,1,Answer exten ⇒ *13,2,Wait(1) exten ⇒ *13,3,DBdel(NP/${CALLERIDNUM}) exten ⇒ *13,4,Playback(nao-perturbe) exten ⇒ *13,5,Playback(desativado) exten ⇒ *13,6,Hangup()

Recuperar, ou extrair, dados também é uma atividade trivial. Basta atribuir, também com a a aplicação Set, uma variável com o valor do par FAMILIA/CHAVE e utiliza-la no dialplan. Veja neste exemplo como utilizar uma entrada no AstDB.

[macro-checagemramal] exten ⇒ s,1,Set(NP=${DB(NP/${EXTEN})}) exten ⇒ s,2,GotoIf($[${NP}=YES]?:4) exten ⇒ s,3,VoiceMail(u${MACRO_EXTEN}@default) exten ⇒ s,4,Macro(chamaramal,${MACRO_EXTEN})

Esta Macro poderia ser utilizada momentos antes de chamar o ramal de destino. O plano de discagem realizará uma checagem no banco de dados do Asterisk para verificar se o ramal está ou não disponível para receber chamadas, ou melhor, se ele está ou não com o não perturbe habilitado.

No exemplo acima, a primeira linha da macro checagemramal recupera o par NP/RAMAL do AstDB e atribui o valor do par à variável NP. A aplicação GotoIf é utilizada como fator de decisão para encaminhar a chamada ao correio de voz ou então, caso o não perturbe esta desabilitado, para a macro chamaramal com o número de ramal como argumento.

4.4.3 Goto, GotoIf, GotoIfTime

4.4.4 Aplicação Macro

4.4.5 Aplicação VoiceMail – O famoso Correio de Voz

A aplicação Voicemail, como você pode concluir, é utilizada para acionar o sistema de Correio de Voz do Asterisk. Com esta aplicação é possível que você defina uma condição(ocupado ou indisponível) para que você envie a chamada para o sistema de Correio de Voz.

Por exemplo, imagine que você está no telefone ou não está em sua mesa e uma chamada chega ao seu ramal. Este é o momemtno ideal para se utilizar a aplicação VoiceMail no seu plano de discagem.

A sintaxe para utilização da aplicaçcão VoiceMail é esta:

VoiceMail(opçõesramal@contexto) Na sintaxe acima o parametro opções esta colado ao parâmetro ramal. É exatamente desta forma que devemos utilizar esta sintaxe.

Para enviar para várias caixas de correio ao mesmo tempo:

VoiceMail(opçõesramal01@contexto01&ramal02@contexto02) Estas são as opções disponíveis para a aplicação VoiceMail.

Opção Descrição s SEM esta opção uma mensagem irá ser tocada. A mensagem padrÃo do sistema é “Deixe sua mensagem a pós o sinal, quando terminar desligue ou pressione quadrado. Se você usar esta opção esta mensagem NÃO será tocada. u Se você utilizar esta opção uma mensagem de INDISPONÃVEL será tocada. A mensagem padrão, se o usuário não gravar a sua, é “A pessoa no ramal XXX não está disponível†e na sequência “Deixe sua mensagem após o sinal, quando terminar desligue ou pressione quadradoâ€. b Se você utilizar esta opção uma mensagem de OCUPADO será tocada. A mensagem padrão, se o usuário não gravar a sua, é “A pessoa no ramal XXX não está disponível†e na sequência “Deixe sua mensagem após o sinal, quando terminar desligue ou pressione quadradoâ€. su Se você utilizar esta opção uma mensagem de INDISPONÃVEL será tocada. A mensagem padrão, se o usuário não gravar a sua, é “A pessoa no ramal XXX não está disponívelâ€. A mensagem com instruções será descartada. sb Se você utilizar esta opção uma mensagem de OCUPADO será tocada. A mensagem padrão, se o usuário não gravar a sua, é “A pessoa no ramal XXX não está disponívelâ€. A mensagem com instruções será descartada. Veja o exemplo do plano de discagem abaixo:

4.4.5.1 Armazenamento de mensagens

As mensagens do correio de voz ficam armazenadas no seguinte diretório: /var/spool/asterisk/voicemail/contexto/ramal/INBOX Onde contexto é o nome do contexto onde se encontra as informações do correio e ramal o prórpio ramal(usuário) em questão. 4.4.5.2 Configuração das caixas de correio de voz

O sistema de correio de voz é configurado e armazena as caixas de correio no arquivo /etc/asterisk/voicemail.conf. Veja a sintaxe do /etc/asterisk/voicemail.conf abaixo: [general] parametro01 = valor01 parametro02 = valor02 ... [zonemessages] eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' IMp central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours' military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' COLOCAR O PADRÃO DO BRASIL [default] parametro01 = valor01 parametro02 = valor02 ... 9999 ⇒ 2006,Ronaldinho Gaúcho,ronaldinho@brasil.com.br 1111 ⇒ 1010,Dida,dida@brasil.com.br,,attach=no|serveremail=smtp.brasil.com.br|maxmsg=10 Debaixo do contexto [general] inserimos os parâmetros que serão válidos para todas as caixas de correio criada no sistema. Parâmetros específicos ficam abaixo dos contexto das caixas de correio, por exemplo [default]. Este é o formato para criar uma caixa de correio no Asterisk: número_ramal⇒senha_correio,nome_completo_usuario,email,email_pager,opcao1|opcao2|opcao3 Conheça as opções disponíveis para as caixas de correio do Asterisk: Parametro Argumentos Descrição format wav49|gsm|wav Formatos para armazenamento dos arquivos de mensagens do correio de voz. Mais de um formato pode ser especificado utilizando o caractere '|' .[15] serveremail email Email remetente das notificações do correio de voz enviadas aos usuários. attach Yes|no Anexar as mensagens no email de notificação. maxmsg nümero inteiro Número máximo de mensagens por caixa de correio. Valor default é 100. maxmessage tempo em segundos Tamanho máximo de uma mensagem em segundos. minmessage tempo em segundos Tamanho mínimo, em segundos, de uma mensagem para ser armazenada pelo sistema. Default é 0. maxgreet tempo em segundos Tamanho máximo, em segundos, das mensagens de recepção(ocupado, indisponível e o nome do usuário). skipms tempo em milisegundos Tempo, em milisedgundos, para os saltos de rew e ff no playback de mensagens. maxsilence tempo em segundos Tempo, em segundos, de silêncio para que o sistemaa encerre a gravação de uma mensagem. 4.4.5.3 Notas importantes sobre a aplicação VoiceMail()

O arquivo /etc/asterisk/voicemail.conf não aceita #include pois o Asterisk acessa esta arquivo para fazer alteração de senhas.

Não utiilize comentários(especialmente os que contenham o caractere “[“, pois a aplicação VoiceMailMain, que faz a autenticação do usuário, não é muito inteligente no parsing do arquivo /etc/asterisk/voicemail.conf.

As caixas de correio não podem começar com as letras 's', 'u', 'b' ou uma combinação delas. Isso se deve as opções da aplicação VoiceMail().

Apartir do momento em que uma caixa de correio já está operando(contém mensagens). Não é possível alterar os formatos de áudio. Isso irá ocasionar problemas no playback das mensagens do correio de voz.

4.4.5.4 Aplicações complementares ao Correio de Voz

VoiceMailMain()

Disponibiliza acesso ao sistema de Correio de Voz do Asterisk. É com esta aplicação que posssibilitamos o acesso as mensagens e informações pessoais dos usuários de um servidor Asterisk.

Acessando esta aplicação o usuário será servido com o seguinte menu:

Digite 1. Ler as mensagens do correio de voz Digite 2. Alterar de pasta

   Digite 0. Pasta de mensagens novas
   Digite 1. Pasta de mensagens antigas
   Digite 2. Pasta de mensagens trabalho
   Digite 3. Pasta de mensagens familia
   Digite 4. Pasta de mensagens amigos
   Digite #. Cancela

Digite 3. Opções avançadas

   Press 1. Send reply
   Press 3. Hear the message envelope
   Press 5. Leave a message
   Press *. Return to the main menu

Press 4. Play previous message Press 5. Repeat current message Press 6. Play next message Press 7. Delete current message Press 8. Forward message to another mailbox Press 9. Save message in a folder Press 0. Mailbox options

   Press 1. Record your unavailable message
   Press 2. Record your busy message
   Press 3. Record your name
   Press 4. Change your password
   Press *. Return to the main menu

Press *. Help Press #. Exit HasNewVoicemail()

HasVoicemail()

MailBoxExists()

We will use the GoToIf application to determine the dial status of the call. For the purpose we need also the variable ${DIALSTATUS}. The first extension after the one with Dial application, will check whether the called person is available. If the person is unavailable, then the execution will continue with the extension with priority 7. This extension contains the VoiceMail application. In its brackets we have set the following: uanatoliy@testmail. The first letter - u means that a message for an unavailable condition has to be played. The message by default is: The person at extension is unavailable". The word anatoliy is for the mailbox which we have set in the voicemail.conf. The last part is @testmail. This shows the context in voicemail.conf, in which the mailbox anatoliy is configured. So, the caller will hear a message and he/she will be allowed to record a message and to store it in the mailbox of anatoliy. The message will be stored in the directory /var/spool/asterisk/voicemail/testmail/anatoliy/INBOX. In order to send the message in the mailbox, the caller has to hang up the line or to press the pound key(#), when he/she finishes with the recording of the message. If the GoToIf check show that the user is available, then the next application with priority 4 will be executed. This one will check, whether the line is busy or not. If the line is busy, then the execution will continue with the extension with priority 9. This extension contains again the VoiceMail application. In its brackets we have set the following: banatoliy@testmail. The first letter - b means that a message for busy condition has to be played. The message by default is: The person at extension is on the phone. The word anatoliy is for the mailbox which we have set in the voicemail.conf. The last part is @testmail. This shows the context in voicemail.conf, in which the mailbox anatoliy is configured. The caller will hear the message, that the called person is busy and he/she will be allowed to record a message and to store it in the mailbox of anatoliy. The message will be stored in the directory /var/spool/asterisk/voicemail/testmail/anatoliy/INBOX. In order to send the message in the mailbox, the caller has to hang up the line or to press the pound key(#), when he/she finishes with the recording of the message. Now, if the user is available and the line is free and the called person does not answer within 5 seconds, the next executed extension will be the one with priority 5. This one contains another copy of the VoiceMail application. As arguments in its brackets we have set the following: anatoliy@testmail. There is no first letter which means that a message with instructions has to be played. The message by default is: Please leave your message after the tone. When done, hang up, or press the pound key. The word anatoliy is for the mailbox which we have set in the voicemail.conf. The last part is @testmail. This shows the context in voicemail.conf, in which the mailbox anatoliy is configured. Again the user will be allowed to record a message after the signal. The message will be stored in the directory /var/spool/asterisk/voicemail/testmail/anatoliy/INBOX. In order to send the message in the mailbox, the caller has to hang up the line or to press the pound key(#), when he/she finishes with the recording of the message. NOTE: Please, pay attention that between the option flags and the voicemail number there is no separator. That is why the voicemails cannot start with "s", "u", "b" or any combination of these three letters. Maybe you have noticed that between the extensions with priority 5, 7 and 9, we have extensions with the GoTo application. It cause the jumping to the last extension with priority 10 which has the Hangup application. Thanks to it the line will be hung up. This is necessary, because otherwise the three VoiceMail application will be executed subsequently. In this way the effect from the GoToIf applications will be lost. Aplicações complementares:

4.4.6 MeetMe

4.4.7 Queue

A aplicação Queue é utilizada para “enfileirar†chamadas. Este tipo de aplicação é geralmente(na verdade não conheço outra aplicação para ela) utilizada em filas de atendimento de Call Centers Passivos[16]

Conhecida também como DAC(Distribuidor Automático de Chamadas) a aplicação Queue distribui chamadas entrantes, em ordem de chegada, para o primeiro agente[17] disponível. O sistema atende imediatamente as chamdas e, se necessário, envia o chamador para uma fila até que ele possa ser redirecionado ao próximo agente disponível. Balanceando as chamdas entre os agentes irá assegurar que todos os chamadores irão receber um bom atendimento.

O Asterisk suporta múltiplas filas de atendimentos e elas podem ser configuradas no arquivo /etc/asterisk/queues.conf e referenciadas como argumento da aplicação Queue no seu plano de discagem. Os agentes são definidos no arquivo /etc/asterisk/agents.conf.

Sintaxe da aplicação Queue()

Esta é a sintaxe para utilização da aplicação Queue:

exten ⇒ extensão,prioridade,Queue(nome|opções|URL_opcional|sobrepor_anuncio|timeout) nome: Fila criada no arquivo /etc/asterisk/queues.conf opções: 't' — allow the called user transfer the calling user 'T' — to allow the calling user to transfer the call.

         'd' — data-quality (modem) call (minimum delay).
         'H' — permite ao chamador desligar pressionando '*'.
         'n' — no retries on the timeout; will exit this application and go to the next step.
         'r' — Ringar ao invés de tocar música em espera

URL_opcional: Envia uma URL para dispositivos que suportam este recurso. sobrepor_anuncio: Sobrepõe o anúncio

Configuração de filas de atendimento

O arquivo responsável pela configuração de filas de atendimento no Asterisk é o /etc/asterisk/queues.conf. Veja abaixo a sua sintaxe.

[general] parametro-geral01 = valor01 parametro-geral02 = valor02 ... parametro-geral03 = valor03 [fila01] parametro01 = valor01 parametro02 = valor02 ... parametro03 = valor03 member ⇒ Zap/1 member ⇒ Zap/2 member ⇒ Agent/1001 member ⇒ Agent/1002 ;Cada membro(member) é listado em uma linha individual. [fila02] parametro01 = valor01 parametro02 = valor02 ... parametro03 = valor03 member ⇒ Agent/@1 member ⇒ Agent/1:1,1 ; Usar grupos de agentes, como no exemplo da fila02, irá desabilitar as estratégias de busca de agentes(roudrobin, leastrecent, etc.) Parâmetros de configuração de filas de atendimento Conheça os parâmetros disponíveis para filas de atendimento. Estes parâmetros podem ser especificados para uma fila específica ou para todoas as filas do sistema, para isto basta inserir o parâmetro desejado nop contexto [general] do seu arquivo de configuração.. Parâmetros valores Descrição periodic-announce arquivo_de_audio Mensagem periodica enviada enquanto o chamador aguarda atendimento periodic-announce-frequency número inteiro Tempo em segundo s de frequencia da mensagem periódica weight número inteiro Número inteiro que define o peso da Fila. Números maiores terão maior prioridade de atendimento pelos agentes. monitor-format gsm|wav|wav49 Para gravar as chamdas que forem atendidas na fila. *Somente depois do atendimento* announce-frequency núemero inteiro Frequencia em segundos de anúncio ao chamadro sobre sua posição na fila e/ou o tempo médio de atendimento. Use o valor '0' para desabilitar esta função. announce-holdtime yes|no|once Devemos incluir o tempo médio de atendimento no anúncio de posições na fila? *Se o tempo for menor que 1 min. não irá anunciar* queue-youarenext queue-youarenext Arquivos de áudio para anúncios de posição na fila e/ou tempo de atendimento médio. Altere somente se nÃo quiser utilizar os valores padrões. queue-thereare queue-thereare queue-callswaiting queue-callswaiting queue-holdtime queue-holdtime queue-minutes queue-minutes queue-thankyou queue-thankyou wrapuptime número inteiro Tempo, em segundos, de descanso de um agente após ele desligar uma chamada. Este parâmetro só tem efeito para agentes que não estão configurados no arquivo agents.conf. memberdelay número inteiro ???? timeoutrestart número inteiro ???? musiconhold default Classe de música em espera para tocar enquanto o chamadro aaguarda atendimento. announce arquivo de áudio Mensagem a ser tocada segundos amntes de o agente atender a chamda. Usado para diferenciar para o agente em que fila ele está atendendo a chamada. strategy ringall|roundrobin|leastrecent|fewestcalls|random|rrmemory Estratégia de distribuição de chamadas aos atendentes. Veja detalhes obre cada tipo ainda neste capítulo. Ringall é a default. servicelevel número inteiro Tempo em segundo do nível aceitável de serviço. Para gerar estatísticas de nível de serviço(SLA[18]). context contexto Contexto do plano de discagem que o chamador tem acesso enquanto aguarda atendimento. timeout número inteiro Tempo em segundos que consideramos a indisponibilidade de um agente. retry número inteiro Tempo em segundos para aguardar antes de tentar acessar todos os agentes novamente. maxlen número inteiro Número máximo de pessoas que podem aguardar na mesma fila. announce-round-seconds número inteiro Arredondamento dos segundos no anúncio do tempo. monitor-join yes|no Para unir os dois áudios(IN e OUT) quando se está gravando uma conversação joinempty yes|no|strict yes(chamadores podem entrar em uma fila sem membros ou somente com memebros indisponíveis)

no (chamadores não podem acessar filas sem membros)

strict(chamadores não podem acessar filas sem membros ou com membros indisponíveis) leavewhenempty yes|no|strict Para eliminar chamadores que já estão na fila. Mesmas opções de joinempty. eventwhencalled yes|no Setado para yes irá gerar alguns eventos de gerência(AgentCalled, AgentDump, AgentConnect, AgentComplete) eventmemberstatusoff yes|no Setado para no irá gerar o seguinte evento de gerência(QueueMemberStatus) reportholdtime yes|no Se você quiser reportar ao agente o tempo de espera do chamador antes de atende-lo. Uma fila é considerada vazia quando não possuir membros ou se nenhum de seus membros não estiverem disponíveis(agentes não logados).

Estratégias de ring de agentes em filas de atendimento

Ringall:

Estratégia padrão caso nada seja especificado.

Irá chamar todos os agentes ao mesmo tempo. Uma chamada entra e todos os agentes são acionados, porém quem atender antes irá “ganhar†a chamada.

Roundrobin:

A estratégia roundrobin nao pode ser confundida com a distribuição circular de chamadas, veja como este método trabalha.

O roundrobin lembra o último agente para quem ele _iniciou_ o envio da última chamada e inicia as tentativas subsequentes apartir do próximo agente. Se você tiver três agentes, e a primeira chamada seguir a ordem 1→2→3, a próxima chamada irá seguir a ordem 2→3→1, a próxima 3→2→1 e assim por diante.

É possível utilizar o método Roundrobin para realizar uma distribuição circular de chamadas atribuindo penalidades aos agentes. O Asterisk irá sempre iniciar a busca por agentes sem penalidades depois aos agentes com penalidade 1 e assim por diante.

Rrmemory:

Este método lembra da último agente que ele tentou _chamar_, independente por quem ele iniciou, enviando a próxima chamada para o agente seguinte ao que atendeu a última chamada, Se você tiver três agente e a primeira chamada seguir a rodem 1→2(e a chamada é atendida), então a próxima chamada irá seguir a ordem 3→1(e é atendida), a próxima irá seguir a ordem 2→3→1, e asssim por diante.

Se a primeira chamada, 1→2, estivesse em modo Roundrobin e ela fosse atendida, a segunda chamada iria começar pelo agente 2 novamente.

Fewestcalls:

Irá iniciar a busca pelos agentes que tem o menor número de chamadas atendidas.

Random:

Faz uma busca aleatória independente de uma regra específica.

Leastrecent:

Irá iniciar a busca pelo agente que foi chamado menos recentemente pela fila em questão.

Configuração de agentes

Assim em como a maioria dos arquivos de configuração do Asterisk, o /etc/asterisk/agents.conf possui uma seção geral([general]) e uma específica para agentes([agents]), como mostrado abaixo:

[general] parametro-geral01 = valor01 parametro-geral02 = valor02 ... parametro-geral03 = valor03 [agents] parametro01 = valor01 parametro02 = valor02 ... group=1 ; agent ⇒ agentid,agentpassword,name agent ⇒ 1001,4321,Silvio Santos agent ⇒ 1002,4321,Fausto Silve group=2 agent ⇒ 1003,4321,Didi Mocó agent ⇒ 1004,4321,João Cleber Parâmetros de configuração de agentes

Estes são os parâmetros disponíveis para os agentes de uma fila de atendimento. Somente um parâmetro pode ser especificado no contexto [general].

Parâmetros valores Descrição persistentagents yes|no Único parâmterro disponível no contexto [general]. Define se o login do agente ficará ou não armazenado no AstDB. Isso tem impacto após um reload do Asterisk. autologoff número inteiro Tempo em segundos para deslogar um agente da fila. Valor default é 15. ackall yes|no Se o agente logou usando a aplicação AgentCallbackLogin e esta opção estiver setada para yes, o Asterisk irá aguardar uma confirmação de login(tecla #) antes de disponibilizar este agente na fila. wrapuptime número inteiro Tempo em milisegundos que o agente irá ter de descanso antes de receber outra chamada. O default é 5000 ms. musiconhold nome da classe Define a nome da classe da música em espera para tocar aos agentes. O valor padrão é a classe default. updatecdr yes|no Define se irá alterar o canal de origem no CDR para o número do agente. Default é no. Se estiver setado para yes ele irá adicionar o nome do agente no CDR e não o número do ramal em que ele se encontra. recordagentcalls yes|no Grava ou não as chamadas atendidas pelos agentes. recordformat wav|gsm|wav49 Formato do arquivo de áudio das gravações de chamadas dos agentes. Padrão é wav. createlink yes|no Adiciona no userfield do CDR um link para acessar gravação da chamada. urlprefix http://server.ip/diretorio/ Adiciona um prefixo no link para o audio de uma chamada gravada. savecallsin /diretorio/de/gravacoes Diretorio para aramazenar as gravações de chamdas dos agentes. Padrão é /var/spool/asterisk/monitor custom_beep arquivo de audio Com esta opção você pode especificar um beep diferente para os agentes conectados

Exemplo de arquivo /etc/asterisk/agents.conf

[general] persistentagents=yes [agents] autologoff=15 ackcall=no wrapuptime=5000 musiconhold ⇒ default recordagentcalls=yes recordformat=gsm group=1 agent ⇒ 101,101,user1 agent ⇒ 102,102,user2 agent ⇒ 103,103,user3 group=2 agent ⇒ 8889,8889,operador 1 agent ⇒ 8888,8888,ivan group=3 agent ⇒ 8887,8887,operador 2 4.5 AGI 4.6 Operadores 4.6.1 Operadores Booleanos

4.6.2 Operadores Matemáticos

4.7 Exemplos completos de dialplan 5 Gerenciando o Asterisk 5.1 Gerenciamento de ramais sip show peers

zap show channels

5.2 Gerenciamento de troncos sip show users

zap show channels

show channels verbose

5.3 CDR Call detail record.

5.4 Troubleshooting 5.4.1 Logging

/etc/asterisk/logger.conf

/var/spool/asterisk/debug

/var/spool/asterisk/full

/var/spool/asterisk/messages

5.4.2 Eco

Canceladores de echo zaptel

MG2

aggressive Supression

5.4.3 Picotamento

Banda de rede

Latência

5.4.4 Delay

Jitter

5.4.5 Códigos SIP

Retirado da RFC do SIP:

Os códigos de resposta SIP são similares e extensíveis aos códigos de resposta HTTP/1.1. Nem todos os códigos.são apropriados, e somente aqueles que são apropriados são mostrados nesta seção deste material.

Outros códigos HTTP/1.1 não devem ser usados.

O SIP também define uma nova classe de códigos, 6xx.

1xx: Provisional — request received, continuing to process the request;

Provisional responses, also known as informational responses, indicate that the server contacted is performing some further action and does not yet have a definitive response. A server sends a 1xx response if it expects to take more than 200 ms to obtain a final response. Note that 1xx responses are not transmitted reliably. They never cause the client to send an ACK. Provisional (1xx) responses MAY contain message bodies, including session descriptions.

2xx: Success — the action was successfully received, understood, and accepted;

3xx: Redirection — further action needs to be taken in order to complete the request;

4xx: Client Error — the request contains bad syntax or cannot be fulfilled at this server;

5xx: Server Error — the server failed to fulfill an apparently valid request;

6xx: Global Failure — the request cannot be fulfilled at any server.

SIP response codes, class 1: Provisional messages

These are sent within a SIP dialogue

100 Trying

180 Ringing

181 Call Is Being Forwarded

182 Queued

183 Session Progress

SIP Response codes: 2xx class

The 2xx class of responses indicates a success

200 OK

202 accepted: Used for referrals

SIP response codes, class 3xx

The 3xx class of responses indicates a redirection of the call

300 Multiple Choices

301 Moved Permanently

302 Moved Temporarily

305 Use Proxy

380 Alternative Service

SIP responses, class 4: Request failures

400 Bad Request

401 Unauthorized: Used only by registrars. Proxys should use proxy authorization 407

402 Payment Required (Reserved for future use)

403 Forbidden

404 Not Found: User not found

405 Method Not Allowed

406 Not Acceptable

407 Proxy Authentication Required

408 Request Timeout: Couldn't find the user in time

410 Gone: The user existed once, but is not available here any more.

413 Request Entity Too Large

414 Request-URI Too Long

415 Unsupported Media Type

416 Unsupported URI Scheme

420 Bad Extension: Bad SIP Protocol Extension used, not understood by the server

421 Extension Required

423 Interval Too Brief

480 Temporarily Unavailable

481 Call/Transaction Does Not Exist

482 Loop Detected

483 Too Many Hops

484 Address Incomplete

485 Ambiguous

486 Busy Here

487 Request Terminated

488 Not Acceptable Here

491 Request Pending

493 Undecipherable: Could not decrypt S/MIME body part

SIP responses, class 5: Server failures

500 Server Internal Error

501 Not Implemented: The SIP request method is not implemented here

502 Bad Gateway

503 Service Unavailable

504 Server Time-out

505 Version Not Supported: The server does not support this version of the SIP protocol

513 Message Too Large

SIP response codes, class 6: Global failures

600 Busy Everywhere

603 Decline

604 Does Not Exist Anywhere

606 Not Acceptable

5.5 Backup O que copiar...

5.6 Tunning

5.7 Segurança

5.8 Sistemas distribuídos e alta disponibilidade 6 Dicas e Truques I. Ãndice com todas as aplicações disponíveis na série 1.4 do Asterisk II. Ãndice com todas as variáveis internas do Asterisk III. Siglas e Dicionário

[1] Agência Nacional de Telecomunicações - http://www.anatel.gov.br [2] Internet Protocol – O protocolo da Internet. [3] ARPANET – DEFINICAO [4] Uma lista completa de CODECs utilizados pelos Asterisk , você encontra no capítulo 2 deste livro. [5] Lista de desenvolvedores do Asterisk - htttp://lists.digium.com.br/asterisk-devel [6] Linux Standard Base – http://www.lsb.org [7] Asterisk Gateway Interface - Você pode encontrar mais detalhes sobre o que é AGI no capítulo deste livro. [8] Saiba mais sobre o logger.conf no capítulo 6 deste livro. [9] Tipos de mídia podem ser encontrados neste link: http://www.iana.org/assignments/media-types/ [10] Unicall – Mais informações sobre este tipo de canal você encontra em http://www.soft-switch.org/unicall [11] Public Switched Telephony Network [12] http://www.zapatatelephony.org [13] Veja mais sobre transcoding no capítulo 5 deste livro(Gerenciando o Asterisk) [14] Lembre-se, o arquivo /etc/zaptel.conf não faz parte do projeto Asterisk e sim do projeto Zapata Telephony – http://www.zapatatelephony.org [15] Apartir do momento em que uma caixa de correio já está operando(contém mensagens). Não é possível alterar os formatos de áudio. Isso irá ocasionar problemas no playback das mensagens do correio de voz. [16] Call Center Passivo é aquele que somente recebe chamdas., não origina(Call Center Ativo) [17] Agentes também são conhecidos como PAs, ou Postos de Atendimento. [18] Service Level Agreement

 
apostila_asterisk.txt (18909 views) · Modificado em: 30/04/2010 01:48 por denis
 
Recent changes RSS feed Creative Commons License Donate Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Powered by Joom Prosolution

Apoio


 

Blog


Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238

Warning: fsockopen() [function.fsockopen]: unable to connect to www.voipmania.com.br:80 (Unknown error) in /var/www/portal/modules/mod_slick_rss/simplepie.inc on line 2238

fsockopen error:

Login






Perdeu a senha?
Cadastre-se agora!
Advertisement

Enquete

Meu dia a dia com o Asterisk é: