[AsteriskBrasil] Asterisk / java / DTMF

Luis Reis luis.reis em singularideas.com.br
Terça Março 2 17:54:56 BRT 2010


Cara .. a densidade dos requisitos é que nem o Hélio (gás). Altamente
voláteis!

[]'s

Em 1 de março de 2010 16:28, Paulo Sigrist <paulo.sigrist em gmail.com>escreveu:

> Olá pessoal,
>
> somente concluindo o assunto. Segui o conselho do Luis e utilizei a API do
> AGI da asterisk-java para fazer a integração com a minha aplicação.
>
> Durante a semana, houve uma mudança nos requisitos e a aplicação não
> precisará ligar para o usuário (isso até decidirem que vai precisar
> novamente hehe).
>
> Obrigado pela ajuda Luis
>
> 2010/2/22 Paulo Sigrist <paulo.sigrist em gmail.com>
>
> 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
>>>
>>
>>
>
> _______________________________________________
> 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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100302/9e688b77/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil