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.sigr...@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.r...@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.sigr...@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@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@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@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@listas.asteriskbrasil.org http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil