sexta-feira, 8 de março de 2013

O que é o Asterisk?


Bom Galera!!!
Decidi fazer um post aqui, para pessoas que não conhece esse sistema fantástico que é o ASTERISK. Vou fazer uma breve explicação para que fiquem mais informadas do assunto. Tive conversando com alguns amigos que trabalham na área de informática, e poucos conhece sobre o sistema e por isso estou escrevendo este POST.

Bom, tudo que quero explicar já tem em vários sites pela rede, então encolhi um e disponibilizei para vocês.

Asterisk é um poderoso software livre que permite transformar um ordinário PC numa poderosa central telefónica multi protocolo. É licenciado através de uma licença do tipo GPL - Gnu Public License. A Digium, empresa que promove o Asterisk, investe em ambos, o desenvolvimento do código fonte e em hardware de telefonia de baixo custo que funciona com o Asterisk. O Asterisk funciona sobre uma plataforma Linux ou outras plataformas Unix com ou sem hardware conectando à rede pública de telefonia.



O Asterisk permite conectividade em tempo real entre a rede pública de telefonia e redes VoIP. A rede pública de telefonia é frequentemente referida pela sua sigla em inglês PSTN (Public Switched Telephony Network).
O Asterisk integra telefones, computadores, Rede LAN e a Internet numa única plataforma. Baseado em tecnologias abertas e protocolos padrões de mercado, este sistema tem as funcionalidades de correio de voz, correio electrónico, atendimento automático, unidade de resposta audível (URA), distribuição automática de chamadas (DAC) e integração entre telefonia e computadores, além da conectividade com o PBX da empresa e com a rede pública de telefonia comutada (STFC) e móvel.

Características do sistema:

• Sistema de telefonia IP-PBX;
• Distribuidor Automático de Chamadas (DAC);
• Unidade de Resposta Audível (URA);
• Correio de Voz com integração com o correio electrónico;
• Relatório e estatísticas das chamadas;
• Facilidade de administração e gestão através da Web;
• Compatível com os PBX’s analógicos;
• Compatível com os telefones digitais IP;
• Conectividade com troncos analógicos e digitais;
• Sistema voltado para pequenas e médias empresas.

Funcionamento do Asterisk:


O Asterisk interliga-se com a rede de dados através de uma porta Ethernet de 100Mbps, com a possibilidade de activar um firewall e fazer o controle de banda para os telefones IPs, caso seja necessário.

Para interligar-se com o PBX Analógico ou STFC, o Asterisk possui vários tipos de modelos de placas, com interfaces FXS, FXO, E1, T1 e PRI. É possível também utilizar qualquer produto VoIP padrão de mercado, como por exemplo do fabricante Sipura, Linksys, Grandstream, Mediatrix, Micronet ou outro qualquer, tanto para portas FXS como para portas FXO.
A figura mostra um exemplo de uma empresa utilizando o sistema Asterisk, onde todos os telefones IPs locais e de sites remotos conectam-se ao servidor VoIP localizado na matriz através da Internet. Como exemplo de mobilidade, o IPFone utilizado na Residência tem acesso a todos os ramais da empresa, incluindo os ramais analógicos da central PBX, sendo possível também capturar uma linha telefónica de qualquer PBX, tanto na matriz com nos sites remotos.

Benefícios do Asterisk, além dos serviços tradicionais de telefonia:

• Plano unificado de numeração entre vários escritórios distribuídos em várias localidades;
• Interligação de centrais PBX, permitindo que os ramos de 2 ou mais PBX falem entre si com custo zero;
• Possibilidade de capturar uma linha remota de um outro PBX, fazendo com que a ligação internacional e nacional sejam tarifadas como ligação local;
• Possibilidade de conexão simultânea com diversas redes VoIP;
• Arquitectura distribuída e com gestão centralizado;
• Facilidade de administração via Web;
• Mensagem unificada;
• Média de economia de 50% para ligações internacionais e nacionais;
• Provê funcionalidades de PBX de grande porte com custo acessível também para as pequenas e médias empresas;
• Permite a criação de ramais para clientes, fornecedores e parceiros, facilitando a comunicação sem que haja custo na ligação;
• Integração da empresa, aumentando a produtividade dos funcionários em deslocamento: vendedores, executivos em viagem, “presença virtual”.

Comentário

A telefonia convencional está a mudar e PBXs baseados em comutação de circuitos estão a tornar-se produtos obsoletos. A tecnologia VoIP expandiu muito nos últimos anos e está a começar a tornar-se o padrão de comunicação das empresas corporativas e até das pequenas/médias empresas e residências.

Os novos equipamentos IP-PBXs permitem uma verdadeira convergência na área de telecomunicações, integrando voz e dados na mesma rede, proporcionando a unificação de mensagens, o aumento de produtividade e fornecendo todos esses elementos e muito mais num único produto, fácil de gerir.

Baseada em uma solução software, esta arquitectura assegura uma grande escalabilidade, redução de custos (sem a necessidade de trocar o equipamento em caso de expansão), flexibilidade, confiabilidade, facilidade de administrar e gerir, suporte para equipamentos legados, tudo isso num sistema que opera no mesmo ambiente heterogêneo da Rede de dados. Sem dúvida, uma grande evolução nas telecomunicações.

fonte: http://www.asterisk.pt/o-que-e-o-asterisk.html

quinta-feira, 7 de março de 2013

Script php+agi Portabilidade celular


Bom galera, algum tempo atrás postei um script de portabilidade de operadoras de celular na lista asteriskBrasil usando a classe agiphp, esse script é bem simples, porém, com um pouco de imaginação da pra ir além.

Utilizo como servidor de consulta a DRA Telecom, basta contratar um dos planos para ter acesso a URL de consulta, o usuário neste exemplo é demo e permite somente 20 consultas diária.

Utilizei algumas informações de alguns posts encontrados na lista.

Extensions .conf

exten => _0XX[6-9]XXXXXXX,1,NoOp(---> DE ${CALLERID(num)} PARA ${EXTEN} <--)
exten => _0XX[6-9]XXXXXXX,n,AGI(portabilidade.php,${EXTEN:1})
exten => _0XX[6-9]XXXXXXX,n,NoOp(---> A OPERADORA DISCADA E: ${OPERADORA} <---)
exten => _0XX[6-9]XXXXXXX,n,Hangup()

portabilidade.php

#!/usr/bin/php -q
<?php
include("phpagi.php");
//version: Danilo Almeida
//package: AGI Portabilidade PHP
//copyright: Copyright (C) Open Source.
//license: GNU/GPL, see LICENSE.php
//Agi para consulta de operadora para celulares portados
//Acesso ao banco de dados fornecido por http://dratelecom.com.br
//Contato: daniloricalmeida@gmail.com

$agi = new AGI(); //instanciando objeto
$numero = $argv[1]; //pegando numero discado no extensions.conf
$numero = $numero; //DDD+NUMERO
$url="http://portabilidade.dratelecom.com.br/consulta.php?number=$numero&user=demo&pass=demo";
$chave = file_get_contents($url);

switch($chave){
    case 5312 :
        $operadora = 'CTBC CELULAR S.A' ;
        break;
        case 55314 :
        $operadora = 'BRASIL TELECOM CELULAR' ;
        break;
        case 55320 :
        $operadora = 'VIVO' ;
        break;
        case 55321 :
        $operadora = 'AMERICEL' ;
        break;
        case 55323 :
        $operadora = 'TELEMIG CELULAR' ;
        break;
        case 55324 :
        $operadora = 'AMERICEL' ;
       break;
        case 55331 :
        $operadora = 'TNL PCS' ;
        break;
        case 55337 :
        $operadora = 'UNICEL DO BRASIL' ;
        break;
        case 55341 :
        $operadora = 'TIM CELULAR' ;
        break;
        case 55343 :
        $operadora = 'SERCOMTEL CELULAR' ;
        break;
        case 55349 :
        $operadora = 'OPTIONS COMP' ;
        break;
        case 55377 :
        $operadora = 'MCS (Nextel)' ;
        break;
        case 55390 :
        $operadora = 'TELCOM TELECOMUNICACOES DO BRASIL' ;
        break;
        case 55391 :
        $operadora = 'FALKLAND TECNOLOGIA' ;
        break;
        case 55392 :
        $operadora = 'IRIDIUM' ;
        break;
        case 55393 :
        $operadora = 'GLOBALSTAR DO BRASIL' ;
        break;
}

$agi->set_variable("OPERADORA", $operadora);
exit();
?>

Retorno CLI

-- Executing [91538563@contexto-ramais-voip:1] NoOp("SIP/5001-0000011d", "---> DE 5001 PARA 91538563 <--") in new stack
    -- Executing [91538563@contexto-ramais-voip:2] AGI("SIP/5001-0000011d", "portabilidade.php,4391538563") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/portabilidade.php
    -- <SIP/5001-0000011d>AGI Script portabilidade.php completed, returning 0
    -- Executing [91538563@contexto-ramais-voip:3] NoOp("SIP/5001-0000011d", "---> A OPERADORA DISCADA E: VIVO <---") in new stack

Lembrando que estou utilizando a classe agiphp, a mesma deve estar no diretório /var/lib/asterisk/agi-bin/ juntamente com o arquivo portabilidade.php.
Deve-se também dar permissão de execução nos arquivos para que o asterisk possa executar o mesmo.

qualquer dúvida estou a disposição, devida a correria acabo fazendo os tutoriais correndo e pode ser que fique alguma coisa para trás..rsrs

abraço galera e até a próxima.

Danilo Almeida

Tutorial - CAllBACK asterisk


Hoje precisei criar um callback na empresa que trabalho, esse callback funciona da seguinte maneira:

Ligo na empresa do meu celular(ou de qualquer número que bine) de qualquer região, o servidor pega o meu número, desliga a chamada e me retorna, após isso, digito o numero que desejo fazer a ligação e ele disca e completa para mim.
Isso foi necessário, pois nossos celulares só fazem ligação para região 43...

Então criei uma tutorial Básico para quem necessitar.

Callback para ligações externas

primeiro, criaremos a regra de entrada, nesse caso estou simulando uma ligação entrando por um
determinado DDR de um link E1, mais pode ser ligações de entrada de qualquer tipo (FXO, SIP,
Analógico, etc) bastando apenas ser alterado para cada situação.

[entrada]

exten => _3200,1,NoOp(Realizando CallBack )
exten => _3200,2,Wait(1)
exten => _3200,3,Macro(callback,)
exten => _3200,4,Hangup()

linha 1 - mostra na tela a descrição dentro dos parenteses "()"
linha 2 - espera um segundo antes de continuar
linha 3 - vai para macro callback que veremos a seguir.
linha 4 - derruba a ligação após colher as primeiras informações.

agora, criaremos uma macro callback onde criaremos o arquivo .call que fará o retorno da ligação para o número que ligou.


[macro-callback]
exten => s,1,set(CALLBACK-FILE=/var/spool/asterisk/outgoing/${MACRO_EXTEN}-${CALLERID(num)}.call)
exten => s,n,system(echo Channel: SIP/0${CALLERID(num)}@g1entrada > ${CALLBACK-FILE})
exten => s,n,system(echo Context: saida-callback >> ${CALLBACK-FILE})
exten => s,n,system(echo Extension: 1000 >> ${CALLBACK-FILE})
exten => s,n,system(echo Callerid: ${CALLERID(num)} >> ${CALLBACK-FILE})
exten => s,n,system(echo MaxRetries: 2 >> ${CALLBACK-FILE})
exten => s,n,system(echo RetryTime: 30 >> ${CALLBACK-FILE})
exten => s,n,system(echo WaitTime: 30 >> ${CALLBACK-FILE})
exten => s,n,MacroExit


linha 1 - seto uma variável com o diretório /var/spool/asterisk/outgoing/ + o nome do arquivo que será criado automaticamente.
linhas n - no restante das linhas, escrevo dentro do arquivo as opções necessárias para rodar um arquivo .call (vejam mais informações de arquivos .call para entenderem melhor caso tenham dúvidas).
linha 2 - canal que sairá a ligação, no meu caso estou enviando pela operadora da empresa em que trabalho.
linha 3 - contexto que será direcionado para que a pessoa possa digitar o numero desejado.
linha 4 - extensão que será entregue esta ligação dentro do contexto anterior.
linha 5 - callerid da chamada
linha 6 - Numero maximo de vezes que o asterisk irá  tentar chamar o originador antes de considerar que a chamada falhou.
Este parâmetro não considera a primeira tentativa, portanto se definido como 0, o asterisk tentará chamar apenas uma vez.
linha 7 - Seguntos entre as tentativas de chamar o originador. O padrão é 300 segundos.
linha 8 - Numero de segundos que o asterisk irá chamar o originador a cada tentativa. O padrão é 45.
linha 9 - sai da Macro.

após sair da macro, o asterisk dará o hangup conforme linha 4 do contexto entrada, após isso, o arquivo .call criado já será executado chamando o número que havia ligado anteriormente, quando houver o atendimento dessa chamada, jogará para o contexto descrito no arquivo .call que criamos (saida-callback).

o contexto saida-callback dará um bip e aguardará um numero ser digitado. Nesse caso dará um Bip, mais pode-se personalizar com uma gravação da maneira que desejar.

[saida-callback]

exten => 1000,1,Answer()
exten => 1000,2,PlayBack(beep)
exten => 1000,n,Read(NUMERO)
exten => 1000,n,Dial(SIP/${NUMERO}@g1telecom,40,tg)
exten => 1000,n,Macro(hangupcall,)

linha 1 - atende a chamada
linha 2 - dá um bip após o atendimento da chamada, aqui pode-se colocar uma mensagem para o usuário ouvir tipo: digite o numero que deseja, ou coisa do tipo.
linha 3 - lê os digitos e salva na variável NUMERO
linha 4 - dá um dial para o numero capturado.
linha 5 - dá um hangup ao término da ligação.

acho que é isso pessoal, desculpem qualquer coisa, mais esse é um dos meus primeiros tutoriais e fiz correndo, qualquer erro me perdoem..rsrs.

abraços.