Cursos Asterisk en México

[RESUELTO] Agi+ php

Colapsar

Anuncio

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

  • [RESUELTO] Agi+ php

    Buenas Tardes, primera vez que estoy viendo el tema de AGI (Asterisk).

    Una consulta.

    archivo php : filter_ut.php

    #!/usr/bin/php -q
    <?php
    include 'phpagi.php';

    $db_host = "localhost";
    $db_port = "3306";
    $db_name = "hook";
    $db_user = "*****";
    $db_pass = "******";


    $agi = new AGI();
    $agi->answer();



    $callerid = $agi->request['agi_callerid'];
    $dnid = $agi->request['agi_dnid'];

    $agi->verbose("LLAMADA DE ... ".$callerid);
    $conn = mysqli_connect($db_host,$db_user,$db_pass);
    mysqli_select_db($conn,$db_name);

    if (!$conn)
    {
    die('Could not connect: ' . mysql_error());
    }

    $queryhook = "SELECT id, ani, idioma, empresa FROM hook_ut WHERE ani like '%$callerid%' LIMIT 1";

    $reshook = mysqli_query($conn,$queryhook);
    $rowhook = mysqli_fetch_row($reshook);


    // HOOK

    if($rowhook[2]=="es")
    {

    $agi->set_variable("IDIOMA","esp");
    $agi->goto("queue-vip-ut","s","1");
    }

    if($rowhook[2]=="en")
    {

    $agi->set_variable("IDIOMA","eng");
    $agi->goto("queue-vip-ut","s","1");
    }



    ?>

    Archivo extension.conf

    exten => XXXXXXXXXXX,1,Answer()
    exten => XXXXXXXXXXX,n,GotoIfTime(07:00-23:00,mon-fri,*,*?open)
    exten => XXXXXXXXXXX,n,GotoIfTime(07:00-23:00,sat,*,*?open)
    exten => XXXXXXXXXXX,n,GotoIfTime(08:00-20:00,sun,*,*?open)
    exten => XXXXXXXXXXX,n,Playback(fueradehorario/ivr_after_hours)
    exten => XXXXXXXXXXX,n,Hangup()
    exten => XXXXXXXXXXX,n(open),AGI(filter_ut.php)
    exten => XXXXXXXXXXX,n(open),Goto(ivr-ut-vip,s,1)


    Consiste,

    En la tabla hook_ut, hay numeros telefonicos de clientes.

    Resulta, que si un cliente llama a esa extension, mediante el AGI, debo de consultar la tabla hook_ut y verificar si el cliente existe y si existe lo deriva a un contexto (queue-vip-ut).

    Pruebo, con un numero que esta en la base, pero no se redirecciona a ese contexto (queue-vip-ut).

    No se que esta mal, probe sin datos del AGi, y resulta que el query funciona bien.

    Por favor, podrias ayudarme, te lo agredecere mucho.

  • #2
    Habilita el debug de AGI desde Asterisk y pega la salida. El script de php corre sin errores desde consola? Y tienes 2 etiquetas 'open' en tu dialplan.

    Comentario


    • #3
      Esto es lo que me sale, ya esta lo de la etiqueta.

      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_request: filter_ut
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_channel: SIP/24.204.142.21-00009e0c
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_language: en
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_type: SIP
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_uniqueid: 1370459724.60292
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_version: 1.8.13.0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_callerid: 8662533742
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_calleridname: 671
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_callingpres: 0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_callingani2: 0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_callington: 0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_callingtns: 0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_dnid: 42738004907566
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_rdnis: unknown
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_context: default
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_extension: 42738004907566
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_priority: 7
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_enhanced: 0.0
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_accountcode:
      <SIP/24.204.142.21-00009e0c>AGI Tx >> agi_threadid: 139662835918592
      <SIP/24.204.142.21-00009e0c>AGI Tx >>
      -- <SIP/24.204.142.21-00009e0c>AGI Script filter_ut completed, returning 0

      Comentario


      • #4
        Según esta linea:
        Código:
        -- <SIP/24.204.142.21-00009e0c>AGI Script filter_ut completed, returning 0
        Aunque no veo esto reflejado en el cli de asterisk:
        Código:
        $agi->verbose("LLAMADA DE ... ".$callerid);
        El AGI termino su ejecución correctamente, lo que puedes hacer es añadir lineas de verbose en tu agi para ver en que parte del programa podría existir un error. O bien en lugar de usar el $agi->request enviar esos datos como argumentos desde el DialPlan.

        Comentario


        • #5
          Hola, como le envió parámetros desde el DialPlan y como los recibo en mi archivo php.
          Podrias ayudarme.


          Gracias.

          Comentario


          • #6
            Para enviarlos solo haces
            Código:
            exten => XXXXXXXXXXX,n(open),AGI(filter_ut.php,${CALLERID(num)},${UNIQUEID})
            Para enviar por ejemplo el número y el UniqueId de la llamada.

            Para leerlos en tu PHP:

            Código:
            $callerid = $argv[1];
            $UID = $argv[2];

            Comentario


            • #7
              Buenas, puse lo que mencionaste y nada.

              Bueno, disculpa pero olvide decir que la versión de mi Asterisk es 1.8.

              No sé si sea por eso o como se maneja el AGI en esta versión.

              Comentario


              • #8
                No importa la versión, pero como te decia necesitas añadir verbose a tus Scripts para saber que esta haciendo y donde se esta quedando. Además de verificar que no tenga errores de sintaxis ejecutandolo desde el shell de linux con php filter_ut.php

                Comentario


                • #9
                  Me sale esto.

                  PHP Parse error: syntax error, unexpected T_GOTO, expecting T_STRING in /var/lib/asterisk/agi-bin/phpagi.php on line 1184

                  Comentario


                  • #10
                    Baja la versión mas reciente de PHPAGI las versiones viejas tienen un problema con el comando GOTO de PHP.

                    Comentario


                    • #11
                      Hola, actualice a la ultima version. phpagi 2.20

                      #!/usr/bin/php -q
                      <?php
                      require("phpagi-2.20/phpagi.php");

                      $db_host = "localhost";
                      $db_port = "3306";
                      $db_name = "LDC";
                      $db_user = "root";
                      $db_pass = "ccg321x";

                      echo 'Entro A --> ';

                      $agi = new AGI();
                      $agi->answer();

                      echo ' Entro B -->';

                      $callerid = $agi->request['agi_callerid'];
                      $dnid = $agi->request['agi_dnid'];

                      //echo ' Entro C';


                      $agi->verbose("LLAMADA DE ....".$callerid);
                      $conn = mysqli_connect($db_host,$db_user,$db_pass);
                      $conhook = mysqli_connect($db_host,$db_user,$db_pass);
                      //mysqli_select_db($conn,$db_name);
                      mysqli_select_db($conhook,'hook');

                      .......

                      ?>

                      Puse echo para ver en donde se queda el proceso.

                      Cuando ejecuto mi archivo php :

                      php /var/lib/asterisk/agi-bin/filter_ut.php

                      Solo me muestra : Entro A -->

                      Y se cada ahi como pensando.....

                      Comentario


                      • #12
                        Cuando no hay errores de sintaxis y ejecutas desde consola el script debes de dar varios 'Enters' para seguir con las demás lineas del script. Si ya viste que te dice eso quiere decir que al menos ya no tienes errores de sintaxis de php.

                        Te sugiero que cambies los echos por $agi->verbose para que asterisk no te muestre UNKWOWN COMMAND en el cli y puedas ver el verbose de tu script correctemente en el cli de asterisk.

                        Comentario


                        • #13
                          Gracias, ay resolvi mi problema, era un tema del phpagi, con esta ultima version se cambia la sgte function (goto --> por exec_goto):

                          En mi archivo original :

                          $agi->goto("queue-vip-ut","s","1");

                          Por :

                          $agi->exec_goto("queue-vip-ut","s","1");

                          Todo funciono correctamente.

                          Gracias por tu ayuda..


                          Comentario

                          Principales Usuarios Activos

                          Colapsar

                          No hay usuarios activos superiores.
                          Trabajando...
                          X