20.11  
Inicio
Principal
Inicio
Noticias
Artigos
Regras da Lista
Assinar a Lista
Histórico da Lista
Galeria de Imagens
Contador Usuários FUG
FUGs Estaduais
Downloads
Enquetes
FAQ
Resumo do Site
Links
Pesquisar
Contato
Sobre a FUG-BR
RSS
-
DOC-BR (FUG BR)
Introdução
Projeto DOC-BR
Handbook
FAQ Oficial
-
+ Noticias
Alertas de Seguranca
Alertas em Ports
BSD em Geral
DaemonNews (Ingles)
MyFreeBSD
Todas Categorias
-
Login
Nome de Usuário

Senha

Lembrar login
Esqueceu sua senha?
Sem conta? Crie uma


(Artigo 3) - Asterisk e FreeBSD o Futuro da Telefonia IP. PDF Imprimir E-mail
Por Marcelo Araujo   
23/07/2006
ImageNo último artigo da série "Asterisk e FreeBSD o Futuro da Telefonia IP", vamos configurar uma placa FXO (Foreign eXchange Office) e programar um contexto para auto-atendimento. Iremos também configurar algumas features de sucesso do ASTERISK como, AudioConferência e filas de CallBack.

1 - Introdução a portas FXO.

    Uma porta FXO(Foreign eXchange Office) nos possibilita realmente brincarmos e nos divertimos com o ASTERISK, até um tempo atrás eu não tinha disponível um DISPOSITIVO com esta porta, apesar de já ter configurado algumas placas da Digium, me sentia frustrado de não possuir uma dessas em meu ambiente computacional.
Existem algumas placas que costumamos chamar de CLONES, podemos encontrá-las a um valor acessível no mercado:

                DigiNetwork X100P
                Nacional Digistar

As placas CLONES possuem um CHIPSET compatível com as funcionalidades implementadas no MODULO ZAPTEL.
Pude testar 2 placas CLONES, uma com um CHIPSET Motorola(62802-51) e outra Ambient(3200), essas placas são os famosos WinModens PCI que não servem para praticamente nenhuma aplicação funcional.

    Em meu primeiro teste com a placa MOTOROLA, encontrei em seu circuito um *VARISTOR* em CURTO, quando alguem ligava via PSTN(Public Switched Telephone Network) a placa ao detectar o aumento de voltagem na linha, ARMAVA a porta antes mesmo de completar um RING no telefone, não permitindo o tratamento via  ASTERISK.
Removendo o *VARISTOR* da porta LINE da placa, consegui burlar o problema, mas desprotegi boa parte do circuito. 
A segunda placa Ambient(3200), foi uma doação de um grande amigo que participou da maioria dos testes via PSTN, ele estava prestes a jogar esta placa no LIXO, pois não encontrava utilidade para ela, além do acumulo de poeira.
Quero agradecer publicamente a doação do Marcelo Piaz Vianna, que possibilitou a conclusão desta 3o parte do artigo.

Hoje possuo o seguinte ambiente de testes em minha casa:

Image

 2 - Configurando uma porta FXO.

Existe uma grande confusão quando se trata de portas e sinalizações, vou tentar da forma mais clara possível esclarecer estas dúvidas.

        Uma porta FXO recebe uma sinalização FXS.
        Uma porta FXS recebe uma sinalização FXO.

Exemplo:

        FXS(Tomada da parede) --------[SINALIZACAO FXS]------------> FXO(Placa PCI)
        FXO(Telefone ou PLACA) ------[SINALIZACAO FXO]-----------> FXS(ATA ou PLACA PCI)

Quando instalarmos o ASTERISK, automaticamente, como dependência para algumas funcionalidades como o MeetMe, o pacote ZAPTEL será instalado.

    # arquivo /usr/ports/net/asterisk/Makefile
  RUN_DEPENDS+=   ${LOCALBASE}/include/zaptel.h:${PORTSDIR}/misc/zaptel

Para entendermos melhor o funcionamento das ferramentas de teste do zaptel, vamos atualizar a coleção de PORTS MISC e fazer a reinstalação do pacote.
Não irei entrar em detalhes de como atualizar via CVSUP ou CSUP, pois existem ótimos artigos públicados aqui no site da FUG.

    # Instalando o pacote ZAPTEL.
    nagazaki# cd /usr/ports/misc/zaptel/
  nagazaki# make deinstall && make all reinstall clean


    # Ferramentas de testes.
    nagazaki# pwd
  /usr/ports/misc/zaptel/work/zaptel-bsd-1.0/test

    Existe um sub-diretório chamado test, com algumas ferramentas para testarmos o funcionamento da porta FXO, executando o make install, todas as ferramentas são instaladas no sistema.

    # Configurando o zaptel.conf
    nagazaki# vi /usr/local/etc/zaptel.conf

    loadzone = br
    defaultzone = br
    fxsks = 1

O primeiro parametro loadzone permite especificar os tons que podem ser gerados por esta interface.
Na instalação padrão encontrada nos ports, não existe um tone_zone para o Brasil, vamos adicionar essa função.

    nagazaki# pwd
    /usr/ports/misc/zaptel/work/zaptel-bsd-1.0/ztcfg
    nagazaki# vi zonedata.c
    Após o ultimo zone "China", vamos adicionar o zone para o Brasil.

    { 21, "br", "Brazil", { 1000, 4000 },
    {
        { ZT_TONE_DIALTONE, "425" },
        { ZT_TONE_BUSY, "425/250,0/250" },
        { ZT_TONE_RINGTONE, "425/1000,0/4000" },
        { ZT_TONE_CONGESTION, "425/250,0/250,425/750,0/250" },
        { ZT_TONE_CALLWAIT, "425/50,0/1000" },
        { ZT_TONE_DIALRECALL, "350+440" },
        { ZT_TONE_RECORDTONE, "425/250,0/250" },
        { ZT_TONE_INFO, "950/330,1400/330,1800/330" },
        { ZT_TONE_STUTTER, "350+440" } },
    },

    # Agora vamos compilar e instalar novamente a libtonezone.a e o tonezone.h.
    nagazaki# pwd
  /usr/ports/misc/zaptel/work/zaptel-bsd-1.0/ztcfg
  nagazaki# make
  nagazaki# make install
  /usr/bin/install -o root -g wheel -m 755 -s ztcfg /usr/local/bin/ /usr/bin/install -o root -g wheel -m 644 libtonezone.a /usr/local/lib/   
  /usr/bin/install -o root -g wheel -m 644 tonezone.h /usr/local/include/
  /usr/bin/install -o root -g wheel -m 644 ../zaptel/zaptel.h /usr/local/include/


    Técnicamente você adicionando ou não o zone para o Brasil, os testes deste artigo devem funcionar corretamente usando o zone "us", este exemplo de zona é para conhecimento das possibilidades de alterações do código fonte do pacote.
O parametro fxsks sinaliza a porta como FXS Kewlstart, para receber e efetuar ligações via PSTN.

    # Vamos agora startar os modulos zaptel.
    nagazaki# /usr/local/etc/rc.d/zaptel.sh.sample start

    # Veremos a seguinte saida no syslog.
    # Note o registro da ZONA que adicionamos no zonedata.c
    Echo Canceller: MARK3
  ZapTel device: vendor=e159 device=1 subvendor=8086
  wcfxo0: <Generic Clone> port 0x9000-0x90ff mem 0xd4000000-0xd4000fff irq 19 at device 11.0 on pci0
  ZapTel Attach for wcfxo0: deviceID : 0xe159
  wcfxo0: [FAST]
  wcfxo: DAA mode is 'FCC'
  Found a Wildcard FXO: Generic Clone
  ZapTel device loaded.
  Registered tone zone 21 (Brazil)
    # Testando o canal FXO
    nagazaki# ztcfg -vv
3 - Configurando o arquivo zapata.conf.

Image Por padrão o arquivo zapata.conf vem com diversas configurações, iremos em um primeiro momento limpar este arquivo.

    nagazaki# cat /dev/null > /usr/local/etc/asterisk/zapata.conf

    O Arquivo zapata.conf tem por finalidade controlar todas as portas reconhecidas pelos módulos zaptel, abordaremos aqui os parâmetros principais para a conclusão dos nossos testes, não siga apenas este artigo como referência, pois o ZAPATA é muito poderoso e possui muitos recursos aqui não mostrados.

    # Configurando o zapata.conf.
    nagazaki# vi /usr/local/etc/asterisk/zapata.conf

    [channels]
    busydetect=4
    busycount=7
    immediate=yes
    context=receive
    signalling=fxs_ks
    callerid=asreceived
    echocancel=yes
    channel => 1

    Estamos aqui criando a entrada para os canais zaptel, logo abaixo podemos ver algumas descrições desta configuração.

    Busydetect = Especificamos quantos tons de ocupados antes de enviarmos um sinal de Hangup().
    Busycount = Especificamos a intensidade do sinal de ocupado, na maioria dos países é 500msec Ligado e 500msec Desligado.
    Callerid = Especificamos o número que será enviado quando efetivarmos uma ligação via PSTN, essa configuração vai depender muito de sua OPERADORA DE TELEFONIA e os serviços contratados.
    Signalling = O Tipo de sinalização que nossa porta irá receber.
    Context = Contexto que nossa porta tera no arquivo extensions.conf.
    Channel = Especificamos qual o canal a ser usado na PLACA.

4 - Configurando o contexto para o auto-atendimento para o canal zaptel.

    Em meu ambiente de testes, quando alguem faz uma chamada via PSTN para a central Asterisk, redireciono a ligação para um telefone SIP e caso ninguém atenda, redireciono novamente para uma URA(Unidade de resposta audivel).

    # Configurando extensions.conf
    nagazaki# vi /usr/local/etc/asterisk/extensions.conf

    [receive]
    exten => s,1,Answer()
    exten => s,2,Dial(SIP/araujo,10)
    exten => s,3,Goto(ura_home,s,1)

Note que o contexto criado é o mesmo especificado no arquivo zapata.conf.
Em um primeiro momento o asterisk captura a chamada com o Answer() e joga para o client SIP araujo durante 10 segundos.
Caso o cliente SIP não atenda neste período a chamada é redirecionada para o contexto ura_home em sua primeira extensão.

    # Criando o contexto ura_home.

    [ura_home]
    exten => s,1,Background(menu)
    exten => 1,1,Playback(michele)
    exten => 1,2,Voicemail(michele@casa)
    exten => 2,1,Playback(araujo)
    exten => 2,2,Voicemail(araujo@casa)
    exten => 3,1,Playback(chico)
    exten => 3,2,Voicemail(chico@casa)
    exten => 4,1,VoicemailMain(9010@araujo)
Neste contexto, gravei algumas opções para o originador da chamada, indicando para qual pessoa ele poderá deixar o seu recado.
Para verificar os  recados, criei a opção *4* que me direciona para a parte administrativa das contas de VoiceMail.

5 - Criando filas de atendimento DAC(Distribution Automatic Carrier).

    A plataforma IP já é reconhecida como sinônimo de mobilidade, redução de custos e aumento de produtividade pelos contact centers.
    Segundo um levantamento feito pela Frost & Sullivan, o mercado latino-americano fechou o ano de 2005 com 8,9 mil PAs IP(Postos de atendimento), 50% deste montante esta no Brasil, 20% no Cone Sul e 15% no México, o restante esta dividido entre outras regiões, como Andina e Caribe.
    Como é esperado para a maior adoção da telefonia IP, os preços dos ramais IP'S já está próximo dos ramais digitais, visto que a mobilidade e facilidade de implantação desta tecnologia fomenta todo o mercado de fabricantes de telefones e equipamentos de telecomunicações.
    As vantagens de se ter um Contact Center falando IP, é a mobilidade para a troca de postos de atendimento, ao qual irei me referir pela sigla PA. Esta troca constante de ambiente ou até mesmo de localidade, permite o crescimento de PA's sem ter que ampliar a estrutura física em um mesmo prédio, ou até mesmo criar fragmentações do Contact Center em diversos países e regiões.

    Alguns conceitos usados para a programação de Contact Centers.
    Agentes:
    - Podem ser fixos ou móveis 
    Filas:
    - Formada por um conjunto de agentes e possuem listas de espera e prioridade para atendimento.
       
    Vamos configurar para este exemplo, 2 agentes como "call back", 1 fila com esses dois agentes  e usar "Round-Robin" para a escolha dos agentes para atenderem as chamadas.
    As filas podem ser configuradas no modelo FIFO(Primeiro que entra é o primeiro que sai) ou com o modelo que não será abordado neste artigo, QUEUE_PRIO, prioridade de enfileiramento.

    # Configurando a fila queues.conf
    # Existem diversas configurações padrões no arquivo queues.conf, iremos apenas adicionar uma fila como exemplo no final deste arquivo.
   
    nagazaki# pwd
    /usr/local/etc/asterisk
    nagazaki# vi queues.conf

  [atendimento]
    wrapuptime=0
  timeout=15
  strategy=roundrobin
  retry=5
  music=default
  monitor-join=yes
  monitor-format=gsm
  member=agent/9010
  member=agent/9030
  maxlen=0
  leavewehenempty=no
  joinempty=yes
  announce-holdtime=yes
  announce-frequency=30

    Existem algumas estratégias para montarmos uma fila de atendimento, no setting "strategy" podemos modificar isso.

    ringall = Todos os ramais da fila tocam ao mesmo tempo.
    roundrobin = Distribui igualmente as chamadas para todos os ramais.
    leastrecent = Distribuir para a interface que menos recebeu chamadas.
    fewestcalls = Toca aquela com menos chamadas completadas.
    random = Toca um ramal aleatoriamente.
    rrmemory = Roundrobin com memória, lembra onde deixou a última chamada.

    # Configurando os Agentes em agents.conf
    # No final do arquivo dentro do contexto "agents", iremos adicionar nossos ramais.
    agent => 9030,12345,Marcelo Araujo
    agent => 9010,12345,Operator Bastard From Hell

    # Configurar o AgentCallback no extensions.conf

    exten => 5000,1,Wait(1)
    exten => 5000,2,AgentCallbackLogin(|${CALLERIDNUM})
    exten => 08000,1,Queue(atendimento|tThH|||100)

    Para entendermos o processo deste modelo de configuração para o DAC, iremos verificar os passos tomados por um atendente de Contact Center em seu dia de trabalho.
    O Atendente chega a seu PA e disca para o número "5000", o AgentLogin pede por uma extensão válida e logo após a senha desta extensão, finalizando pede a localização desta extensão.

    Exemplo:
    Disque 5000.
    Digite 9030#.
    Digite 12345#.
    Digite 9010#.
    Neste exemplo, entramos com nosso login "RAMAL" e redirecionamos nossas ligaçõse para o ramal "9010".
    Logo quando alguem cair na Fila de atendimento e nosso ramal for contactado, automaticamente será redirecionado para o ramal "9010".
    Podemos usar a CLI(Command Line Interface) para verificarmos quais agentes estão configurados e logados na fila atendimento.

  *CLI> show queue atendimento
  atendimento  has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
  Members:
  agent/9030 (Unavailable) has taken no calls yet
  agent/9010 (Unavailable) has taken no calls yet
  No Callers

     Nenhum atendente logado, podemos notar que a estratégia tomada nesta configuração foi "ringall".

  *CLI> show queue atendimento
  atendimento  has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
  Members:
  agent/9030 (Not in use) has taken no calls yet
  agent/9010 (Unavailable) has taken no calls yet
  No Callers

     Um atendente logado como agente "9030" e nenhuma ligação atendida na fila.
  *CLI> show agents
  9030         (Marcelo Araujo) not logged in (musiconhold is 'default')
  9010         (Operator Bastard from hell) available at '9010' (musiconhold is 'default')
  2 agents configured [1 online , 1 offline]

     Podemos verificar para onde determinado AGENTE redirecionou suas chamadas.

  *CLI> show queue atendimento
  atendimento  has 0 calls (max unlimited) in 'roundrobin' strategy (0s holdtime), W:0, C:3, A:0, SL:0.0% within 0s
  Members:
  agent/9020 (Not in use) has taken 2 calls (last was 5 secs ago)
  agent/9010 (Not in use) has taken 1 calls (last was 20 secs ago)
  No Callers


    Agora podemos notar que os dois agentes estão logados, o primeiro agente "9020" recebeu 2 ligações, como estamos usando a estratégia "Round-robin" o próximo atendente a receber a ligação será o "9010".

Image 6 - Configurando um sitema de AudioConferência.

    É possível criar salas de "audioconferência", com este elemento podemos agendar reuniões em determinado canal e solicitar que cada integrante que digite uma senha única para participar.
    Existem alguns casos de sucesso como o da GM Motors, que após a implementação de um IPBX, teve um aumento significativo no uso de AudioConferência em seu ambiente de trabalho.
    Para utilizarmos o recurso de MeetMe é necessário carregar o modulo ztdummy, pois a aplicação usa os recursos de CLOCK deste driver.
    O arquivo meetme.conf é responsável pelas configurações dos canais e suas respectivas senhas.

    # Configurando o arquivo meetme.conf

    No contexto "rooms" vamos adicionar o canal e o PIN(Private Identification Number) para acesso ao recurso.

    conf => reuniao,12345,1122

    reuniao = Nome do canal de AudioConferência.
    12345 = Senha para ingressar no contexto.
    1122 = Senha administrativa.

    # No arquivo extensions.conf vamos criar uma extensão para a AudioConferência
    exten => 0011,1,Wait(1)
    exten => 011,2,MeetMe(reuniao|Mpv)
    exten => 011,3,Hangup()

    Ao ingressar na AudioConferência será solicitado o PIN NUMBER.
    O primeiro ramal a entrar no contexto da AudioConferência receberá uma música de espera até que outro ramal entre no mesmo contexto, após outro ramal logar-se na AudioConferência será emitido um BEEP e liberado o canal para a reunião.

    Para verificar quem esta conectado no contexto "reuniao".
    *CLI> meetme list reuniao

    Outros comandos.
    *CLI> help meetme
7 - Conclusão.

 ImageEspero ter contribuído um pouco para o avanço da telefonia IP e o uso do ASTERISK no sistema FreeBSD.
Quero apenas salientar que a escolha pelo sistema FreeBSD não foi por acaso, usei outros sistemas livres durante vários anos e por uma série de testes e experiências pude constatar que os mesmos estão longe de acompanhar a evolução do FreeBSD.
       
Sobre o autor desta série de artigos:
Marcelo Araujo é membro do BSDCertification atuando no time Translators Brazilian Portuguese, mantém os ports ASK e MAILREP , usa FreeBSD para resolver problemas desde a versão 3.2.
-
Marcelo Araujo
araujo AT fug DOT com DOT br

Comentários
Muito Interessante
Por Este endereço de e-mail está sendo protegido de spam, você precisa de Javascript habilitado para vê-lo em 24/07/2006 15:34:01
Mencionando um dos assuntos mais focalizados na alta tecnologia hoje, conseguimos obter esta série feita pelo nosso amigo Marcelo Araújo, na qual, com certeza, teremos várias sugestões de uma possível 2º série ou novos artigos focados no assunto.  
 
Muito bom o artigo, Obrigado Marcelo! :)
Arrebentando no Asterisk
Por Este endereço de e-mail está sendo protegido de spam, você precisa de Javascript habilitado para vê-lo em 25/07/2006 13:44:52
Realente seus artigos sobre o FreeBSD + Asterisk estão ótimos, eu já trabalhei com tele-conferencia, utilizando FreeBSD, porém o foco era ensino a distância, e eu utilizava o padrão h323, com gatekeeper e MCU. 
Espero poder assistir sua palestra, certamente ela será aprovada. 
Parabéns
Bem legal
Por Augusto em 25/07/2006 16:46:36
Obrigado pelo artigo, me ajudou com o zaptel :)
Compartilhando conhecimento
Por Este endereço de e-mail está sendo protegido de spam, você precisa de Javascript habilitado para vê-lo em 26/07/2006 09:05:24
Muito legal! Achei interessante os comentários sobre o HW das placas clones...
Parabéns...
Por Charles D. Nunes em 15/11/2006 19:11:10
Parabéns Marcelo pelo seus artigos e pelo seu brilhantismo em enlucidar e passar de forma clara e coesa o passo a passo de uma configuração... existem profissionais de materiais que adquirimos que escrevem, explicam, mas parece que a intenção principal não era esclarecer, pois colocam muitas variantes em seus exemplos o que aumenta a possibilidade de falhas e erros... CONTATO: Gostariamos de estabelecer um acordo de consultoria a distância sobre configurações de um servidor ASTERISK, então oferecemos à você ou à algum outro profissional que você nos indicar... obrigado. Ass. Charles - 41 - 3363-4535, 8419-3352 e 9601-0103.
Consultoria a distancia.
Por Marcelo Araujo em 21/11/2006 00:32:25
Olá Charles, favor entrar em contato via e-mail ..........
Parabéns!
Por Clerton Sávio em 08/02/2007 16:50:25
Muito bons os artigos, vc está de parabéns


Comente!*
Nome:
E-mail
Homepage
Título:
Comentário:

Código:* Code

Última Atualização ( 24/07/2006 )
 
< Anterior   Próximo >
FUG-BR - Espalhando BSD
Dicas Rápidas:
Quer saber todos os arquivos que um dado port instalou? Use pkg_info -L <nome do port>. Quer reler a mensagem de pós-instalação de um port já instalado? Use pkg_info -D <nome do port>. Quer consultar informações de um port sem precisar mencionar seu nome e versão exatamente como registrados? Use pkg_info -x <expressao>, por exemplo, pkg_info -L -x perl
 




Wallpapers
FreeBSD Security Advisories
  • FreeBSD-SA-08:10.nd6
  • FreeBSD-SA-08:09.icmp6
  • FreeBSD-SA-08:08.nmount
  • FreeBSD-SA-08:07.amd64
  • FreeBSD-SA-08:06.bind
  • FreeBSD-SA-08:05.openssh
  • FreeBSD-SA-08:04.ipsec
  • FreeBSD-SA-08:03.sendfile
  • FreeBSD-SA-08:02.libc

  • Online:
    Nós temos 21 visitantes online


    Devil Store - Sua loja BSD
    FreeBSD Brasil LTDA

    FUG-BR: Desde 1999, espalhando BSD pelo Brasil.