<div>Jovem</div>
<div> </div>
<div>já sofri muito com isso e a melhor solução é você fazer um AGI que faça um dial utilizando a opção <strong>G(context^exten^pri), </strong>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</div>
<div> </div>
<div>public class HelloAgiScript extends BaseAgiScript {<br> public void service(AgiRequest request, AgiChannel channel) throws AgiException {</div>
<div> exec("dial", "SIP/gateway/03432320000,30,tTG(ura^n^1)");<br> }<br>}</div>
<div> </div>
<div>Neste contexto da URA, tu podes chamar outro AGI que faz o tratamento dos DTMF normalmente. </div>
<div> </div>
<div>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.<br></div>
<div>.</div>
<div> </div>
<div>me fala se vc entendeu ou não...<br></div>
<div class="gmail_quote">Em 19 de fevereiro de 2010 14:45, Paulo Sigrist <span dir="ltr"><<a href="mailto:paulo.sigrist@gmail.com">paulo.sigrist@gmail.com</a>></span> escreveu:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">Luis,<br><br>seguem os arquivos:<br><br>(Lembrando que esses códigos se referem a um teste....)<br><br>= extensions.conf =============================================================<br>
[globals]<br><br>[general]<br>autofallthrough=yes<br><br>[macro-local-calls]<br>exten => s,1,Dial(${ARG1})<br>exten => s,n,Hangup()<br><br>[main-dialplan]<br>include => dtmf-test<br>include => local-numbers<br>
include => default-route<br><br>;Hangup extension<br>exten => h,1,NoOp(Hangup extension)<br><br>[local-numbers]<br>;<br>; caracter _ significa que estamos falando de um pattern<br>; X = 0-9<br>; Z = 1-9<br>; N = 2-9<br>
; [5-7] = 5,6,7 (range)<br>; . = um ou mais caracteres<br>; ! um ou mais cracteres<br>; variavel ${EXTEN} contem numero efetivamente discado<br>; ${EXTEN:1} - tira primeiro digito do numero discado<br>; ${EXTEN:1:3} - especifica range 1 a 3<br>
; ${EXTEN:-4:4} - comeca quatro digitos do final<br>exten => _3755XXXX,1,Macro(local-calls,SIP/+5519${EXTEN:-8})<br>exten => _+19X.3755XXXX,1,Macro(local-calls,SIP/+5519${EXTEN:-8})<br><br><br>[default-route]<br><br>
[dtmf-test]<br>exten => 456,1,Answer()<br>exten => 456,n,Background(hello-world)<br>exten => 456,n,WaitExten(100)<br>exten => 1,1,Playback(digits/1)<br>exten => 1,n,Goto(ported-numbers,456,1)<br><br><br>= sip.conf =============================================================<br>
[general]<br>bindport => 5060<br>canreinvite = no<br>dtmfmode=info<br>disallow=all<br>allow=ulaw<br><br>[phone-template](!); The exclamation point in parenthesis makes a template.<br>type = friend<br>context = main-dialplan<br>
host = dynamic<br>srvlookup = yes<br><br>[<a href="http://carrier1.com/" target="_blank">carrier1.com</a>]<br>type = friend<br>;user=phone<br>host = <a href="http://carrier1.com/" target="_blank">carrier1.com</a><br>insecure = very<br>
context = incoming-ims-calls<br>canreinvite = no<br>srvlookup = yes<br>disallow = all<br>allow = ulaw<br>allow = alaw<br>;usereqphone=yes<br><br>[+551937550000]<br>type = friend<br>context = main-dialplan<br>host = dynamic<br>
srvlookup = yes<br><br>[+551937558888]<br>type = friend<br>context = main-dialplan<br>host = dynamic<br>srvlookup = yes<br><br><br>= HelloEvents.java =============================================================<br>package br.org.teste.asterisk.dtmf;<br>
<br>import java.io.IOException;<br><br>import org.asteriskjava.manager.AuthenticationFailedException;<br>import org.asteriskjava.manager.ManagerConnection;<br>import org.asteriskjava.manager.ManagerConnectionFactory;<br>import org.asteriskjava.manager.ManagerEventListener;<br>
import org.asteriskjava.manager.TimeoutException;<br>import org.asteriskjava.manager.action.OriginateAction;<br>import org.asteriskjava.manager.event.DtmfEvent;<br>import org.asteriskjava.manager.event.ManagerEvent;<br>import org.asteriskjava.manager.response.ManagerResponse;<br>
<br>public class HelloEvents implements ManagerEventListener<br>{<br> private ManagerConnection managerConnection;<br><br> public HelloEvents() throws IOException<br> {<br> ManagerConnectionFactory factory = new ManagerConnectionFactory(<br>
"127.0.0.1", "manager", "pa55w0rd");<br><br> this.managerConnection = factory.createManagerConnection();<br> }<br><br> public void run() throws IOException, AuthenticationFailedException,<br>
TimeoutException, InterruptedException<br> {<br> // register for events<br> managerConnection.addEventListener(this);<br> <br> // connect to Asterisk and log in<br> managerConnection.login();<br>
<br> // request channel state<br> {<br> OriginateAction originateAction;<br> ManagerResponse originateResponse;<br><br> originateAction = new OriginateAction();<br> originateAction.setChannel("SIP/+551937550000");<br>
originateAction.setContext("default");<br> originateAction.setExten("37558888");<br> originateAction.setPriority(new Integer(1));<br> <br> originateAction.setTimeout(new Integer(30000));<br>
<br> // send the originate action and wait for a maximum of 30 seconds for Asterisk<br> // to send a reply<br> originateResponse = managerConnection.sendAction(originateAction, 30000);<br>
<br> // print out whether the originate succeeded or not<br> System.out.println(originateResponse.getResponse());<br><br> }<br> <br> // Fica travado recebendo os eventos (parar o teste pelo STOP da IDE)<br>
while (true) {<br> if (false) break;<br> }<br><br> // and finally log off and disconnect<br> managerConnection.logoff();<br> }<br><br> public void onManagerEvent(ManagerEvent event)<br>
{<br> if (event instanceof DtmfEvent) {<br> DtmfEvent dtmf = (DtmfEvent) event;<br> <br> System.out.println("Digit : " +dtmf.getDigit());<br> System.out.println("Source : " + dtmf.getSource());<br>
System.out.println("Channel: " +dtmf.getChannel());<br> <br> System.out.println(dtmf);<br> }<br> <br> }<br><br> public static void main(String[] args) throws Exception<br>
{<br> HelloEvents helloEvents;<br><br> helloEvents = new HelloEvents();<br> helloEvents.run();<br> }<br>}<br><br>=============================================================================<br>
<br>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.<br>
<br>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.<br><br>Obrigado<br>Paulo Sigrist<br>
<br>
<div class="gmail_quote">2010/2/19 Luis Reis <span dir="ltr"><<a href="mailto:luis.reis@singularideas.com.br" target="_blank">luis.reis@singularideas.com.br</a>></span>
<div>
<div></div>
<div class="h5"><br>
<blockquote style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0pt 0pt 0pt 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>Jovem</div>
<div> </div>
<div>Tu tens que fazer a aplicação em AGI Síncrono e não orientada à eventos.</div>
<div> </div>
<div>Manda o fonte aí para eu te ajudar.<br><br></div>
<div class="gmail_quote">Em 19 de fevereiro de 2010 11:50, Paulo Sigrist <span dir="ltr"><<a href="mailto:paulo.sigrist@gmail.com" target="_blank">paulo.sigrist@gmail.com</a>></span> escreveu:<br>
<blockquote style="BORDER-LEFT: rgb(204,204,204) 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>
<div></div>
<div>Olá pessoal,<br><br>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.<br>
<br>Até ai tudo tranquilo, funcionando muito bem.<br><br>O problema, é que a lógica da minha aplicação é a seguinte:<br><br>1 - Aplicação liga para uma extensão<br>2 - Aplicação apresenta o menu para o usuário<br>3 - Usuário seleciona a opção do menu<br>
4 - Aplicação executa a ação correspondente a seleção do usuário.<br><br>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.<br>
<br>Minha dúvida é:<br><br>É possível reconhecer o DTMF do usuário que recebe a ligação?<br><br>Obrigado<br><font color="#888888">Paulo Sigrist<br></font><br></div></div>_______________________________________________<br>
KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.<br>- Hardware com alta disponibilidade de recursos e qualidade KHOMP<br>- Suporte técnico local qualificado e gratuito<br>Conheça a linha completa de produtos KHOMP em <a href="http://www.khomp.com.br/" target="_blank">www.khomp.com.br</a><br>
_______________________________________________<br>Lista de discussões AsteriskBrasil.org<br><a href="mailto:AsteriskBrasil@listas.asteriskbrasil.org" target="_blank">AsteriskBrasil@listas.asteriskbrasil.org</a><br><a href="http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil" target="_blank">http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Luis Machado Reis<br>Analista de Sistemas<br><a href="http://www.singularideas.com.br/" target="_blank">www.singularideas.com.br</a><br><br>_______________________________________________<br>
KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.<br>- Hardware com alta disponibilidade de recursos e qualidade KHOMP<br>- Suporte técnico local qualificado e gratuito<br>Conheça a linha completa de produtos KHOMP em <a href="http://www.khomp.com.br/" target="_blank">www.khomp.com.br</a><br>
_______________________________________________<br>Lista de discussões AsteriskBrasil.org<br><a href="mailto:AsteriskBrasil@listas.asteriskbrasil.org" target="_blank">AsteriskBrasil@listas.asteriskbrasil.org</a><br><a href="http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil" target="_blank">http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil</a><br>
</blockquote></div></div></div><br><br>_______________________________________________<br>KHOMP: qualidade em placas de E1, GSM, FXS e FXO para Asterisk.<br>- Hardware com alta disponibilidade de recursos e qualidade KHOMP<br>
- Suporte técnico local qualificado e gratuito<br>Conheça a linha completa de produtos KHOMP em <a href="http://www.khomp.com.br/" target="_blank">www.khomp.com.br</a><br>_______________________________________________<br>
Lista de discussões AsteriskBrasil.org<br><a href="mailto:AsteriskBrasil@listas.asteriskbrasil.org">AsteriskBrasil@listas.asteriskbrasil.org</a><br><a href="http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil" target="_blank">http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Luis Machado Reis<br>Analista de Sistemas<br><a href="http://www.singularideas.com.br">www.singularideas.com.br</a><br>