[AsteriskBrasil] RES: RES: RES: RES: RES: RES: Funcionamento Asterisk com PHP

Mike Tesliuk mike em tesliuk.com
Terça Junho 19 09:19:35 BRT 2012


eu pessoalmente deixaria o controle todo no banco de dados e faria o 
dial pelo agi mesmo, porem voce pode continuar da maneira que esta, 
fazer todo o tratamento da chamada, mandar para o agi para ele pegar o 
valor das tarifas e tudo mais , ao sair do agi, voce poderia definir uma 
variavel para userfield do cdr com a tarifa para esta chamada, poderia 
tabem setar um ID ou algo assim para facilitar sua identificacao ex: 
Set(CDR(userfield)="55432:0,12"


ali voce acrescentou um identificador para a chamada e o tempo, ao 
terminar a chamada voce pode fazer um update ou algo assim em outra 
tabela baseado nas variaveis definidas

se voce colocar no seu contexto um h,1,NoOp(ANSWEREDTIME: 
${ANSWEREDTIME}) voce vai ver que ele mostra o tempo da chamada que é o 
valor final que voce precisa (isso ocorrerá após desligar), 
provavelmente voce pode usar a propria funcao de mysql do asterisk para 
também no h fazer o update no banco

lembre-se que no seu where voce vai usear 'WHERE userfield like '55432:%'

a ideia seria fazer o proprio asterisk executar a conta matematica, e 
mandar o update para o cdr ou outra tabela .

Em 19/06/12 09:01, Danilo Almeida escreveu:
> Mike
>
> Com esse script eu já estou conseguindo entender o negócio. Só tem uma
> coisa, no extensions vc não faz o Dial e sim no script da tarifação né?
>
> #executando a discagem
> $AGI->exec("Dial", "SIP/tronco/197");
>
> No meu caso, tenho uma documentação nessa parte de configuração do asterisk
> onde outras pessoas também usa, a gente só vai adaptando ela conforme a
> necessidade, to querendo implementar mais essa função do tarifador nesse
> esquema.... abaixo esta a forma que utilizo, por exemplo, para discar pra
> fixo local:
>
> ; PARA fixo MOVEL VOIP EX: 99216200
> exten => _[1-5]XXXXXXX,1,NoOp(---> NOVA LIGACAO EXTERNA VOIP <--)
> exten => _[1-5]XXXXXXX,n,NoOp(---> DE ${CALLERID(num)} PARA ${EXTEN} <--)
> exten => _[1-5]XXXXXXX,n,Set(DESTINO=${EXTEN})
> exten => _[1-5]XXXXXXX,n,Macro(gravacao,voip)
> exten => _[1-5]XXXXXXX,n,Macro(saidapstn,)
> exten => _[1-5]XXXXXXX,n,Macro(checasaida,)
> exten => _[1-5]XXXXXXX,n,Macro(checasenha,)
> exten => _[1-5]XXXXXXX,n,GotoIf($["${SAIDALIBERADA}" = "NAO"]?desligar)
> exten => _[1-5]XXXXXXX,n,GotoIf($["${SAIDAPSTN}" = "SIM"]?pstn)
> exten => _[1-5]XXXXXXX,n,GotoIf($["${SAIDAFIXOLOCAL}" = "PSTN"]?pstn)
> exten => _[1-5]XXXXXXX,n,GotoIf($["${SAIDAFIXOLOCAL}" = "VOIP"]?voip)
> exten => _[1-5]XXXXXXX,n,GotoIf($["${SAIDAFIXOLOCAL}" = "A2B"]?a2b)
> exten => _[1-5]XXXXXXX,n,Macro(hangupcall,)
> exten => _[1-5]XXXXXXX,n(pstn),Set(CDR(accountcode)=TO-PSTN)
> exten => _[1-5]XXXXXXX,n,Dial(${PORTAPSTN}/${EXTEN},40,Tg)
> exten => _[1-5]XXXXXXX,n,Macro(sinalizacao,${DIALSTATUS})
> exten => _[1-5]XXXXXXX,n,Macro(hangupcall,)
> exten => _[1-5]XXXXXXX,n(voip),Set(CDR(accountcode)=TO-VOIP)
> exten =>
> _[1-5]XXXXXXX,n,Dial(SIP/${TECHPREFIX}${CODINCIOVOIP}${DDDLOCAL}${EXTEN}@${O
> PERADORA-VOIP},40,Tg)
> exten => _[1-5]XXXXXXX,n(desligar),Macro(sinalizacao,${DIALSTATUS})
> exten => _[1-5]XXXXXXX,n,Macro(hangupcall,)
>
> esse context não foi eu quem fez, e sim outro funcionario que nao faz mais
> parte da empresa. No começo do extensions eu adiciono as variáveis e depois
> o contexto faz tudo sozinho (se sai pelo voip ou pstn, DDD local, etc)
>
> a questão é, de que maneira eu posso usar o AGI nesse contexto sem sair do
> padrão para realizar a tarifação da chamada?
> Sei que para ficar de forma mais simplificada como esta este, precisarei dar
> uma mexida nesse contexto, mais por enquanto só quero adaptar ai para
> conseguir fazer a tarifação.
>
> E valeu pelo script que foi excelente para mim que estou começando a
> aprender trabalhar com AGI
>
> Att
> Danilo Almeida
>
> -----Mensagem original-----
> De: asteriskbrasil-bounces em listas.asteriskbrasil.org
> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de Mike
> Tesliuk
> Enviada em: Monday, June 18, 2012 7:12 PM
> Para: asteriskbrasil em listas.asteriskbrasil.org
> Assunto: Re: [AsteriskBrasil] RES: RES: RES: RES: RES: Funcionamento
> Asterisk com PHP
>
> vamos pensar:
>
> Eu estou usando asterisk 1.8
>
> fiz um extension que manda para o agi, e desliga,
>
> exten => 1101,1,Agi(teste-tarifacao.agi)
> exten => 1101,n,Hangup()
>
>
> neste agi tem o seguinte.
>
> ------------------
>
> #!/usr/bin/perl
>
>
> use Asterisk::AGI;
>
> $AGI = new Asterisk::AGI;
> %input = $AGI->ReadParse();
>
> # Pegando datas e coisas do genero
> my ($sec,$min,$hour,$mday,$mon,$year,
>             $wday,$yday,$isdst) = localtime time;
>
> if($mday < 10){
>           $mday = "0" . $mday;
> }
>
> $year = $year + 1900;
>
> $mon = $mon + 1;
>
> if($mon < 10){
>           $mon = "0" . $mon;
> }
>
> $starttime = "$year-$mon-$mday $hour:$min:$sec";
>
> #definindo o custo da tarifa
> $tarifa="0.481";
>
> $callerid = $AGI->get_variable("CALLERID(num)");
> $destino = $AGI->get_variable("EXTEN");
>
>
> #executando a discagem
> $AGI->exec("Dial", "SIP/tronco/197");
>
>
> # pegando a variavel com o tempo de atendidod do canal
> $tempo = $AGI->get_variable("ANSWEREDTIME");
>
> # cobrando minimo de 30 segundos
> if($tempo < 30){
>           $tempo = 30;
> }
>
>
>
> $segundos = ($tempo / 60);
>
> $custo = ($segundos * $tarifa);
>
>
>
>
>
> # Gerando nosso log num arquivo de texto, voce poderia usar um mysql
> para isso
>
> system("echo '$starttime,$callerid,$destino,$tempo,$custo,$tarifa' >>
> /tmp/billing.csv");
>
>
>
>
>
>
>
> -------------------
>
>
> No caso, ele vai gerar um arquivo de billing
>
> o conteudo dele é o seguinte (duas ligações, uma de poucos segundos e
> outra de mais de um minuto)
>
>
> O formato do arquivo é:
>
>    data,quem,pra_onde,tempo_da_chamada_atendida,valor,tarifa
>
> Abaixo o conteudo:
>
> 2012-06-18 18:42:1,114,11001,30,0.2405,0.481
> 2012-06-18 18:45:8,114,11001,69,0.55315,0.481
>
>
> no meu caso aqui ele em alguns momentos nao gerou a escrita no arquivo,
> não olhei o porque, talvez algum erro meu, mas enfim, a base é esta.
>
>
> eu escrevi a saida em um arquivo de texto, poderia ser um banco de dados
> por exemplo e por ai vai.
>
>
>
>
> Em 18-06-2012 18:11, Danilo Almeida escreveu:
>> Ribeiro
>>
>> Não entendo como conseguirei fazer isso, pois após o término da ligação,
>> como farei para calcular o custo dela?
>>
>> Att
>>
>> Danilo ALmeida
>>
>> -----Mensagem original-----
>> De: asteriskbrasil-bounces em listas.asteriskbrasil.org
>> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de
> Ribeiro
>> Enviada em: Monday, June 18, 2012 4:53 PM
>> Para: asteriskbrasil em listas.asteriskbrasil.org
>> Assunto: [AsteriskBrasil] RES: RES: RES: RES: Funcionamento Asterisk com
> PHP
>> Danilo
>>
>> Não pelo DeadAGI para a sobrecarga. Pelo evento do AMI/AJAM. Estes podem
>> causar.
>> Entendi sua necessidade, mas não seria melhor pegar pelo banco de dados,
>> adicionar uma coluna sua ou copiar os dados para outra tabela? Isso
> geraria
>> menos carga e seria mais fácil de você conseguir implementar.
>>
>> Um abraço
>> Ribeiro
>>
>> -----Mensagem original-----
>> De: asteriskbrasil-bounces em listas.asteriskbrasil.org
>> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de
> Danilo
>> Almeida
>> Enviada em: segunda-feira, 18 de junho de 2012 09:07
>> Para: asteriskbrasil em listas.asteriskbrasil.org
>> Assunto: [AsteriskBrasil] RES: RES: RES: Funcionamento Asterisk com PHP
>>
>> Sei que já existem diversos tarifadores, é que trabalho em uma empresa de
>> telefonia voIP e quero desenvolver um específico da empresa.
>> Já tenho o script pronto, só que no script e só imprime o valor direto na
>> tela do cliente. Quando o cliente faz uma busca de ligação, ele pega o
>> tempo, faz o calculo e imprime na tela.
>> No asterisk, já esta configurado para gravar as infos no BD, quero somente
>> conseguir gravar o valor em um novo campo da Tabela.
>>
>> Exemplo:
>>
>> Quando a ligação encerrar, pegar a informação dessa ligação, fazer o
> calculo
>> e dar um update na tabela jogando o valor no campo custo desta mesma
>> ligação.
>> Pelo que vi, isso seria feito pelo DeadAGI, mais como vc disse não sei se
> é
>> a melhor opção pelo fato de poder dar uma sobrecarga.
>>
>> Teria alguma outra forma de fazer isto?
>>
>> obrigado
>> Danilo Alameida
>> -----Mensagem original-----
>> De: asteriskbrasil-bounces em listas.asteriskbrasil.org
>> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de
> Ribeiro
>> Enviada em: Monday, June 18, 2012 2:50 AM
>> Para: asteriskbrasil em listas.asteriskbrasil.org
>> Assunto: [AsteriskBrasil] RES: RES: Funcionamento Asterisk com PHP
>>
>> Danilo
>>
>> Já existem tarifadores diversos e até demais no mercado e muitos Free.
>> Alguns até do pessoal aqui.
>> Veja o A2Billing. Ele faz exatamente o que você deseja, já está pronto e
> não
>> tem custo.
>> Acesso ao banco de dados, utilização de um tarifador ou pegar os dados do
>> sistema é o que eu faria, pois você só precisa pegar os dados da ligação
> que
>> já acabou e o Asterisk guarda isso por padrão.
>> Por exemplo: Eu uso o Elastix. Nele tem a aba Report. Em CDR Report eu
> tenho
>> todas as ligações realizadas e eu consigo exportar para CSV. Ele lhe daria
>> TODOS os dados que você deseja de forma fácil, direta, clara e fácil. Tem
> o
>> canal, duração, origem e destino e se foi atendida ou não.
>> Você também consegue se integrar com o A2Billing.
>> Na verdade é matar uma mosca com uma bomba nuclear o A2Billing para você,
>> mas pode ser feito.
>>
>> Independente da sua solução, como já foi dito, tem o cálculo de custo, que
>> não é tão simples quanto parece.
>>
>> Sobre o AGI: Em seu caso, você não precisa monitorar as ligações no
> momento
>> em que elas estão acontecendo e entendo que o AGI não atenda você para
> isso.
>> Você poderia usar o DeadAGI para pegar os dados depois do hangup ou um
>> AMI/AJAM com eventos. Neste caso ele dispara o evento toda vez que alguma
>> coisa acontece. Existem vários eventos e eu seguiria pelo evento Crd, onde
>> toda vez que ocorre um hangup, ele lhe informa o canal que sofreu hangup e
>> seus dados.
>> Mais dados sobre eventos:
>> http://www.voip-info.org/wiki/view/asterisk+manager+events . Só que tem um
>> problema. O Astrisk fica pesado, pois ele armazena todos os hungups que
>> ocorreram e em sistemas de tráfego intenso isso pode gerar sobrecarga. Só
>> fique esperto que cada ligação gera 2 canais pelo menos (Pode gerar mais)
> e
>> você tem que entender o que cada canal faz para saber qual deles tem a
>> informação que você deseja ou quais deles contém.
>>
>> Um abraço
>> Ribeiro
>>
>> -----Mensagem original-----
>> De: asteriskbrasil-bounces em listas.asteriskbrasil.org
>> [mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de
>> danilo.almeida em g1telecom.com.br Enviada em: domingo, 17 de junho de 2012
>> 22:07
>> Para: asteriskbrasil em listas.asteriskbrasil.org
>> Assunto: [AsteriskBrasil] RES: Funcionamento Asterisk com PHP
>>
>> Ribeiro
>>
>> Isso já é um ótimo começo pra mim, mais com essas 3 opções, eu consigo
>> enviar um bloco de comando e salvar em um arquivo de conf por exemplo que
>> possa ser meus ramais sip e depois da um include no sip.conf?
>> Andei lendo também sobre AGI, mais o material que achei na internet a
>> maioria ou explica coisas avançadas ou coisas básicas que não se encaixa
> no
>> meu projeto.
>>
>> A princípio quero pegar o tempo da ligação e o uniqueid em uma pagina PHP
>> fazer o cálculo do custo da ligação e armazenar no banco.
>>
>> Seria feito pela AGI?
>>
>> Obrigado
>>
>> Danilo Almeida
>>
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
>> FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM Centro Treinamento
> -
>> Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
>> mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
>> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>>
>>
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
>> FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM Centro Treinamento
> -
>> Curso de PABX IP -  Asterisk  - Site www.digivoice.com.br ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
>> mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
>> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>>
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
>> FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM Centro Treinamento
> -
>> Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
>> mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
>> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>>
>>
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
>> FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
>> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site
>> www.digivoice.com.br
>> ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
>> mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
>> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>>
>> _______________________________________________
>> KHOMP Inovação: External Board Series
>> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
> FreeSWITCH.
>> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
>> _______________________________________________
>> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
>> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
>> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site
> www.digivoice.com.br
>> ________
>> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
> mercado.
>> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
>> ______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
> _______________________________________________
> KHOMP Inovação: External Board Series
> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
> FreeSWITCH.
> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
> _______________________________________________
> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site
> www.digivoice.com.br
> ________
> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
> mercado.
> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
> ______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
> _______________________________________________
> KHOMP Inovação: External Board Series
> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e FreeSWITCH.
> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
> _______________________________________________
> DIGIVOICE  Fabricante de Placas de Voz e Channel Bank
> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
> Centro Treinamento - Curso de PABX IP -  Asterisk  - Site  www.digivoice.com.br
> ________
> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do mercado.
> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
> ______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org




Mais detalhes sobre a lista de discussão AsteriskBrasil