[AsteriskBrasil] Asterisk / java / DTMF
Paulo Sigrist
paulo.sigrist em gmail.com
Sexta Fevereiro 19 14:45:27 BRST 2010
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
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100219/baea533e/attachment.htm
Mais detalhes sobre a lista de discussão AsteriskBrasil