Cursos Asterisk en México

Problema de conexion a Mysql

Colapsar

Anuncio

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

  • Problema de conexion a Mysql

    Saludos !!

    La situacion es esta, estoy tratando de crear una pequeña encuesta telefonica e ir guardando las respuestas seleccionadas en una base de datos mysql, todo esto usando agi, voy paso a paso, marcando, mandando llamar grabaciones, etc., pero al momento de guardar los valores en la base de datos falla, no me marca error simplemente continua el agi sin insertar nada, ojala me puedan ayudar!!

    La version de elastix es 2.2, elcodigo utilizado es el siguiente:
    -------------------------------------------------------------------

    [from-internal-custom]
    exten => 6565,1,Answer
    exten => 6565,2,AGI(testAGI.php)
    exten => 6565,3,Hangup

    -------------------------------------------------------------------

    despues mandamos llamar el archivo testAGI.php

    #!/usr/bin/php -q
    <?
    set_time_limit(30);
    require('phpagi.php');
    error_reporting(E_ALL);

    $agi = new AGI();

    $agi->answer();
    //$agi->stream_file('custom/bienvenida'); // se escucha sin problema.
    $agi->stream_file('custom/pregunta-1'); // se escucha sin problema.

    mysql_connect("localhost","elastix-dbuser","pass");
    mysql_select_db("elastix"); //or die("could not open database");

    $sql=("insert into prueba (valor1) values (1)"); // trato de insertar cualquier cosa en la tabla seleccionada

    mysql_query($sql);


    $agi->stream_file('custom/despedida'); // este tambien se escucha sin problemas
    $agi->hangup();

    ?>

    Creo que el problema esta en la conexion, pero no puedo encontrar donde, intento pasar los parametros por variable o directamente algun valor inventado pero nada, tambien tengo un servidor externo pero tampoco me puedo conectar a este no se si se requiere algo en particular para hacer una conexion a un servidor externo.

    De momento solo me interesa guardar datos en la bd, despues averiguo como captar los valores de telefono del cliente.

    Saludos y ojala alguien me pueda ayudar.

    Betillo

  • #2
    Re: Problema de conexion a Mysql

    Asigna una variable al resultado del comando mysql_query, añade "or die(mysql_error())" al mismo comando y despues añade un verbose a esa variable. Activa el debug de AGI en el cli de asterisk y pega la salida de todo ese debug.

    tambien checa que te puedas conectar a tu BD con tus datos de usuario y contraseña.

    Comentario


    • #3
      Re: Problema de conexion a Mysql

      Gracias por la respuesta navaismo !!

      Al parecer era problema de permisos, tuve que usar al ususario "root" para que me dejara hacer la insercion.

      Ahora abusando de tu conocimiento y porque apenas estoy empezando con esto otra pregunta, ya guarde el dato que le dije, solo que ese dato lo defini yo, la idea es guardar la opcion o tecla presionada en el telefono del cliente.. como obtengo este dato, se que hay que usar el arreglo "stdin" me parece pero si me pudieras dar un ejemplo for dummies te lo agradeceria.

      De todos modos comenzare a investigar sobre la siguiente parte.

      Gracias nuevamente y seguimos en contacto.

      Betillo

      Comentario


      • #4
        Re: Problema de conexion a Mysql

        Como ya estas usando PHPAGI lo mejor es que utilices get_data para poder almacenar tus datos. Usa la ayuda en linea de phpagi.

        Comentario


        • #5
          Re: Problema de conexion a Mysql

          Saludos Navaismo !!

          Gracas por el dato, ayer estuve checando como usarlo y al parecer ya esta funcionando al menos de forma basica, como es esto, ya hago la serie de preguntas y jalo el valor del telefono (por cada una) y lo almaceno en una base de datos, para despues mostrar los resultados en una pagina, ahora me acaba de salir otro inconveniente el cual espero me puedas ayudar !!

          No me habia dado cuenta de que en ocaciones puede que mas de un usuario trate de realizar la encuesta al mismo tiempo, de ser asi se me ocurrio que tal vez sea necesario crear un grupo de timbrado y que el sistema responda en la extension que este libre, el problema es que no se como hacer esto o no se si sea la forma correcta de atender a mas de un usuario a la vez, haber si me puedes apoyar con esto.... Otra cosa mas es lo siguiente, si el usuario termina la llamada de forma inesperada como podria (de ser posible) mandar llamar al agi y decirle que fue una llamada truncada para guardar informacion de nueva cuenta en la base de datos ? ya que ahorita al colgar pues automaticamente se termina la ejecucion del script y se cuelga el canal.

          Bueno espero no estar abusando de tu ayuda, agradezco tu tiempo y seguimos al pendiente, por ultimo como nota curiosa o tal vez no, probe el sistema en un equipo en mi trabajo con el x-lite y ahi me aceptaba los tonos, el dia de hoy me traje a la casa la aplicacion y probe de nueva cuenta con el x-lite, solo que esta vez no me acepto los tonos, unicamente los ingresados por un telefono ip que tengo, no se si es problema con el asterisk o con el x-lite

          Saludos

          Betillo

          Comentario


          • #6
            Re: Problema de conexion a Mysql

            Hola,

            Usa una cola de atencion, para dar servicio a varios usuarios.

            Sobre lo del colgado inesperado puedes establecer algunas variables desde tu agi, como el uniqueid y el estado final, si se completo tu script bien o no. Y con esta ultima puedes ejecutar otro script en la extension "h" que es donde entran las llamadas colgadas y actualizar de ser necesario tu BD

            Comentario


            • #7
              Re: Problema de conexion a Mysql

              Gracias por la respuesta navaismo !!

              Aqui es donde la puerca torcio el rabo , no se si pudieras apoyarme con algun ejemplo de como hacer lo que me comentas, la verdad la documentacion que he encontrado esta medio confusa o a veces dificil de entender, nada complicado solo una idea, ojala me puedas hechar la mano y si no se agradece de todos modos, por mi parte voy a investigar sobre esto que me comentas.

              Gracias y seguimos al pendiente.

              Betillo

              Comentario


              • #8
                Re: Problema de conexion a Mysql

                Hola,

                Para establecer una variable en tu AGI usa Set_Variable, después la puedes usar en tu dialplan o en otro AGI para saber cual fue el estado de tu llamada.

                Por ejemplo, imagino que tu Script lleva una secuencia, entonces al terminar toda esa secuencia puedes setear una variable por ejemplo "status":

                Código:
                $agi->Set_Variable("status","completed");
                Después evalúas esa variable en el mismo dialplan o con otro AGI, en este caso en tu extensión "h" ya que si se completo el script normalmente seguirá su ejecución como lo hace hasta ahora.

                Código:
                ....
                exten => h,n,AGI(failedscript.agi,${status})
                Ó la aplicacion que vayas a usar:

                Código:
                ....
                exten => h,n,GotoIf($["${status}" != "completed"]?etiqueta1:etiqueta2)

                Comentario


                • #9
                  Re: Problema de conexion a Mysql

                  Gracias por la respuesta navaismo !!

                  Voy a hacer pruebas con lo que me comentas, te aviso como me fue.

                  Saludos.

                  Betillo

                  Comentario


                  • #10
                    Re: Problema de conexion a Mysql

                    Saludos navaismo !!

                    De nueva cuenta molestando haber si me puedes ayudar con esto, sigo con la creacion del agi para detectar si una llamada es terminada antes de que se termine de escuchar algun menu, el problema es este:

                    Recibo la llamada sin problemas y ejecuto el primer AGI para esuchar y guardar las opciones de un ivr, se supone que se ahi se debe ejecutar otro AGI para ver si se completo la llamada (como me lo recomendaste anteriormente), el problema es que despues de ejecutar el primer AGI ya no ejecuta el segundo, el dial plan quedo asi:

                    [from-internal-custom]
                    exten => 999,1,Answer
                    exten => 999,n,AGI(test.php,incompleta)
                    exten => 999,n,AGI(failed.php)
                    exten => 999,n,Hangup

                    Lo unico que detecto que si dejo correr toda la grabacion y la guardo me muestra:

                    -- <SIP/10.3.0.99-00000035>AGI Script test.php completed, returning 0

                    Si cualgo antes de que termine me sale esto en los logs:

                    -- <SIP/10.3.0.99-00000035>AGI Script test.php completed, returning 4

                    Fuera de eso no encuentro el problema.

                    Agradezco tu tiempo y ojala me puedas ayudar.

                    Saludos

                    Alberto

                    Comentario


                    • #11
                      Re: Problema de conexion a Mysql

                      Hola, tu AGI "failed" debe correr en la extensión h, ya que una vez que cuelgan la siguiente prioridad ya no se ejecuta. Algo así:

                      Código:
                      [from-internal-custom]
                      exten => 999,1,Answer
                      exten => 999,n,AGI(test.php,incompleta)
                      exten => 999,n,Hangup
                      
                      exten => h,1,AGI(failed.php)
                      Recuerda setear una variable al inicio del primer AGI(digamos 0) y modificarla al final(digamos 1) para saber que se completo, después usa esa variable en el segundo AGI, si el valor es 0 la llamada no se completo, si el valor es 1 la llamada la llamada se completo correctamente.

                      Y el último AGI se ejecutaría algo así:

                      Código:
                      exten => h,1,AGI(failed.php,${status})
                      Y para setear status en el primer AGI:
                      Código:
                      $agi->Set_Variable("status","0");

                      Comentario

                      Principales Usuarios Activos

                      Colapsar

                      No hay usuarios activos superiores.
                      Trabajando...
                      X