Cursos Asterisk en México

phpagi y mysql

Colapsar

Anuncio

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

  • phpagi y mysql

    Saludos foro , estoy realizando mi primer AGI con phpagi , ya que en la administración me han solicitados algunos requerimientos y que dando vueltas solo con AGI se puede realizar , la idea aquí es captar el callerid de la persona que llama y que se guarde en una bd de mysql donde ya tenga los tipos de operadores de aquí mi país , e identificar de que operador están llamando mas.

    tengo la bd creada llamada demo , tengo las tablas control,operadores y prefijos , la idea es meter el callerid en control que es una tabla que contiene los campos: CALLERID, OPERADOR,FECHA, ID .

    estoy realizando el script , pero no se si el método de comprobación y insercion en MySQL es correcto



    #!/usr/bin/php -q
    <?php
    require("phpagi.php");
    // reviso los log de depuracion
    error_reporting(E_ALL);
    // hago la conexion a MySQL
    $conect = new Mysqldb();
    $db = $conect->newConnection('localhost', 'demouser', 'cisco2011', 'demo');

    echo 'Conectando.. ';
    // hacemos una nueva instancia de AGI
    $agi = new AGI();
    // para hacer un Answer en Asterisk
    $agi->answer();


    //obtengo el caller id de la llamada
    $callerid = $AGI->request['agi_callerid'];
    //revisar si algna ves llamo
    $query = "select callerid, operador, fecha, id ";
    // insertar el caller id
    $query = "insert into operador (callerid) values ('" . $callerID . '")";

    $agi->hangup();

    ?>


    no soy ducho a la programación , a ver quien me da una mano

  • #2
    Using SIP RTP TOS bits 184
    == Using SIP RTP CoS mark 5
    -- Executing [3000@locales:1] Answer("SIP/101-00000003", "") in new stack
    -- Executing [3000@locales:2] AGI("SIP/101-00000003", "caller.php") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/caller.php
    <SIP/101-00000003>AGI Tx >> agi_request: caller.php
    <SIP/101-00000003>AGI Tx >> agi_channel: SIP/101-00000003
    <SIP/101-00000003>AGI Tx >> agi_language: es
    <SIP/101-00000003>AGI Tx >> agi_type: SIP
    <SIP/101-00000003>AGI Tx >> agi_uniqueid: 1385049167.3
    <SIP/101-00000003>AGI Tx >> agi_version: 1.8.24.0
    <SIP/101-00000003>AGI Tx >> agi_callerid: 101
    <SIP/101-00000003>AGI Tx >> agi_calleridname: Alcides-test
    <SIP/101-00000003>AGI Tx >> agi_callingpres: 0
    <SIP/101-00000003>AGI Tx >> agi_callingani2: 0
    <SIP/101-00000003>AGI Tx >> agi_callington: 0
    <SIP/101-00000003>AGI Tx >> agi_callingtns: 0
    <SIP/101-00000003>AGI Tx >> agi_dnid: 3000
    <SIP/101-00000003>AGI Tx >> agi_rdnis: unknown
    <SIP/101-00000003>AGI Tx >> agi_context: locales
    <SIP/101-00000003>AGI Tx >> agi_extension: 3000
    <SIP/101-00000003>AGI Tx >> agi_priority: 2
    <SIP/101-00000003>AGI Tx >> agi_enhanced: 0.0
    <SIP/101-00000003>AGI Tx >> agi_accountcode:
    <SIP/101-00000003>AGI Tx >> agi_threadid: 139744972556032
    <SIP/101-00000003>AGI Tx >>
    -- <SIP/101-00000003>AGI Script caller.php completed, returning 0
    -- Executing [3000@locales:3] Wait("SIP/101-00000003", "3") in new stack
    -- Executing [3000@locales:4] Hangup("SIP/101-00000003", "") in new stack
    == Spawn extension (locales, 3000, 4) exited non-zero on 'SIP/101-00000003'

    Comentario


    • #3
      Ricky... creo que primero deberías probar tus queries en la base para saber que hacen lo que tu quieres.... y ya despues meterlos al script, revisa algún tutorial de queries básicos porque realmente no necesitas más.

      Una vez que los queries funcionen, mételos al php y prueba el php igual desde la línea de comandos de linux con "php caller.php". Revisa algún tutorial de php y mysql para que te oriente. Una vez que funcione y tengas los resultados esperados ahora sí metelos al asterisk.

      Decidiste usar AGI, pero yo usaría ODBC para conectar a MySQL directo desde Asterisk y así podrías usar funciones que tu crees, en el capítulo 16 del ASterisk the definitive guide viene como.

      Saludos,
      Hector Alvarez
      dCAP Certified #2199
      http://mx.linkedin.com/in/alvarezhector/

      Comentario


      • #4
        voy a buscar los queries , ya les comento.

        Comentario


        • #5
          El problema de tu AGI es que haces un echo. Nunca debes hacer echos en un AGI o te rompe todo. Si deseas notificar algo, usa

          $agi->verbose("Tu mensaje aqui");
          dCAP Christian Cabrera R.
          Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
          Si deseas asesoría pagada, por favor contáctame

          Comentario


          • #6
            Otro problema que acabo de ver: declaraste $agi pero después usas $AGI. PHP es sensible a mayúsculas y minúsculas.
            dCAP Christian Cabrera R.
            Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
            Si deseas asesoría pagada, por favor contáctame

            Comentario


            • #7
              Originalmente publicado por Christian Cabrera Ver Mensaje
              El problema de tu AGI es que haces un echo. Nunca debes hacer echos en un AGI o te rompe todo. Si deseas notificar algo, usa

              $agi->verbose("Tu mensaje aqui");

              vale , gracias aunque lo agrego como tu dice Christian y me da un error al ejecutarlo

              Call to a member function verbose() on a non-object in /var/lib/asterisk/agi-bin/caller.php on line 17

              // linea 17
              $agi->verbose("conectando");


              vere la sintaxis en la docu

              Comentario


              • #8
                jejej el verbose le tenia que meter despues del new agi

                Comentario


                • #9
                  algo que me llama la atencion es cuando ejecuto el script con php me tira este mensaje:

                  php caller.php

                  PHP Notice: Undefined index: PATH in /var/lib/asterisk/agi-bin/phpagi.php on line 1693

                  ahora si pruebo el script llamando de una extensión , no me graba el callerid en la bd

                  Comentario


                  • #10
                    -- Executing [3000@locales:1] Answer("SIP/101-0000000a", "") in new stack
                    -- Executing [3000@locales:2] AGI("SIP/101-0000000a", "caller.php") in new stack
                    -- Launched AGI Script /var/lib/asterisk/agi-bin/caller.php
                    <SIP/101-0000000a>AGI Tx >> agi_request: caller.php
                    <SIP/101-0000000a>AGI Tx >> agi_channel: SIP/101-0000000a
                    <SIP/101-0000000a>AGI Tx >> agi_language: es
                    <SIP/101-0000000a>AGI Tx >> agi_type: SIP
                    <SIP/101-0000000a>AGI Tx >> agi_uniqueid: 1385055674.10
                    <SIP/101-0000000a>AGI Tx >> agi_version: 1.8.24.0
                    <SIP/101-0000000a>AGI Tx >> agi_callerid: 88888880
                    <SIP/101-0000000a>AGI Tx >> agi_calleridname: 101
                    <SIP/101-0000000a>AGI Tx >> agi_callingpres: 0
                    <SIP/101-0000000a>AGI Tx >> agi_callingani2: 0
                    <SIP/101-0000000a>AGI Tx >> agi_callington: 0
                    <SIP/101-0000000a>AGI Tx >> agi_callingtns: 0
                    <SIP/101-0000000a>AGI Tx >> agi_dnid: 3000
                    <SIP/101-0000000a>AGI Tx >> agi_rdnis: unknown
                    <SIP/101-0000000a>AGI Tx >> agi_context: locales
                    <SIP/101-0000000a>AGI Tx >> agi_extension: 3000
                    <SIP/101-0000000a>AGI Tx >> agi_priority: 2
                    <SIP/101-0000000a>AGI Tx >> agi_enhanced: 0.0
                    <SIP/101-0000000a>AGI Tx >> agi_accountcode:
                    <SIP/101-0000000a>AGI Tx >> agi_threadid: 139744973063936
                    <SIP/101-0000000a>AGI Tx >>
                    sip*CLI> quit

                    Comentario


                    • #11
                      si hago la consulta desde el cli de mysql y ingreso un numero lo hace perfecto

                      dentro del script tengo

                      $query = "insert into control (callerid) values ($callerid )";

                      Comentario


                      • #12
                        $query = "insert into control (callerid) values ({$callerid})"; //si tu campo callerid es numérico
                        ó
                        $query = "insert into control (callerid) values ('{$callerid}')"; //si tu campo callerid es alfanumérico
                        Hector Alvarez
                        dCAP Certified #2199
                        http://mx.linkedin.com/in/alvarezhector/

                        Comentario


                        • #13
                          hector muchas gracias por el query , lo raro es que no mete el callerid dentro de la bd

                          #!/usr/bin/php -c
                          <?php
                          require("phpagi.php");
                          // reviso los log de depuracion
                          error_reporting(E_ALL);
                          // hago la conexion a MySQL
                          $hostname = "localhost";
                          $dbname = "demo";
                          $username = "demouser";
                          $password = "cisco2011";
                          // hacemos una nueva instancia de AGI
                          $agi = new agi();
                          // para hacer un Answer en Asterisk
                          $agi->answer();

                          // habilito el debug
                          $agi->verbose("Conectando ... ".$callerid);
                          //obtengo el caller id de la llamada
                          $callerid = $agi->request['agi_callerid'];
                          $mySql = mysql_connect($hostname, $username, $password) or die (mysql_error());
                          mysql_select_db($dbname, $mySql) or die(mysql_error());

                          //revisar si algna ves llamo
                          //$query = "select callerid, operador, fecha, id ";
                          // insertar el caller id
                          $query = "insert into control (callerid) values ('{$callerid}')";

                          $agi->hangup();

                          ?>

                          Comentario


                          • #14
                            el problema es que nunca estás ejecutando el query... haz un mysql_query($query);
                            Hector Alvarez
                            dCAP Certified #2199
                            http://mx.linkedin.com/in/alvarezhector/

                            Comentario


                            • #15
                              ¿Y en que parte ejecutas el query?

                              Solo lo estás declarando dentro de $query, pero nunca invocas el comando de mysql_query($query).
                              dCAP Christian Cabrera R.
                              Para aprender a usar Asterisk, asiste a uno de mis cursos Asterisk
                              Si deseas asesoría pagada, por favor contáctame

                              Comentario

                              Principales Usuarios Activos

                              Colapsar

                              No hay usuarios activos superiores.
                              Trabajando...
                              X