Cursos Asterisk en México

[RESUELTO] problema con usuario sip

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • [RESUELTO] problema con usuario sip

    hola a tod@s, espero que esten muy bien, mi problema es el siguiente: estoy haciendo una aplicación en asterisk y java, con el fin de pasar dos numero telefonicos, N1 y N2y enlazarlos en una llamada, y con el siguiente dialplan:

    [llamada_saliente]

    exten => _XXXXXXXX,1,Verbose(4|echo test application)

    same => n,Answer()

    same => n,Dial(SIP/50640101030/${EXTEN},15,gM(Answer^${VAR2}))

    same => n,GotoIf($[$["${DIALSTATUS}" != "ANSWER"] ]?noAnswer:contestada)

    same => n(contestada), NoOp(se termino exitosamente!!)

    same => n,Hangup()

    same => n(noAnswer),NoOp(por alguna razon no se contesto la llamada)

    same => n,Hangup()


    [macro-Answer]

    exten => s,1,NoOp(se contesto la llamada ${ARG1})

    same => n,Dial(SIP/50640101030/${ARG1})


    por dicha hace lo que quiero, lo que pasa es que desde el programa que hice en java utilizo un usuario sip(sip/1000). el problema es que si el usuario sip no esta resgistrado en un softphone, ya no funciona..

    mi pregunta es: que debo hacer para que todo funcione sin la necesidad de tener abierto el softphone y darle click al boton answer? o sea que lo haga de forma automatica.

    muchas gracias, me cuesta explicarme, ojala me puedan entender...

  • #2
    Suena a que necesitas un cliente sip en Java. En realidad es difícil poder ayudarte sin saber que es lo que debe/hace tu aplicación de Java y el objetivo final.

    Comentario


    • #3
      muchas gracias por contestar, la idea es la siguiente yo tengo el siguiente programa en java:

      .
      .
      .
      ManagerConnectionFactory factory = new ManagerConnectionFactory(hostname, userName, password);

      ManagerConnection manager = factory.createManagerConnection();

      manager.login();

      String numTel1 = JOptionPane.showInputDialog("Ingrese el primer numero: ");
      String numTel2 = JOptionPane.showInputDialog("Ingrese el segundo numero: ");


      OriginateAction originateAction1 = new OriginateAction();
      originateAction1.setChannel("SIP/1000");
      originateAction1.setContext("phones");
      originateAction1.setExten(numTel1);
      originateAction1.setPriority( new Integer(1) );
      originateAction1.setVariable("VAR1", numTel1);
      originateAction1.setVariable("VAR2", numTel2);
      originateAction1.setCallerId("Llamada de Hotel");


      System.out.println(originateAction1.getChannel());
      ManagerResponse response = manager.sendAction(originateAction1,10000);
      .
      .
      .

      este programa efectivamente me permite entrar a la central,(hostname, userName, password) esto configurado en el archivo manager.conf, por otra parte tengo un usuario sip(SIP/1000) en la central asterisk y junto con el plan de marcado que esta en el mensaje anterior es posible lograr la llamada a ambos numeros telefonicos y que puedan establecer una comunicacion.

      ahora cual es el problema? que todo esto debería funcionar sin la necesidad de usar este usuario sip(SIP/1000). el problema es que si el usuario no esta registrado y activo en un softphone, por ejemplo, no hace absolutamente nada...

      la pregunta es. como lograr el mismo objetivo sin que exista la necesidad de usar este usuario sip?

      espero que este mas claro, te reitero muchas gracias.
      Editado por última vez por Kopetico; https://asteriskmx.org/foros/member/2057-kopetico en 01-14-2014, 08:29 PM.

      Comentario


      • #4
        Funciona de esa manera porque eso es lo que le estas diciendo que haga en el programa de Java. Básicamente estas enviando esto: ORIGINATE SIP/1000 extensión ${elnumero}@phones y eso traducido a humano es: haces que el asterisk le envíe la llamada al peer sip 1000 y en cuanto éste contesta se marca ${elnumero}.

        Dependiendo de lo que quieras hacer o a donde quieras enviar ${elnumero} debes cambiar el canal, usar canales locales o enviar a alguna aplicación. Es todo lo que te puedo decir sin saber que es lo que quieres hacer exactamente con tu llamada.

        Comentario


        • #5
          bueno lo que quiero es hacer es justamente eso solo una llamada, por ejemplo, que marque dos numeros cualesquiera, ya sea dos numeros que estan en la red publica, puede ser numeros de telefonos celulares, casa, u oficina. estos dos numeros son puesto en conferencia para que puedan establecer una llamada normal y corriente.

          ahora, mencionaste que necesito un cliente sip en java, puedes explicarme con mas detalle en que consiste?

          muchas gracias! :-)

          Comentario


          • #6
            En un principio creí que era lo que necesitabas pero no, si lo que quieres es juntar dos canales externos(números telefónicos) en una conferencia lo puedes hacer con originate solo que en lugar de usar extensión como destino usa una aplicación en este caso podría ser meetme o confbridge. Tendrás que hacer el originate cada vez que quieras añadir un número al cuarto de conferencia. Si sólo los quieres juntar usa Bridge.

            Para mas información checa en la consola: core show application originate, core show application bridge, core show application meetme y core show application confbridge.

            Un cliente sip es prácticamente un softphone, un teléfono o un ata de modo que en le caso de Java sería un softphone hecho en y para Java.

            Comentario


            • #7
              muchas gracias. voy a intentar eso que dices, apenas logre algo aviso... , muy amable.

              Comentario


              • #8
                otra pregunta para que debo usar bridge? o meetme? si es para conectar los numeros no es necesario por que con el codigo anterior eso se puede hacer. basicamente yo lo que necesito es lograr esto sin usar el usuario sip, el SIP/1000. en este caso.

                Comentario


                • #9
                  Precisamente para no usar tu canal sip/1000. Creo que debes empezar por comprender que es lo que hace tu programa de Java(o el comando originate) una vez que lo tengas claro veras que es muy sencillo enviar llamadas sin usar un canal sip local.

                  Comentario


                  • #10
                    Por ejemplo so quisiera conectar mi celular con mi casa desde el cli haría algo así: originate Dahdi/0445523456700 extensión 55237689@local

                    O si quisiera meter 3 números a una conferencia haría algo así:
                    Originate dahdi/num1 application meetme 400
                    Originate dahdi/num2 application meetme 400
                    Originate dahdi/num3 application meetme 400

                    Dependiendo de la complejidad del programa evaluaras cual es tu mejor opción.

                    Comentario


                    • #11
                      muchas gracias, en mi caso, si las llamadas deben de salir por una troncal sip, cual es el argumento que debo pasar en la aplicacion de java? exactamente aca originateAction1.setChannel(??); para no usar el canal sip/1000

                      te lo cuento por que leyendo de la pagina de asterisk http://www.voip-info.org/wiki/view/A...+cli+originate, hay dos formas de usar el comando originate:

                      channel originate <tech/data> application <appname> [appdata]
                      channel originate <tech/data> extension [<exten>@][<context>]

                      cual es el argumento que debo de pasar en <tech/data>?

                      muchas gracias..
                      Editado por última vez por Kopetico; https://asteriskmx.org/foros/member/2057-kopetico en 01-15-2014, 06:08 AM.

                      Comentario


                      • #12
                        Es lo mismo que si lo enviarás desde el dialplan: Originate SIP/provedor/numero.

                        Comentario


                        • #13
                          muchas gracias lo voy a probar y te aviso, muy amable..

                          Comentario


                          • #14
                            ya lo probe, funciona perfecto, muchas gracias navaismo, es usted muy amable, saludos.

                            Comentario


                            • #15
                              Hola a todos,
                              Tengo un problema.
                              Lo que quiero hacer es: realizar una llamada desde una terminal y que esta pueda salir, desde una aplicación java, lo que he podido hacer es que Asterisk llame a mi numero de interno y luego corte la llamada.
                              Creo que es porque no seteo bien el valor de la variable (originateAction1.setVariable("VAR2", numTel2))
                              Lo coloco en el código, pero no lo hace, creo que es porque no tengo acceso al dialplan, quisiera que me ayuden!!
                              Me gustaría saber si se puede acceder al dial plan desde java (para saber cómo se llama el nombre de la variable)??
                              o como puedo hacer para poder realizar la llamada de alguna otra forma.
                              He investigado mucho sobre el tema y la verdad que no se como arreglarlo y no me gustaría que tanto esfuerzo se desperdicie.
                              Desde ya muchas gracias.

                              Saludos,
                              Oscar

                              Comentario

                              Principales Usuarios Activos

                              Colapsar

                              No hay usuarios activos superiores.
                              Trabajando...
                              X