Inicial > Programação, Telecom > AGI Portabilidade para números móveis em Asterisk

AGI Portabilidade para números móveis em Asterisk

Postei estes dias um source em python para descobrir a portabilidade de números móveis na comunidade Asterisk e meu email começou a lotar sobre perguntas de como construir um AGI para rotear as chamadas por um gateway GSM etc etc.

Cada um tem um cenário diferente do outro vou postar a essencia do Script em Perl + Agi para descobrir para qual operadora um número móvel pertence a partir disso é simples, mas se precisarem de ajuda para algo estamos ae …

Já tem nego me Perguntado pq nao fez em Python o AGI??

R:  Acordei com vontade de fazer em perl …

Script Perl

#!/usr/bin/perl -w

use Asterisk::AGI;
use WWW::Mechanize;
use MIME::Base64;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my @operadoras = (“Eder”, “Claro”, “Tim”, “Vivo”, “Telemig”, “Oi”, “Nextel”, “Brasil telecom”, “Sercomtel”, “CTBC”);
my $num_saida = $AGI->get_variable(‘EXTEN’);
$num_saida = substr($num_saida,3,10);
$m = WWW::Mechanize->new();
my $data = decode_base64(‘aHR0cDovL3dlYnNlcnZpY2VzLnR3d3dpcmVsZXNzLmNvbS5ici9yZWx1emNhcC93c3JlbHV6Y2FwL’        . ‘mFzbXg=’);
$m->add_header(Referer => $data);
my $s = $data . “/VerOperadora?celular=55” . $num_saida;
$m->get($s);
$c = $m->content;
$c =~ m/>(\d+)</;
$AGI->exec(“NoOp”,”$num_saida”);
$AGI->exec(“NoOp”,”$operadoras[$1]”);

# O codigo se adapta conforme o cenario de cada um, mudar o DIAL para rotear a saida da operadora em questao
####$AGI->exec(“Dial”,”SIP/MUDE AQUI PARA SUA SAIDA SIP ou GSM ou ZAP ou DAHDI ou UNICALL ou DVG etc etc|10″);

# FIM

Extensions.conf

minha linha para a chamada do AGI de testes

exten => _999.,1,agi,pega.pl

ou seja só discar no seu telefoneIP ou sftphone “999+num_do_celular”

Tela:

UPDATE:

12/03/2014

É incrível a quantidade de emails que recebo pedindo para encontrar meios de mostrar números portados, hoje eu tive um tempinho e escrevi um novo código, se olharem no código vão perceber que eu inclui um proxy para enviar as requisições, o site é bem “esperto” e bloqueia todo o range de IP de sua rede pública se ocorrer muitos requests, (descobri isso  da pior maneira enquanto debugava o site), então vocês podem criar uma lista randômica com vários IPs que tenham proxy aberto para enviar as solicitações, código em https://gist.github.com/ederwander/9512693 !

Fui

Eng Eder de Souza

  1. Fernando
    fevereiro 19, 2010 às 4:56 pm

    Boa tarde Eder, eu tambem desenvolvi um sistema para portabilidade e roteamento de chamadas. Gostaria de poder conversar contigo para trocarmos idéias sobre o assunto.

  2. felipe
    março 10, 2010 às 7:55 pm

    eu nao entendo de programacao, mas eu me interesso
    de qualquer forma me surgiu uma duvida: este codigo faz busca em algum banco de dados oficial da portabilidade pra saber qual a operadora de um numero, é isso?

  3. felipe
    março 18, 2010 às 12:51 am

    entendo… mas o que eu nao entendi é onde aparece essa consulta ao DBO no seu programa.
    vlw por ter respondido da outra vez

  4. Billy
    março 24, 2010 às 8:33 pm

    felipe :
    entendo… mas o que eu nao entendi é onde aparece essa consulta ao DBO no seu programa.
    vlw por ter respondido da outra vez

    Olá Eder. Estou com a mesma dúvida do Felipe. Onde consigo consultar via algoritmo a operadora a que um número pertence? A única fonte de consulta que conheço é web based e depende de validação humana.

    • ederwander
      março 25, 2010 às 12:46 pm

      Vamos lá neste meu Source eu estou criptografando o lugar de onde estou buscando a consulta, dessa maneira minimiza as chances de o source ser encontrado por alguns robts…

      Repare nesta linha: aHR0cDovL3dlYnNlcnZpY2VzLnR3d3dpcmVsZXNzLmNvbS5ici9yZWx1emNhcC93c3JlbHV6Y2FwL’ . ‘mFzbXg=

      é nesta linha que a mágica acontece ela esta criptografada 🙂

      nao sei se já viu mas eu fiz um source publicado aqui neste Blog sobre outro método de pegar essa consulta diretamente do http://consultanumero.abr.net.br

      Esta aqui

      Portabilidade + DBO + Descobrir Operadoras

      Essa técnica demonstra como é possivel passar pela validação humana (captcha)

      []’s

      Eng Eder de Souza

  5. felipe
    março 25, 2010 às 5:24 pm

    passar pela validacao humana é mt bom

    eu imaginei um software (nao sou programador!) que fizesse uma busca ao consultanumero toda vez q fosse feita uma ligacao pra celular, guardar esse numero em um BD interno e fazer nova consulta pra esse numero depois de um ou dois meses para reciclagem, caso fosse solicitado nova chamada. entao, faria a melhor rota de ligacao, utilizando chips de celular de varias operadoras

    mas se eles mudarem a forma de validação, deveria ser necessario um novo programa pra validar, ai daria prejuizo ate contornar o problema de novo.não seria bom para clientes de PBX IP saber que existe esse risco. o programa nao saberia pra onde rotear as chamadas e no final do mês viria o boom na conta

    vc sabe qnt ta custando o banco de dados do consultanumero?

    eu me correspondi com o noel rocha, criador do PORTABILIDADE FACIl para IPHONE. ele me falou que atualiza o BD dele de mes em mes pra poder prestar o servico do Iphone.

    []s

    • ederwander
      março 25, 2010 às 6:47 pm

      Felipe Consultar via DBO nao sairia menos de 4 mil reais por mês, por este motivo a existencia dos riscos as vezes compensa.

      Quando falamos em TelefoniaIP logo pensamos “Reduzir Custos”, imagine você chegar para um diretor ou Superior e falar “quer fazer chamadas mais baratas sabendo qual rota mais economica tomar? para isso tem que pagar a bagatela de 4 MIL” isso sim seria um BOOOMMM….

      Varias pessoas entraram em contato comigo para iniciar projetos livres para consultas, mas ultimamente nao ando tento muito tempo, estou fortemente envolvido com o FreeSwitch e varias outras coisas!

      Uma idéia sobre como desenvolver consultas universais seria o uso do DUNDI na qual funcionaria como um DNS para números de telefone ….

      Isso ae se precisar de algo estamos ae !

      []’s

      Eng Eder de Souza

  6. felipe
    março 25, 2010 às 7:53 pm

    eu assumo que pensei que seria bem mais caro, afinal sao dezenas de milhoes de numeros de celulares.

    o caso é que para UMA empresa o BDO seria custoso, mas esse serviço poderia ser vendido nao? pelo menos pelo preço de custo, ou com uma versao free e outra paga etc

    vai do empreendedorismo no assunto

    acho que eu li sobre o DUNDI. mas eu pensei que esse DNS para numeros telefonicos era o ENUM. vou me informar
    seja la ql seja, seria importante uma normalizacao… porque qualquer um poderia pegar o numero do banco do brasil por exemplo e cadastrar como seu. e os que usam o serviço poderiam se dar mal. só um exemplo

  7. felipe
    março 25, 2010 às 7:55 pm

    eu assumo que pensei que seria bem mais caro, afinal sao dezenas de milhoes de numeros de celulares.

    o caso é que para UMA empresa o BDO seria custoso, mas esse serviço poderia ser revendido nao? pelo menos pelo preço de custo, ou com uma versao free e outra paga etc

    vai do empreendedorismo no assunto

    acho que eu li sobre o DUNDI. mas eu pensei que esse DNS para numeros telefonicos era o ENUM. vou me informar
    seja la ql seja, seria importante uma normalizacao… porque qualquer um poderia pegar o numero do banco do brasil por exemplo e cadastrar como seu. e os que usam o serviço poderiam se dar mal. só um exemplo

  8. felipe
    março 25, 2010 às 7:55 pm

    desculpa a mensagem duplicada, coisas de navegador

  9. dudu bettega
    abril 13, 2010 às 12:39 am

    amigo vi seu codigo perl mas nao consegui executar no meu asterisk
    quando dei alguns comandos ali ele informou que nao encontrou alguns arquivos como o Mechanizer e Base64

    Poderia explicar melhor o funcionamento, sou meio leigo.

    grato

    • ederwander
      abril 13, 2010 às 12:10 pm

      Esta faltando esta dependencia !

      como root execute

      perl -MCPAN -e shell
      install WWW::Mechanize::Cached
      quit

  10. dudu bettega
    abril 15, 2010 às 6:31 pm

    agora apareceu isso :S

    Cannot unzip, no unzip program available

  11. dudu bettega
    abril 19, 2010 às 4:22 am

    cara, to ficando maluco com isso :s
    se puder me dar uma luz agradeço.
    faz uma semana q nao saio de cima disso
    valeu
    por ultimo consegui isso:
    [root@elastix html]# python port.py 19-3323-3233
    Traceback (most recent call last):
    File “port.py”, line 20, in ?
    r = ClientCookie.urlopen(“http://consultanumero.abr.net.br:8080/consultanumero/jCaptcha.do?metodo=carregar”)
    File “build/bdist.linux-i686/egg/ClientCookie/_urllib2_support.py”, line 824, in urlopen
    File “/usr/lib/python2.4/site-packages/httpsproxy_urllib2-1.0-py2.4.egg/urllib2.py”, line 393, in open
    response = meth(req, response)
    File “build/bdist.linux-i686/egg/ClientCookie/_urllib2_support.py”, line 625, in http_response
    File “/usr/lib/python2.4/site-packages/httpsproxy_urllib2-1.0-py2.4.egg/urllib2.py”, line 431, in error
    return self._call_chain(*args)
    File “/usr/lib/python2.4/site-packages/httpsproxy_urllib2-1.0-py2.4.egg/urllib2.py”, line 366, in _call_chain
    result = func(*args)
    File “/usr/lib/python2.4/site-packages/httpsproxy_urllib2-1.0-py2.4.egg/urllib2.py”, line 512, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)

    • ederwander
      abril 19, 2010 às 2:32 pm

      O Site do Consultanumero esta fora do AR consultanumero.abr.net.br

      Provável mudança no site ou atualizações internas deles.

      o URLOPEN tenta abrir o site sem sucesso e lhe reporta este erro

      []’s

  12. Dudu Bettega
    abril 21, 2010 às 3:50 am

    Tem saída ?

    • ederwander
      abril 21, 2010 às 7:30 pm

      A única Saída é reescrever todo o código …

      Quando tiver com mais tempo poderei olhar isso, mas meus dias estão corridos.

      []’s

      Eng Eder de Souza

      • ederwander
        maio 29, 2010 às 6:38 pm

        Atualizado!!

        source para consultanumero.abr.net.br

        Portabilidade

  13. agosto 24, 2010 às 3:00 pm

    Qual o temp oem segundos que leva para descobrir a operadora ?

    • Lu
      novembro 12, 2010 às 11:21 pm

      Meus testes mostram um tempo médio de 4-5 segundos.

      • ederwander
        novembro 13, 2010 às 2:37 pm

        eu uso em conjunto com Fast-AGI demorando 2 Mili-Segundos

      • Lu
        novembro 19, 2010 às 2:39 pm

        Eu estava falando sobre o seu python script. O outro eu não podia testar porque o endereço mudou.

  14. lylia marisa hennig
    agosto 31, 2010 às 9:05 pm

    não consigo me me comunicar com a operadora.

  15. lylia marisa hennig
    agosto 31, 2010 às 9:17 pm

    não consigo me me comunicar com a operadora A OI retém meu nº de telefone desde dia 31.08. 2010 as 18h 56 minutos. tenho 72 anos e preciso do nº deste telefone que utilizo a cerca de 12 anos. Pelo Regulamento Geral de Portabilidade , anexo a Resolução nº 460 de 19.03 2007, está incorrendo no art.13 ,I -assegurar ao usuário o direito à Portabilidade de forma não discriminatória. v- dar ampla divulgação das condições de oferta da Portabilidade.IX-garantir a continuidade e qualidade do serviço de telecomunicação durante o Processo de Portabilidade, considerando o disposto neste regulamento.Agradeço ajuda possivel.

  16. Lu
    novembro 12, 2010 às 11:21 pm

    Este script não esta funcionando mais. O serviço não está mais disponível no endereço codificado.

    • ederwander
      novembro 13, 2010 às 2:41 pm

      Tenho usuário e senha para esta consulta Funcionar um dia verei a possibilidade de compartilhar ou montar um gateway para o retorno global …

  17. Lu
    novembro 19, 2010 às 2:43 pm

    Eder, tem jeito de modificar este pythno script para usar como crawler verificando números em seqüências e dump isso num logfile para treinar um banco de dados proprio? Serra qeu vc pode modifica-lo? Alguma coisa por exemplo usando cron para executar o script…algo assim.

    • ederwander
      novembro 19, 2010 às 2:57 pm

      Tem sim, mas o grande problema de se fazer isso é que a origem vai descolfiar do alto volume de consultas, seu IP pode ser bloqueado por Firewall ou a origem pode mudar todo o sistema colocando verificação por Capctha e até mesmo podendo cobrar pela consulta como é o caso deste link agora só quem paga por este serviço pode consultar você recebe um login e senha para fazer conexao e poder consultar a operadora 😦

  18. Lu
    novembro 19, 2010 às 3:46 pm

    Vs ta falando do serviço aqui http://consultanumero.abr.net.br ou do serviço no URL codificado ( melhor não postar ele no blog ). De qualquer jeito to procurando alguem que fornece DBO com um preço razoável. Vc tem informação sobre esta empresa ( do url codificado) quais são os preços deles?

    • ederwander
      novembro 19, 2010 às 3:49 pm

      URL codificada entre em contato com eles mas nao espere por preços razoáveis !!

  19. Allthe
    dezembro 9, 2010 às 4:36 pm

    Caro Eng. Eder,

    Estive a ler algo sobre o AGI, e como estou desenvolvendo o meu Asterisk para que este possa comunicar com um servidor de domótica. Acha que o posso conseguir através do AGI? Se sim, como?

    Obrigado

    • ederwander
      dezembro 9, 2010 às 5:14 pm

      Olá,

      Respondendo a sua questão você conseguira fazer muitas coisas com AGI, para domótica você conseguira uma interface bem simples via controles por USB ou porta Paralela, se utilizar algum módulo tts podera fazer controles por voz a distancia, sem falar que nativamente podera controlar (ligar, desligar, etc) via DTMF…

      Na faculdade eu desenvolvi uma central telefonica com controle via DTMF que funcionava em qualquer modem instalado e controlava equipamentos via teclas DTMF, o trabalho foi brutal hoje com o Asterisk o seu trabalho sera bem otimizado você poderá se concentrar totalmente em um AGI escolha sua linguagem de programação na qual você mais gosta e escreva seu AGI!!

      []’s

      Eng Eder de Souza

  20. Allthe
    dezembro 9, 2010 às 6:16 pm

    Eng. Eder,

    Desde já agradeço a sua rapidez na resposta. No entanto tenho dúvidas na utilização do AGI. Como posso configurar qualquer coisa através dele? É possivel da um exemplo de como poderei fazer um tipo de configuração?

    Peço desculpa, mas ainda não entendi bem isto do AGI.

    Obrigado

    • ederwander
      dezembro 10, 2010 às 7:47 pm

      Entenda que os programas feitos em AGI são uma interface poderosa para se integrar ao Asterisk…

      um simples AGI escrito em perl tem esta estrutura
      Arquivo teste.pl

      #!/usr/bin/perl -w

      use Asterisk::AGI;
      my $AGI = new Asterisk::AGI;
      my %input = $AGI->ReadParse();
      $AGI->exec(“NoOp”,”Teste Eng Eder”);

      ##FIMM

      em seu extensions.conf vc chama o agi simplesmente adicionando uma linha parecida com esta:

      exten => 1234,1,agi,teste.pl

      quando discar para o número 1234 este AGI escrito em perl apenas irá imprimir no console do asterisk a frase “Teste Eng Eder” !!

      Então imagine as possibilidades você podera integrar linguagem de programação neste exemplo escrito em perl mas poderá ser em C, python, pascal, ruby, etc, etc, etc…

      Então você terá em um source em qualquer linguagem de programação interligado com todas as funções do Asterisk é isto que um AGI faz, você podera interagir com banco de dados, hardware, interfaces USB, portas paralelas e manter as funcionalidades de um PABX-IP!

      Já que vc está trabalhando com domótica eu disponibilizei aqui https://ederwander.wordpress.com/2009/08/20/teste/ um código que interage com movimentos da webcam para disparar chamadas via Asterisk, este eu fiz por meios de sockets puro sem necessitar de AGI, as possibilidades são infinitas !!

      []’s

      Eng Eder de Souza

  21. Allthe
    dezembro 10, 2010 às 5:30 pm

    Olá a todos,

    Eu alterei o meu código assim:

    exten => xxxx,1,Answer ;
    exten => xxxx,n,Set(DB(test/count)=1234)
    exten => xxxx,n,Set(COUNT=${DB(test/count)})
    exten => xxxx,n,Authenticate(${COUNT}) ;

    A questão é a seguinte como carreguei a variável test/count=1234. Como posso agora encontra-la no Mysql de modo a altera-la via Mysql?

    Alguém pode dar uma ajuda?

  22. Allthe
    dezembro 11, 2010 às 9:08 am

    Eng. Eder

    Não, não testei…O que é o APP mysql, já estive a ver o link do Voip-info, mas não fquei esclarecido.

    Obrigado

    • ederwander
      dezembro 11, 2010 às 9:42 am

      Permite integrar consultas, inserções, updates, via banco de dados mysql dentro de seu dial plan, os exemplos do voip-info são bem claros e demonstram bem como utiliza-lo !!!

      []’s

      Eng Eder de Souza

  23. Allthe
    dezembro 14, 2010 às 5:29 pm

    Eng. Eder,

    Antes de mais, agradeço a sua ajuda.

    Necessito que o Asterisk, comunique com um Web Service, ou seja, tenho um Menu opcional composto por IVR´S, que quando escolho uma qualquer opção esta acção efectue uma pergunta ao Web Service e que o Web service a responda.

    Isto é possível? Se sim, como?

    Obrigado

    • ederwander
      dezembro 15, 2010 às 2:06 pm

      Olá

      É possível sim, você vai precisar da resposta entre a comunicação do seu web server via porta 80 !

      Você poderá fazer um AGI que faça requisições pela porta 80 e que envie algum método de consulta como o GET por exemplo você passa os parâmetros necessários para sua consulta web e pega o retorno, após isso você toma uma ação correspondente ao retorno em seu IVR !!

      É bem simples de se fazer !

      []’s

      Eng Eder de Souza

  24. Allthe
    dezembro 15, 2010 às 4:44 pm

    Eng. Eder,

    Não quero de modo algum abusar da sua boa vontade e ajuda, mas será possível postar algum exemplo de como poderei fazer isto? Já efectuei algumas pesquisas sobre AGI e Web service, mas ainda não consegui perceber de que forma poderei obter o resultado que necessito.

    Obrigado

  25. Allthe
    dezembro 22, 2010 às 6:50 pm

    Eng. Eder,

    Já percebi que posso aceder ao Web Service através do comando AGI exten => _X.,1,AGI(agi://192.168.2.1:1048/TestAGI|${EXTEN}|{VAR2}. No meu Web service tenho uma “função”, que necessito que conforme o comando inserido por mim esta função chamada “Luzes” altere de 1 para 0 ou vice-versa. Pode dar uma ajuda de como o poderei fazer?

    Obrigado

  26. Neulo
    fevereiro 9, 2011 às 3:53 pm

    Eder tem script para o novo captcha da ABR?rs

  27. Angelo Borghese
    maio 19, 2011 às 10:11 pm

    Em que pé está esta questão das consultas a portabilidade. Parece que o Capcha, mais complexo, não deixa mais consultar. Alguém sabe de alguma alternativa barata?

  28. Angelo Borghese
    maio 19, 2011 às 10:17 pm

    Eu acho que esta ´segurada´ das operadoras tem por objetivo induzir o usuário ao erro. Tudo bem que dá para consultar individualmente, mas temos que provar na justiça que usar o Asterisk é de interesse público, tanto quanto conectar por um aparelho móvel. Vamos ver se nos organizamos para forçar a liberação do BDO.

  29. Fernando
    junho 12, 2011 às 11:48 am

    Ola. Encontrei na web um site que disponibiliza a consulta com um captcha mais simples. Isso seria o suficiente para fazer o script funcionar?

    • ederwander
      junho 12, 2011 às 1:18 pm

      Olá Fernando,

      Dependendo da forma como o captcha esta se apresentando pode ser possível sim!

      Envie o Link para que eu possa dar uma olhada …

      Com a análise posso tentar escrever algo para o retorno do captcha e enviar as requisições para posteriormente pegar as operadoras !

      Eng Eder de Souza

  30. Ricardo
    agosto 24, 2011 às 6:17 pm

    E ai estamos sem fazer consulta, ou alguem tem uma luz no fundo do tunnel?

  31. possebon
    maio 18, 2012 às 9:02 am

    Eder, bom dia

    Eu tentei implementar um script com base neste teu, mas estou com alguns problemas, não sei se poderias me ajudar.

    A idéia do script é utilizar a consulta através do serviço Telein.ConsultaNumero

    Eu tenho uma tabela no MySQL com o código das operadoras (baseado no resultado da consulta do Telein.ConsultaNumero) e um campo em que vai conter o nome do Trunk que precisa ser utilizado.

    Toda a ligação que for feita para celular, automaticamente deverá passar por este script, para verificar qual a operadora, e com isto, direcionar a realização da chamada para o trunk correto.

    Olhando no log do Asterisk aparece isto:

    [2012-05-18 02:06:17] VERBOSE[7583] res_agi.c: — AGI Script Executing Application: (NoOp) Options: (Vou mandar a URL)
    [2012-05-18 02:06:17] VERBOSE[7583] res_agi.c: AGI Tx >> 200 result=0
    [2012-05-18 02:06:22] VERBOSE[7583] res_agi.c: AGI Rx << Abrir conexao MySQLSelecionar databaseSELECT * FROM operadora where OperadoraID=999Executou a query999Chave invalida
    [2012-05-18 02:06:22] VERBOSE[7583] res_agi.c: AGI Tx >> 510 Invalid or unknown command
    [2012-05-18 02:06:22] ERROR[7583] utils.c: write() returned error: Broken pipe
    [2012-05-18 02:06:22] VERBOSE[7583] res_agi.c: — AGI Script verificaoperadora.pl completed, returning 0

    Sempre dá a mensagem 510 Invalid or unknown command e também aparece utils.c: write() returned error: Broken pipe

    Não conheço nada de Perl e está complicado de identificar o que poderia estar errado.

    Se puderes dar uma ajuda, agradeço antecipadamente.

    Abraço.

  32. Leandro
    setembro 12, 2012 às 12:29 pm

    Opa Eng Eder de Souza,
    Muito boas suas contribuições para o mundo Asterisk.

    Gostaria de saber se esse script da portabilidade ainda roda?

    [ ]’s

    • ederwander
      setembro 12, 2012 às 12:33 pm

      Oi Leandro este em específico não !

      Tem outro que funciona, olha ai:


      #!/usr/bin/python
      #version: Eng Eder de Souza
      #package: AGI Portabilidade
      #copyright: Copyright (C) Open Source.
      #license: GNU/GPL
      #Agi para consulta de operadora para celulares portados
      #Acesso ao banco de dados fornecido por http://magnussolution.com
      import urllib2
      import sys
      Keys = {5312 : 'CTBC CELULAR S.A', 55314 : 'BRASIL TELECOM CELULAR', 55320 : 'VIVO', 55321 : 'CLARO', 55323 : 'TELEMIG CELULAR', 55324 : 'TIM CELULAR', 55331: 'TNL PCS', 55337: 'UNICEL DO BRASIL', 55341: 'TIM CELULAR', 55343: 'SERCOMTEL CELULAR', 55349: 'OPTIONS COMP', 55377: 'MCS (Nextel)', 55390: 'TELCOM TELECOMUNICACOES DO BRASIL', 55391: 'FALKLAND TECNOLOGIA', 55392: 'IRIDIUM', 55393: 'GLOBALSTAR DO BRASIL'}
      env = {}
      while 1:
      line = sys.stdin.readline().strip()
      if line == '':
      break
      key,data = line.split(':')
      if key[:4] <> 'agi_':
      sys.stderr.write("Did not work!\n");
      sys.stderr.flush()
      continue
      key = key.strip()
      data = data.strip()
      if key <> '':
      env[key] = data
      for key in env.keys():
      sys.stderr.write(" — %s = %s\n" % (key, env[key]))
      sys.stderr.flush()
      number=sys.argv[1]
      #Put in E164 format
      number="55" + number
      url='http://magnussolution.com/portabilidade.php?seache_number=&#39;
      url = url + str(number)
      req = urllib2.Request(url)
      response = urllib2.urlopen(req)
      Key = response.read();
      Operadora = Keys[int(Key)]
      sys.stdout.write('SET VARIABLE Operadora "%s"\n'% str(Operadora))
      sys.stdout.flush()

      view raw

      Operadora.py

      hosted with ❤ by GitHub

      • Marcus Silva
        setembro 29, 2012 às 1:38 pm

        Eder como funciona ou melhor qual a saída do resultado para utilizar no dialplan. Fiz o teste e não retornou nada. Pode me ajudar?

      • ederwander
        setembro 29, 2012 às 6:14 pm

        Coloque o script “operadora.py” https://gist.github.com/3306926 na pasta “agi-bin”

        Em seu extensions.conf coloque assim para chamar o agi e pegar o retorno dele no asterisk :

        exten=>_0.,1,Answer()
        exten=>_0.,n,AGI(operadora.py,${EXTEN:1})
        exten=>_0.,n,NoOP(Operadora = ${Operadora})
        exten=>_0.,n,Hangup()

  33. Marcus Silva
    setembro 30, 2012 às 12:36 pm

    ederwander :
    Coloque o script “operadora.py” https://gist.github.com/3306926 na pasta “agi-bin”
    Em seu extensions.conf coloque assim para chamar o agi e pegar o retorno dele no asterisk :
    exten=>_0.,1,Answer()
    exten=>_0.,n,AGI(operadora.py,${EXTEN:1})
    exten=>_0.,n,NoOP(Operadora = ${Operadora})
    exten=>_0.,n,Hangup()

    Eder utilizei e não deu resultado, será que fiz algo erro ou o script não esta tendo retorno do site http://magnussolution.com?

    Segue log console asterisk:

    — Executing [007199703610@teste:1] Answer(“SIP/200-0000000b”, “”) in new stack
    — Executing [007199703610@teste:2] AGI(“SIP/200-0000000b”, “operadora.py,7199703610”) in new stack
    — Launched AGI Script /var/lib/asterisk/agi-bin/operadora.py
    — AGI Script operadora.py completed, returning 0
    — Executing [007199703610@teste:3] NoOp(“SIP/200-0000000b”, “OP = “) in new stack

    • ederwander
      setembro 30, 2012 às 2:43 pm

      O Script esta funcionando perfeitamente o retorno foi o código 55399 este número é da vivo ?

      se sim inclua este código no dicionário do script para o retorno correto !

      • Marcus Silva
        setembro 30, 2012 às 6:33 pm

        No site sim, mas via script o NoOp sai “em branco” conforme log:

        — Executing [007199703610@teste:3] NoOp(“SIP/200-0000000b”, “OP = “) in new stack

  34. Marcus Silva
    setembro 30, 2012 às 8:11 pm

    Marcus Silva :
    No site sim, mas via script o NoOp sai “em branco” conforme log:
    — Executing [007199703610@teste:3] NoOp(“SIP/200-0000000b”, “OP = “) in new stack

    Cara foi problema no linux, após boot funcionou perfeito. Você é o “Cara”. Valeu abrigado pela atenção.

  35. Marcus Silva
    setembro 30, 2012 às 8:15 pm

    Marcus Silva :

    Marcus Silva :
    No site sim, mas via script o NoOp sai “em branco” conforme log:
    — Executing [007199703610@teste:3] NoOp(“SIP/200-0000000b”, “OP = “) in new stack

    Cara foi problema no linux, após boot funcionou perfeito. Você é o “Cara”. Valeu abrigado pela atenção.

    Outra pergunta essa consulta pela magnussolution tem limite por hora/dia ou por região?

    • ederwander
      setembro 30, 2012 às 8:46 pm

      Legal bom saber que funcionou, Não tem limites, mas é aconselhado você fazer um cache das consultas para economizar banda e consultas 🙂

  36. fevereiro 19, 2013 às 10:42 pm

    Boa noite Eng Eder, verifiquei seu código e achei interessante, estou implementando algo no meu Elastix sobre isto e estou com dúvidas pois quando você publicou foi em 2010 e acho que muitos discutiram e hoje o código é o mesmo ou tem alguma alteração a ser feita para que eu venha a testar se está rodando normal. Preciso disto inicialmente para testes caseiros para poucas consultas, pra depois pensar em armazenar em cache… Se poder postar a solução completa novamente com o código final ficarei grato. Abraços…

  37. Jardel
    março 25, 2013 às 10:04 pm

    O Magnus fechou a porta, não tá mais permitindo consulta grátis, dava pra fazer alguma coisa com este site?

    http://www.qualoperadora.net/

    • luiz
      dezembro 24, 2013 às 4:43 pm

      cara voce conseguiu algo a respeito estou procurando algo paracido grato

  38. Anônimo
    maio 31, 2013 às 10:30 pm

    My brother suggested I would possibly like this web site. He was totally right.
    This post actually made my day. You cann’t imagine just how much time I had spent for this information! Thanks!

  39. Santhiago
    janeiro 7, 2014 às 1:10 am

    Jardel;

    Conseguiu alguma coisa com o site sugerido ?

    Santhiago

    • Jardel
      fevereiro 11, 2014 às 10:09 pm

      Não sei programar cara, esperava que o Éder fizesse algo, mas parece que ele abandonou o projeto.

  40. Pablo
    fevereiro 12, 2014 às 12:04 am

    Prezados,

    Se tiver algum bom programador que possa desenvolver uma soluçao em Python ou PHP para a consulta dos dados portados eu consigo a base atualizada diariamente e disponibilizo no meu servidor para a comunidade em geral, contudo preciso de integarir com o programador para que possamos fazer algo administrativo, ou seja como vou disponibilizar isso preciso de algo pra cada pessoa realizar seu cadastro e receber um login e senha para integrar com cada asterisk… Se alguem se disponibilizar eu tenho a Database diariamente.

  41. ederwander
    fevereiro 12, 2014 às 1:17 am

    Olá pessoal,

    Eu ainda não tive tempo de olhar o site enviado pelo Jardel, a principio é possível pegar informação de qualquer site, só é preciso saber os campos de submit do form, prometo olhar está semana e dou um retorno aqui.

    Sobre a solução do Pablo é bastante interessante, não posso me comprometer a programar o lado administrativo, infelizmente não tenho tempo, estou envolvido e liderando muitos projetos. Ainda sobre o desenvolvimento administrativo qualquer estagiário de TI com o mínimo conhecimento em programação consegue fazer, ou seja não será difícil encontrar alguém …

  42. ederwander
    março 12, 2014 às 3:10 pm

    Pessoal eu tive um tempinho hoje e olhei com carinho o site que o Jardel passou, fiz Crawler para o site, aqui o novo script AGI https://gist.github.com/ederwander/9512693, vejam o Update deste Post !

  43. Jardel
    março 12, 2014 às 10:27 pm

    Blz Éder, agora vamos ver se eles bloqueiam o ip se der muitas consultas seguidas !

  44. Jardel
    março 18, 2014 às 6:35 pm

    Éder, mais uma opção !

    http://www.portabilidadecelular.com/

  45. Arthur Freitas
    janeiro 22, 2015 às 1:49 pm

    Olá Eder!
    Gostaria de saber tem interesse em fazer uma consultoria projeto simples?
    Deixei meu e-mail para contato.
    Grato.

  46. outubro 18, 2015 às 10:13 pm

    obrigado pelo post Eder! Usei parte do seu código do git, mas a API magnussolution.com/portabilidade.php nao ta mais funcionando, minha alterantiva foi o site http://api-portabilidade.com.br/

  1. No trackbacks yet.

Deixe um comentário