Olá Galera!
Depois de um tempo grande sem postagem, venho novamente aqui para mais uma.
Hoje esta sendo muito utilizada uma API do google chamada GOOGLETTS (text to speech). Essa API converte o texto passado em voz, logicamente não é aquela voz esperada por todos, porém, quebra o galho em alguns casos.
Utilizaremos um script em AGI para enviar o texto para conversão através do asterisk, o script e mais exemplos podem ser encontrados neste site: http://zaf.github.io/asterisk-googletts/. Vamos la:
Precisaremos das seguinte dependências:
- Perl
- perl-libwww
- sox
- mpg123
para quem usa Debian, basta dar um apt-get install nome-dependencia
Além das dependências acima, precisaremos de acesso a internet para a conversão que será feita pelo google.
Instalação:
Baixe o arquivo googletts.agi, descompacte e salve no diretório /var/lib/asterisk/agi-bin e de permissão de execução para o mesmo --> chmod a+x googletss.agi.
Existe algumas configurações que podemos fazer neste arquivo, como por exemplo, mudar o diretório padrão (/tmp) que ele salva as gravações, assim, toda vez que um texto idêntico for passado, ele não precisa fazer a aquisição ao google, tendo em vista que o áudio já esta salvo no diretório. Além disso, podemos mudar a linguagem padrão para pt_BR... porém, por hora não precisamos fazer isto e não entrarei nestes detalhes.
Criando contexto no asterisk:
Vamos criar um contexto no asterisk chamado "google-speech" e fazer nossa lógica nele.
[google-speech]
;convertendo texto em voz
exten => 1234,1,Answer() ;;Atendendo canal
exten => 1234,n,agi(googletts.agi,"Testando conversor de texto em voz.",pt_BR) ;; passando texto e a linguagem que queremos o retorno.
no exemplo acima, apenas atendemos a ligação e enviamos a aquisição ao AGI passando de parâmetros o texto que será convertido e a linguagem que será retornado a "voz".
Agora vamos ver um exemplo simples IVR Dinâmico:
[ivr]
exten => s,1,Answer()
exten => s,n,Set(TIMEOUT(digit)=5)
exten => s,n,agi(googletts.agi,"Bem vindo ao Meu menu de voz interativa.",pt_BR)
;;Aguardando Dígito:
exten => s,n(start),agi(googletts.agi,"Por favor, digite um número.",pt_BR,any)
exten => s,n,WaitExten()
exten => _X,1,agi(googletts.agi,"Você digitou o número ${EXTEN}. Tente outra vez.",pt_BR,any)
exten => _X,n,WaitExten()
exten => i,1,agi(googletts.agi,"Dígito Inválido.",pt_BR)
exten => i,n,goto(s,start)
exten => t,1,agi(googletts.agi,"Você não digitou nenhum número.",pt_BR)
exten => t,n,goto(s,start)
exten => h,1,Hangup()
É isso ai pessoal, esse exemplo é bem simples e não precisa de muita explicação, o que ele faz:
- Atende o canal
- Mensagem de boas vindas
- Mensagem para digitar um número
- aguardar dígito
- Dizer qual o número discado.
Exemplo simples e direto tirado direto do site oficial mencionado acima.
Espero que ajude
Até a próxima, valeu!!
terça-feira, 13 de maio de 2014
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
[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
[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.
Assinar:
Postagens (Atom)