[AsteriskBrasil] Asterisk / java / DTMF

Paulo Sigrist paulo.sigrist em gmail.com
Segunda Fevereiro 22 09:03:15 BRT 2010


Luis,

eu nunca trabalhei com o AGI, só havia utilizado a API do manager para
conectar o Java com o Asterisk.

Entendi mais ou menos o que voce explicou. Vou estudar como funciona o AGI e
fazer uns testes aqui. Assim que conseguir um progresso, informo aqui na
lista.

Obrigado pela ajuda

[]´s
Sigrist

2010/2/19 Luis Reis <luis.reis em singularideas.com.br>

> Jovem
>
> já sofri muito com isso e a melhor solução é você fazer um AGI que faça um
> dial utilizando a opção *G(context^exten^pri), *Isso permite que a
> chamada, assim que completada, seja transferida para um
> contexto-extensão-prioridade que tenha a sua URA. Se quiser fazer o dial no
> Java no agi seria assim
>
> public class HelloAgiScript extends BaseAgiScript {
>     public void service(AgiRequest request, AgiChannel channel) throws
> AgiException {
>         exec("dial", "SIP/gateway/03432320000,30,tTG(ura^n^1)");
>     }
> }
>
> Neste contexto da URA, tu podes chamar outro AGI que faz o tratamento dos
> DTMF normalmente.
>
> Se for via Manager, tu tens que codificar um OriginateAction e enviar para
> o Manager através da ManagerAPI e neste caso, a extenção que liga deve
> conter o AGI que vai tratar os seus DTMFs.
> .
>
> me fala se vc entendeu ou não...
> Em 19 de fevereiro de 2010 14:45, Paulo Sigrist <paulo.sigrist em gmail.com>escreveu:
>
> Luis,
>>
>> seguem os arquivos:
>>
>> (Lembrando que esses códigos se referem a um teste....)
>>
>> = extensions.conf
>> =============================================================
>> [globals]
>>
>> [general]
>> autofallthrough=yes
>>
>> [macro-local-calls]
>> exten => s,1,Dial(${ARG1})
>> exten => s,n,Hangup()
>>
>> [main-dialplan]
>> include => dtmf-test
>> include => local-numbers
>> include => default-route
>>
>> ;Hangup extension
>> exten => h,1,NoOp(Hangup extension)
>>
>> [local-numbers]
>> ;
>> ; caracter _ significa que estamos falando de um pattern
>> ; X = 0-9
>> ; Z = 1-9
>> ; N = 2-9
>> ; [5-7] = 5,6,7 (range)
>> ; . = um ou mais caracteres
>> ; ! um ou mais cracteres
>> ; variavel ${EXTEN} contem numero efetivamente discado
>> ; ${EXTEN:1} - tira primeiro digito do numero discado
>> ; ${EXTEN:1:3} - especifica range 1 a 3
>> ; ${EXTEN:-4:4} - comeca quatro digitos do final
>> exten => _3755XXXX,1,Macro(local-calls,SIP/+5519${EXTEN:-8})
>> exten => _+19X.3755XXXX,1,Macro(local-calls,SIP/+5519${EXTEN:-8})
>>
>>
>> [default-route]
>>
>> [dtmf-test]
>> exten => 456,1,Answer()
>> exten => 456,n,Background(hello-world)
>> exten => 456,n,WaitExten(100)
>> exten => 1,1,Playback(digits/1)
>> exten => 1,n,Goto(ported-numbers,456,1)
>>
>>
>> = sip.conf =============================================================
>> [general]
>> bindport => 5060
>> canreinvite = no
>> dtmfmode=info
>> disallow=all
>> allow=ulaw
>>
>> [phone-template](!); The exclamation point in parenthesis makes a
>> template.
>> type = friend
>> context = main-dialplan
>> host = dynamic
>> srvlookup = yes
>>
>> [carrier1.com]
>> type = friend
>> ;user=phone
>> host = carrier1.com
>> insecure = very
>> context = incoming-ims-calls
>> canreinvite = no
>> srvlookup = yes
>> disallow = all
>> allow = ulaw
>> allow = alaw
>> ;usereqphone=yes
>>
>> [+551937550000]
>> type = friend
>> context = main-dialplan
>> host = dynamic
>> srvlookup = yes
>>
>> [+551937558888]
>> type = friend
>> context = main-dialplan
>> host = dynamic
>> srvlookup = yes
>>
>>
>> = HelloEvents.java
>> =============================================================
>> package br.org.teste.asterisk.dtmf;
>>
>> import java.io.IOException;
>>
>> import org.asteriskjava.manager.AuthenticationFailedException;
>> import org.asteriskjava.manager.ManagerConnection;
>> import org.asteriskjava.manager.ManagerConnectionFactory;
>> import org.asteriskjava.manager.ManagerEventListener;
>> import org.asteriskjava.manager.TimeoutException;
>> import org.asteriskjava.manager.action.OriginateAction;
>> import org.asteriskjava.manager.event.DtmfEvent;
>> import org.asteriskjava.manager.event.ManagerEvent;
>> import org.asteriskjava.manager.response.ManagerResponse;
>>
>> public class HelloEvents implements ManagerEventListener
>> {
>>     private ManagerConnection managerConnection;
>>
>>     public HelloEvents() throws IOException
>>     {
>>         ManagerConnectionFactory factory = new ManagerConnectionFactory(
>>                 "127.0.0.1", "manager", "pa55w0rd");
>>
>>         this.managerConnection = factory.createManagerConnection();
>>     }
>>
>>     public void run() throws IOException, AuthenticationFailedException,
>>             TimeoutException, InterruptedException
>>     {
>>         // register for events
>>         managerConnection.addEventListener(this);
>>
>>         // connect to Asterisk and log in
>>         managerConnection.login();
>>
>>         // request channel state
>>         {
>>             OriginateAction originateAction;
>>             ManagerResponse originateResponse;
>>
>>             originateAction = new OriginateAction();
>>             originateAction.setChannel("SIP/+551937550000");
>>             originateAction.setContext("default");
>>             originateAction.setExten("37558888");
>>             originateAction.setPriority(new Integer(1));
>>
>>             originateAction.setTimeout(new Integer(30000));
>>
>>             // send the originate action and wait for a maximum of 30
>> seconds for Asterisk
>>             // to send a reply
>>             originateResponse =
>> managerConnection.sendAction(originateAction, 30000);
>>
>>             // print out whether the originate succeeded or not
>>             System.out.println(originateResponse.getResponse());
>>
>>         }
>>
>>         // Fica travado recebendo os eventos (parar o teste pelo STOP da
>> IDE)
>>         while (true) {
>>             if (false) break;
>>         }
>>
>>         // and finally log off and disconnect
>>         managerConnection.logoff();
>>     }
>>
>>     public void onManagerEvent(ManagerEvent event)
>>     {
>>         if (event instanceof DtmfEvent) {
>>             DtmfEvent dtmf = (DtmfEvent) event;
>>
>>             System.out.println("Digit  : " +dtmf.getDigit());
>>             System.out.println("Source : " + dtmf.getSource());
>>             System.out.println("Channel: " +dtmf.getChannel());
>>
>>             System.out.println(dtmf);
>>         }
>>
>>     }
>>
>>     public static void main(String[] args) throws Exception
>>     {
>>         HelloEvents helloEvents;
>>
>>         helloEvents = new HelloEvents();
>>         helloEvents.run();
>>     }
>> }
>>
>>
>> =============================================================================
>>
>> O que acontece é o seguinte. Quando pego um SIP Client e ligo para 456,
>> recebo a mensagem "Hello World" e caso aperte algum número, o mesmo é
>> repetido e logo após o "Hello World" é executado novamente. Se ao mesmo
>> tempo, roda a minha aplicação Java, recebo o evento DtmfEvent e consigo
>> realizar uma ação com as informações.
>>
>> O segundo teste, é fazer com que o Java ligue, o que eu consigo através do
>> OriginateAction, mas o que eu não consigo é receber os eventos DTMF no
>> Asterisk, que por sua vez, não repassa ao Java.
>>
>> Obrigado
>> Paulo Sigrist
>>
>> 2010/2/19 Luis Reis <luis.reis em singularideas.com.br>
>>
>>  Jovem
>>>
>>> Tu tens que fazer a aplicação em AGI Síncrono e não orientada à eventos.
>>>
>>> Manda o fonte aí para eu te ajudar.
>>>
>>> Em 19 de fevereiro de 2010 11:50, Paulo Sigrist <paulo.sigrist em gmail.com
>>> > escreveu:
>>>
>>>>  Olá pessoal,
>>>>
>>>> estou desenvolvendo uma aplicação que envolve o reconhecimento de DTMF
>>>> em java. Um primeiro teste, eu ligo para uma ramal 456, o asterisk atende a
>>>> chamada, e a partir desse momento, qualquer tecla que eu pressione no meu
>>>> aparelho, é enviado um sinal DTMF e o asterisk gera um evento, que eu
>>>> capturo no Java, através da API asterisk-java.
>>>>
>>>> Até ai tudo tranquilo, funcionando muito bem.
>>>>
>>>> O problema, é que a lógica da minha aplicação é a seguinte:
>>>>
>>>> 1 - Aplicação liga para uma extensão
>>>> 2 - Aplicação apresenta o menu para o usuário
>>>> 3 - Usuário seleciona a opção do menu
>>>> 4 - Aplicação executa a ação correspondente a seleção do usuário.
>>>>
>>>> os passos 1 e 2, eu consigo através da api asterisk-java. O que não
>>>> estou conseguindo é fazer o asterisk reconhecer que o usuário apertou uma
>>>> tecla no aparelho e gerar o evento DTMF para que o meu código em Java
>>>> reconheça e possa executar a ação.
>>>>
>>>> Minha dúvida é:
>>>>
>>>> É possível reconhecer o DTMF do usuário que recebe a ligação?
>>>>
>>>> Obrigado
>>>> Paulo Sigrist
>>>>
>>>> _______________________________________________
>>>> KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
>>>> - Hardware com alta disponibilidade de recursos e qualidade KHOMP
>>>> - Suporte técnico local qualificado e gratuito
>>>> Conheça a linha completa de produtos KHOMP em www.khomp.com.br
>>>> _______________________________________________
>>>> Lista de discussões AsteriskBrasil.org
>>>> AsteriskBrasil em listas.asteriskbrasil.org
>>>> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>>>>
>>>
>>>
>>>
>>> --
>>> Luis Machado Reis
>>> Analista de Sistemas
>>> www.singularideas.com.br
>>>
>>> _______________________________________________
>>> KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
>>> - Hardware com alta disponibilidade de recursos e qualidade KHOMP
>>> - Suporte técnico local qualificado e gratuito
>>> Conheça a linha completa de produtos KHOMP em www.khomp.com.br
>>> _______________________________________________
>>> Lista de discussões AsteriskBrasil.org
>>> AsteriskBrasil em listas.asteriskbrasil.org
>>> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>>>
>>
>>
>> _______________________________________________
>> KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
>> - Hardware com alta disponibilidade de recursos e qualidade KHOMP
>> - Suporte técnico local qualificado e gratuito
>> Conheça a linha completa de produtos KHOMP em www.khomp.com.br
>> _______________________________________________
>> Lista de discussões AsteriskBrasil.org
>> AsteriskBrasil em listas.asteriskbrasil.org
>> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>>
>
>
>
> --
> Luis Machado Reis
> Analista de Sistemas
> www.singularideas.com.br
>
> _______________________________________________
> KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.
> - Hardware com alta disponibilidade de recursos e qualidade KHOMP
> - Suporte técnico local qualificado e gratuito
> Conheça a linha completa de produtos KHOMP em www.khomp.com.br
> _______________________________________________
> Lista de discussões AsteriskBrasil.org
> AsteriskBrasil em listas.asteriskbrasil.org
> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100222/be627b4d/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil