Cursos Asterisk en México

Ayuda AGI - PHP

Colapsar

Anuncio

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

  • Ayuda AGI - PHP

    Si alguien puede ayudarme estaría agradecida. Estoy iniciando en lo que es Asterisk, AGI, y bueno con AGI no me está yendo muy bien, no encuentro muchos tutoriales en la web....
    Tengo mi servidor que está sobre linux, tengo instalado Elastix 2.4
    He hecho bastantes pruebas con agi, he creado mis archivos .php pero nada...
    Si solo hago un playback "hola mundo" si funciona:

    vi /etc/asterisk/extensions_custom.conf

    exten => 2504,1,Answer
    exten => 2504,2,Playback(hello-world)


    Pero cuando intento llamar a mi archivo .php no funciona, la llamada se corta

    vi /etc/asterisk/extensions_custom.conf
    exten => 2504,1,Goto(prueba,2504,1)

    [prueba]
    exten => 2504,1,AGI(ping.php)

    PING.PHP este código es de la sgte pag web: http://phpagi.sourceforge.net/phpagi...69e8d5d5e.html


    #!/usr/local/bin/php -q
    <?php
    /**
    * @package phpAGI_examples
    * @version 2.0
    */

    set_time_limit(0);
    require('phpagi.php');
    $agi = new AGI();
    $agi->answer();

    // Play the "Enter the host you wish to ping, followed by the pound sign" prompt
    // and then play the beep.
    $agi->stream_file('ping');
    $result = $agi->get_data('beep', 3000, 20);
    $ip = str_replace('*', '.', $result['result']);

    /* Danger Will Robinson! This does NOT properly escape the ping command!
    * Someone could subvert your system if you don't fix this! - NO WARRANTY :P */
    $execstr = "/bin/ping -c 5 -q -w 9 $ip|grep transmitted";

    // be polite.
    $agi->stream_file('thanks', '#');

    $p = popen($execstr, 'r');
    if($p == FALSE)
    {
    $agi->text2wav("Failed to ping $ip");
    $agi->conlog("Failed to ping $execstr");
    }
    else
    {
    $str = '';
    while(!feof($p))
    {
    $r = fgets($p, 1024);
    if(!$r) break;
    $str .= $r;
    }

    // a minor hack.
    $str = str_replace('ms', 'milli-seconds', $str);
    // have festival read back the ping results.
    $agi->text2wav("$ip - $str");
    }

    $agi->hangup();
    ?>


    El debug lanza esto:

    Verbosity is at least 3
    -- Remote UNIX connection
    == Using SIP RTP TOS bits 184
    == Using SIP RTP CoS mark 5
    -- Executing [2504@from-internal:1] Goto("SIP/2500-00000000", "prueba,2504,1") in new stack
    -- Goto (prueba,2504,1)
    -- Executing [2504@prueba:1] AGI("SIP/2500-00000000", "ping.php") in new stack
    -- Auto fallthrough, channel 'SIP/2500-00000000' status is 'UNKNOWN'


    Me falta algo? estoy haciendo algo mal? He intentado con otros códigos mucho mas simples pero nada...
    Gracias.

  • #2
    Tienes las librería de phpagi en el mismo lugar que tu script? Tu script corre en consola sin enviar errores? El script puede ser leído y ejecutado por asterisk? Por último habilita el debug de agi en la consola de asterisk para ver mas detalles de la salida.

    PD: trata de usar un AGI mas sencillo si vas comenzando tu agi usa comandos de consola y festival.

    Comentario


    • #3
      Navaismo gracias por responder
      Mis archivos php los he creado en: /var/lib/asterisk/agi-bin

      Y mi libreria phpagi esta tambien en el mismo /var/lib/asterisk/agi-bin/phpagi.php

      Perdon pero soy nueva.. muy novata con esto de asterisk.... cómo hago correr mi script en consola? Cómo sé si ha sido leido y ejecutado por asterisk?

      El debug AGI está habilitado en Asterisk -r dentro del CLI con: agi set debug on

      He intentado con este código y con otros códigos también pero sin éxito

      Este código que es mas sencillo que lo he llamado prueba.php:
      /var/lib/asterisk/agi-bin/prueba.php


      #!/usr/local/bin/php -q
      <?php
      set_time_limit(30);
      require('phpagi.php');
      $agi = new AGI();
      $agi->answer();
      $agi->text2wav("Hello world");
      $agi->hangup();
      ?>

      La configuración en extensions_custom.conf es:

      [from-internal-custom]
      exten => 1234,1,Playback(demo-congrats) ; extensions can dial 1234
      exten => 1234,2,Hangup()
      exten => h,1,Hangup()
      exten => 2504,1,Goto(prueba,2504,1)
      include => agentlogin
      include => conferences
      include => calendar-event
      include => weather-wakeup

      [prueba]
      exten => 2504,1,AGI(prueba.php)


      Llamo a la extensión 2504 desde mi softphone y pongo el debug que me muestra desde el CLI:

      AGI Debugging Enabled
      == Using SIP RTP TOS bits 184
      == Using SIP RTP CoS mark 5
      -- Executing [2504@from-internal:1] Goto("SIP/2500-00000004", "prueba,2504,1") in new stack
      -- Goto (prueba,2504,1)
      -- Executing [2504@prueba:1] AGI("SIP/2500-00000004", "prueba.php") in new stack
      -- Auto fallthrough, channel 'SIP/2500-00000004' status is 'UNKNOWN'

      NAVAISMO muchas gracias por tu ayuda.

      Comentario


      • #4
        Hola, para correrlo desde la consola de linux usa:

        Código:
        php prueba.php
        No debes ver ningún tipo de errores(quizás algunos warnings). ¿Tienes instalada la utilidad de text2wav?
        El agi debug sigue sin mostrar mucho. Para saber los permisos desde la consola de linux ejecuta:
        Código:
        ls -lha /var/lib/asterisk/agi-bin/prueba.php
        EL grupo y owner debe ser asterisk, tambien debe tener permisos de ejecución.

        Comentario


        • #5
          Vaya!! que sorpresa gracias Navaismo por responder tan pronto... y justo entraba para comentar que busqué en google para hacer correr el script en consola... encontré el comando BASH? esta bien?

          El código mantengo el de prueba.php... aquí quisiera hacerte una consulta el #!/usr/local/bin/php -q es importante escribirlo? he visto en otros códigos que varía y bueno no se si esto está yendo como comentario en el código? o si afecta para que al ejecutar lea estos archivos?

          #!/usr/local/bin/php -q
          <?php
          set_time_limit(30);
          require('phpagi.php');
          $agi = new AGI();
          $agi->answer();
          $agi->text2wav("Hello world");
          $agi->hangup();
          ?>

          y copio lo que botó al ejecutar el comando BASH:

          bash prueba.php

          prueba.php: line 2: ?php: No existe el fichero o el directorio
          prueba.php: line 3: syntax error near unexpected token `30'
          prueba.php: line 3: `set_time_limit(30);'

          Eliminé set_time_limit(30); por lo que mostraba ese error e igualmente vuelve a mostrar otro error

          prueba.php: line 2: ?php: No existe el fichero o el directorio
          prueba.php: line 3: syntax error near unexpected token `'phpagi.php''
          prueba.php: line 3: `require('phpagi.php');'


          He ejecutado el comando php prueba.php y te cuento que nada mas baja el cursor y se queda ahí no llega a botar ningún resultado.
          Cómo verifico si tengo instalado text2wav perdon la ignoracia, es que he instalado el Elastix y que ya ha venido casi todo por defecto instalado que es un maravilla porque ayuda bastante...
          Festival si tengo habilitado, pero del text2wav estoy buscando en la web y nada...

          He ejecutado lo que me mandaste y tiene estos permisos:
          ls -lha /var/lib/asterisk/agi-bin/prueba.php
          -rw-r--r-- 1 root root 157 ene 2 11:02 /var/lib/asterisk/agi-bin/prueba.php

          ya no sé qué mas hacer? cual es el problema?

          Comentario


          • #6
            hola buen dia

            teclea chmod +x prueba.php para que hagas ejecutable tu script

            saludos

            Comentario


            • #7
              JorgeCasas buen día, gracias por responder, te cuento que acepta el comando.... chmod +x prueba.php pero sigo con los mismos problemas.

              Comentario


              • #8
                Navaismo!!! gracias ahora si! no sabia que habia que darle enter despues del comando php prueba.php por alguna razón cuando ejecuté bash prueba.php ha cambiado algo porque en el debug mostraba que no encontraba el archivo asi que copie el codigo a otro archivo prueba2.php
                Y me muestra esto al correr desde la consola:

                php /prueba2.php

                ANSWER

                sh: /usr/src/festival/bin/text2wave: No existe el fichero o el directorio
                STREAM FILE /var/spool/asterisk//tmp//text2wav_3e25960a79dbc69b674cd4ec67a72c62 "" 0

                HANGUP


                Ahora veo de instalar el text2wave porque según muestra es lo que falla no es cierto?
                Muchas gracias Navaismo!

                Comentario


                • #9
                  Hola! me parecía haber encontrado el error... de configuración en /etc/asterisk/phpagi.conf

                  [festival]
                  text2wave=/usr/bin/text2wave
                  tempdir=/var/lib/asterisk/sounds/tmp/

                  cambié el text2wave porque llamaba a otra dirección donde no existía el archivo text2wave
                  Volví a ejecutar:
                  php /prueba2.php

                  ANSWER

                  STREAM FILE /var/spool/asterisk//tmp//text2wav_3e25960a79dbc69b674cd4ec67a72c62 "" 0

                  HANGUP

                  Al no dar Text2Wav ... decidí cambiar a FESTIVAL

                  #!/usr/local/bin/php -q
                  <?php
                  set_time_limit(30);
                  require('phpagi.php');
                  $agi = new AGI();
                  $agi->answer();
                  $agi->exec(festival,"Hola Mundo");
                  $agi->hangup();
                  ?>

                  Y al ejecutarlo desde consola me muestra esto:

                  php /prueba2.php

                  ANSWER

                  EXEC festival Hola Mundo

                  HANGUP


                  Pero!!! al llamar a la extensión... no escucho nada... y el debug muestra el mismo error... ahí no cambió nada!
                  No quiero escuchar con FESTIVAL deseo que funcione con text2wav.... con text2wav continua el error al ejecutarlo desde consola, ya que leí que FESTIVAL deja un hueco de seguridad....
                  Ahora esto es lo que continúa botando el debug agi:

                  -- Executing [2504@from-internal:1] Goto("SIP/2500-00000003", "prueba,2504,1") in new stack
                  -- Goto (prueba,2504,1)
                  -- Executing [2504@prueba:1] AGI("SIP/2500-00000003", "prueba2.php") in new stack
                  -- Auto fallthrough, channel 'SIP/2500-00000003' status is 'UNKNOWN'

                  Ya no se me ocurre nada! ayuda por favor!!

                  Comentario


                  • #10
                    Ya hiciste a asterisk el dueño del script y del grupo?

                    Comentario


                    • #11
                      Navaismo, nuevamente muchas gracias por tu pronta respuesta, perdon fin de semana no trabajo.... y mi servidor solo está en mi trabajo no puedo trabajar desde casa..

                      Navaismo no sé cómo hacer a asterisk dueño del script y del grupo? Si pudieras ayudarme? por favor?

                      Comentario


                      • #12
                        Encontré estos comandos para hacer dueño a asterisk de todos los archivos:

                        chown asterisk. /var/run/asterisk
                        chown asterisk. -R /etc/asterisk
                        chown asterisk. -R /var/{lib,log,spool}/asterisk
                        chown asterisk. -R /usr/lib/asterisk

                        Es eso? o hay otros comandos que me falten?
                        Muchas gracias, por su ayuda!

                        P.D Ahh olvidaba, despues de eso reinicié asterisk pero continúa con la falla.... no responde la llamada, el debug sigue siendo el mismo.
                        Editado por última vez por glap04; https://asteriskmx.org/foros/member/2501-glap04 en 01-05-2015, 07:09 AM. Razón: Corrección

                        Comentario


                        • #13
                          El comando es chown asterisk:asterisk phpagi.php. Sobre que no salga en el debug y siga el error yo optaria por poner un AGI más básico digamos que envie un HOLA mundo al CLI con el verbose.

                          Comentario


                          • #14
                            Hola! quiero agradecer por su ayuda!.
                            Ya logré hacer funcionar mi script!!!! Jajaja estoy feliz.
                            Y bueno básicamente era cambiar los permisos que tenía mi archivo PHP

                            sudo chmod +x prueba2.php

                            Y luego cambiar mi script de esta manera:

                            #!/usr/bin/php -q /// si se fijan quité el /local
                            <?php
                            set_time_limit(30);
                            require("phpagi.php"); // puse comilla doble
                            error_reporting(E_ALL);
                            $agi = new AGI();
                            $agi->answer();
                            $agi->text2wav("Probando Audio");
                            $agi->hangup();
                            ?>


                            Y ahora si funciona!!!
                            Esto por si alguien también pasó por lo mismo, llevaba días buscando y viendo que era lo que pasaba!!
                            A ambos mil gracias, Navaismo, JorgeCasas.

                            Comentario

                            Principales Usuarios Activos

                            Colapsar

                            No hay usuarios activos superiores.
                            Trabajando...
                            X