[AsteriskBrasil] como buscar o DTMF e passar pro Java?

Luis Reis luis.reis em singularideas.com.br
Quarta Março 17 06:03:09 BRT 2010


opa

Quando você coloca o agi no /var/lib/asterisk/agi-bin ele é feito em
qualquer linguagem em que ele recebe os comandos em stdin e responde
para o asterisk em stdout. Ele funciona como um shellscrip.

Quando usamos o asterisk-java, ele executa este mesmo protocolo sò que
em cima de sockets. Isto permite que tenhamos vários asterisk rodando
todos os agis em um mesmo lugar. Outra vantagem de colocar os agi em
outra máquina é que a escala do asterisk não ficaćomprometida pelo
números dos forks dos agi locais.

Logo: agi local is evil.

agora, como no exemplo ele dah um streamfile, todos os arquivos fe som
ou arqivos que voce manda gravar o audio ou dtmf serão armazenados
localmente no astwrisk. No meu caso eu tenho uma area comum num
storage para fazer isso e deixar os arquivos disponiveis para todos os
asterisk.

Espero ter ajudado.

Em 16/03/10, Wanderson Alves
Rodrigues<wanderson.alves.rodrigues em gmail.com> escreveu:
> Oi Pessoal.
>
> Estou com algumas duvida, quando faço um programa tipo aquele exemplo
> do site asterisk-java:
>
> import net.sf.asterisk.fastagi.AGIChannel;
> import net.sf.asterisk.fastagi.AGIException;
> import net.sf.asterisk.fastagi.AGIRequest;
> import net.sf.asterisk.fastagi.AbstractAGIScript;
>
> public class HelloAGIScript extends AbstractAGIScript
> {
>     public void service(AGIRequest request, AGIChannel channel)
>             throws AGIException
>     {
>         // Answer the channel...
>         answer(channel);
> 		
>         // ...say hello...
>         streamFile(channel, "welcome");
> 		
>         // ...and hangup.
>         hangup(channel);
>     }
> }
>
>
> No meu caso tenho duas maquinas uma rodando o asterisk em um linux, e
> na maquina onde estou programando em  java(outra maquina). Depois de
> ter configurado o extensions.conf e criado o
> fastagi-mapping.properties eu copilei o codigo java gerando um .jar.
> Eu estava lendo em outros sites que esse .jar tem que ir nesse
> diretorio no asterisk /var/lib/asterisk/agi-bin, isso não compreendi.
> Esse código quando executado fica como um servidor, esperando a
> interação com o asterisk. Mais se eu quiser pegar o telefone ou
> dígitos do dtmf como eu faço, tenho que fazer uma associação entre a
> classe que herda de  AbstractAGIScript é um classe que mostre ou
> guarde esses valores,será que funcionar?.
>
> To meio perdido ainda no funcionamento do AGI java, eu estava tentando
> usar o Manage API a classe EventDTM, mais essa classe só funciona com
> asterisk 1.6 eu tenho 1.4.
>
> Obrigado pela ajuda..
>
> Em 15 de março de 2010 19:36, Paulo Sigrist <paulo.sigrist em gmail.com>
> escreveu:
>> Opa!
>> Pra quem quiser saber da ajuda que o Luis me deu, aqui vai a Thread
>> http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/2010-February/038699.html
>> []´s
>> Sigrist
>>
>> 2010/3/9 Luis Reis <luis.reis em singularideas.com.br>
>>>
>>> Pessoal
>>>
>>> Capturar DTMF pelo Asterisk-JAVA é mais confiavel utilizar um
>>> BaseAgiScript.
>>>
>>> Eu auxiliei um amigo aqui pela lista no início de fevereiro .. dá uma
>>> pesquisada no histórico .. eu passei um exemplo pra ele.
>>>
>>> Aqui nos usamos assim e funciona perfeitamente.
>>>
>>> []'s
>>>
>>> Em 8 de março de 2010 22:32, Wanderson Alves Rodrigues
>>> <wanderson.alves.rodrigues em gmail.com> escreveu:
>>>>
>>>> Boa noite pessoal.
>>>>
>>>> Tenho uma duvida no funcionamento dos eventos do asterisk-java.
>>>>
>>>> Nesse exemplo eu consigo pegar o evento de conecção que meu programa
>>>> realiza com o asterisk.
>>>>
>>>> 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.event.ConnectEvent;
>>>> import org.asteriskjava.manager.event.ManagerEvent;
>>>>
>>>> public class HelloEvents implements ManagerEventListener
>>>> {
>>>>
>>>>    private ManagerConnection managerConnection;
>>>>
>>>>
>>>>    public HelloEvents() throws IOException
>>>>    {
>>>>
>>>>        ManagerConnectionFactory factory = new ManagerConnectionFactory(
>>>>        "192.168.40.66", "admin", "digi");
>>>>        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();
>>>>        // and finally log off and disconnect
>>>>        managerConnection.logoff();
>>>>
>>>>    }
>>>>
>>>>    public void onManagerEvent(ManagerEvent event)
>>>>    {
>>>>       if (event instanceof ConnectEvent)
>>>>       {
>>>>            ConnectEvent conect = (ConnectEvent) event;
>>>>
>>>>            System.out.println("versão do protocolo : "
>>>> +conect.getProtocolIdentifier());
>>>>
>>>>        }
>>>>
>>>>
>>>>    }
>>>>
>>>>    public static void main(String[] args) throws Exception
>>>>    {
>>>>
>>>>        HelloEvents helloEvents;
>>>>        helloEvents = new HelloEvents();
>>>>        helloEvents.run();
>>>>
>>>>    }
>>>>
>>>> }
>>>>
>>>> ###########################################################################
>>>> Beleza isso é fácil, mais por exemplo se eu quiser pegar os dígitos do
>>>> dtmf de um celular por exemplo como usar a classe DtmfEvent.
>>>> Claro que vou ter que configurar os extensions e sip, mais se eu fizer
>>>> por exemplo.
>>>>
>>>> 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.event.DtmfEvent;
>>>> import org.asteriskjava.manager.event.ManagerEvent;
>>>>
>>>> public class HelloEvents implements ManagerEventListener
>>>> {
>>>>
>>>>    private ManagerConnection managerConnection;
>>>>
>>>>
>>>>    public HelloEvents() throws IOException
>>>>    {
>>>>
>>>>        ManagerConnectionFactory factory = new ManagerConnectionFactory(
>>>>        "192.168.40.66", "admin", "digi");
>>>>        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();
>>>>        // 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();
>>>>
>>>>    }
>>>>
>>>> }
>>>>
>>>>
>>>> Só isso não garante que eu possa usar os dígitos dtmf, no caso exibir.
>>>>
>>>> To quebrando a cabeça, por favo me de uma luz. Existe uma maneira de
>>>> usar essa classe DtmfEvent(como essa classe funciona). Caso eu ligue
>>>> para um canal da placa VB0408 que tenho, o asterisk faria a gerencia
>>>> do atendimento mais se eu tecla em um numero como garantir que a
>>>> classe DtmfEvent saiba que ocorreu um evento dtmf.
>>>>
>>>> Muito obrigado..
>>>>
>>>>
>>>> Em 8 de março de 2010 17:21, jefferson alexandre
>>>> <jefferson.alexandre em gmail.com> escreveu:
>>>> > Já tentou usar " AGI get data"?
>>>> > Aqui tem um exemplo em PHP que talvez lhe ajude.
>>>> >
>>>> > http://phpagi.sourceforge.net/phpagi2/docs/__examplesource/exsource__root_phpagi-2.14_examples_dtmf.php_9f0d08538805cb50bb0f290606fe78d3.html
>>>> >
>>>> > 2010/3/8 <brunoantognolli em email.com>
>>>> >>
>>>> >> Boa tarde Wanderson,
>>>> >>
>>>> >> Eu precisei utilizar "comparações de som" com o Asterisk-Java e não
>>>> >> consegui inicialmente, e não tive a oportunidade de tentar outra vez.
>>>> >>
>>>> >> Imagino que você possa gravar o DMTF e após isso comparar as ondas de
>>>> >> som,
>>>> >> a partir daí poderia saber qual número foi digitado.
>>>> >>
>>>> >> Talvez esse link ajude um pouco:
>>>> >>
>>>> >>
>>>> >> http://blogs.reucon.com/asterisk-java/2009/04/03/speech_recognition_with_asterisk_java.html
>>>> >>
>>>> >>
>>>> >>
>>>> >> Se você conseguir dar continuidade no assunto e resolver o problema
>>>> >> posta
>>>> >> aí...
>>>> >> Att,
>>>> >> Bruno
>>>> >>
>>>> >>
>>>> >>
>>>> >> -----Original Message-----
>>>> >> From: Wanderson Alves Rodrigues <wanderson.alves.rodrigues em gmail.com>
>>>> >> To: AsteriskBrasil em listas.asteriskbrasil.org
>>>> >> Sent: Mon, Mar 8, 2010 3:23 pm
>>>> >> Subject: [AsteriskBrasil] como buscar o DTMF e passar pro Java?
>>>> >>
>>>> >> Caros, esta é a primeira vez que preciso de um Help da lista.
>>>> >> Preciso buscar o DTMF de um dos oito canais de uma placa VB0408 e
>>>> >> passar para um programa Java.
>>>> >>
>>>> >> Já consigo buscar os eventos de conexão (embora não saiba o que
>>>> >> significam os numeros que aparecem).
>>>> >>
>>>> >> O servidor está 100% operacional, drivers devidamente compilados e
>>>> >> placa funcionando corretamente. Uso um Trixbox.
>>>> >>
>>>> >> Optei por Asterisk-Java por ter facilidade com a linguagem.
>>>> >> O case final é o seguinte:
>>>> >>
>>>> >> Preciso que meu programa seja capaz de buscar simultaneamente os
>>>> >> DTMFs
>>>> >> de cada canal da VB0408 e exiba o número pressionado no celular (após
>>>> >> capturar o DTMF) na tela, para cada canal.
>>>> >>
>>>> >> Alguém sabe se usando a Menager API somente, eu consigo obter os
>>>> >> DTMFs?
>>>> >> Qualquer exemplo será muito bem vindo!
>>>> >>
>>>> >> Grande abraço a todos!
>>>> >>
>>>> >> Wanderson.
>>>> >> _______________________________________________
>>>> >> 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
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > 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
>>
> _______________________________________________
> 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


Mais detalhes sobre a lista de discussão AsteriskBrasil