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

Wanderson Alves Rodrigues wanderson.alves.rodrigues em gmail.com
Sexta Março 19 09:46:23 BRT 2010


OI Luis Reis. Bom Dia.

Sim eu estava olhando o tutorial do site asterisk-java.
import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;

public class HelloAgiScript extends BaseAgiScript
{
    public void service(AgiRequest request, AgiChannel channel)
            throws AgiException
    {
        // Answer the channel...
        answer();

        // ...say hello...
        streamFile("welcome");

        // ...and hangup.
        hangup();
    }
}

Nesse exemplo ele herda de BaseAgiScript, para a construção de um
script para o asterisk. Mais como ficaria para pegar o numero do
telefone que ligou ou o dtmf, to lendo vários tutoriais e até textos
do asteriskBrasil, mais o AGI não ficou tão claro como o Manager.

Eu não compreendi a comunicação como é feita entre o programa feito
usando AGI como o asterisk é por socket?

Esse exemplo do site ficar rodando muito parecido como um servidor
feito em socket.

Esse AGI é um pouco complexo de entender.

Se você tiver um exemplo mais explicativo tem como me mandar, to
ficando louco para tentar compreender esse tal de AGI.

Muito Obrigado, as repostas então me ajudando a entender melhor.

Em 19 de março de 2010 06:10, Luis Reis
<luis.reis em singularideas.com.br> escreveu:
> você usa a baseagiscript como no exemplo do site.
>
> Em 18/03/10, Wanderson Alves
> Rodrigues<wanderson.alves.rodrigues em gmail.com> escreveu:
>> Oi Luis Rei.
>>
>> Muito obrigado pela reposta me ajudou. Mais tenho outra duvida, quando
>> uso AGI da biblioteca asterisk-java para pegar DTMF qual classe da
>> Package org.asteriskjava.fastagi  devo usar.
>>
>> Em 17 de março de 2010 06:03, Luis Reis
>> <luis.reis em singularideas.com.br> escreveu:
>>> 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
>>> _______________________________________________
>>> 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


Mais detalhes sobre a lista de discussão AsteriskBrasil