Cursos Asterisk en México

[RESUELTO] pasar una variable de un agi php a mysql

Colapsar

Anuncio

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

  • [RESUELTO] pasar una variable de un agi php a mysql

    Hola amigos estoy intentando pasar una variable de un agi a mysql parece funcionar bien internamente pero cuando recivo una llamada externa este guarda siempre el mismo valor en la base de datos pero en el SAY DIGITS si pronuncia el valor correcto a parte de que estoy obteniedo el sig resultado al ejecutar

    [Jun 24 13:00:02] ERROR[12339]: utils.c:1130 ast_carefulwrite: write() returned error: Broken pipe
    -- <SIP/XX.XX.XX.XX:XXXX-00000715>AGI Script dncl.agi completed, returning 0

    el agi mencionado es el sig que lo saque de un ejemplo para obtener las variables agi y unas modificaciones mi asterisk es 1.6

    #!/usr/bin/php
    <?php
    session_start ();
    while(!feof(STDIN)){
    $agivar = trim(fgets(STDIN));
    if($agivar === ''){
    break;
    }
    $agivar=explode(':', $agivar);
    $agivars[$agivar[0]]=trim($agivar[1]);
    }
    extract($agivars);
    $_SESSION['NUMBER']=$agi_callerid;
    include('savedncl.php');
    fwrite(STDOUT, "SAY DIGITS ".$_SESSION['NUMBER']." '1#'\n");
    fflush($stdout);
    ?>

    el problema de pasar la variable es en el include savedncl.php pasando la varieble en $_SESSION['NUMBER'] que seria el callerid lo que necesito guardar, si se ejecuta el agi desde una extencion interna guarda el valor correcto pero cuando se ejecuta desde un canal inbound guarda el mismo valor para todas las llamadas en algun momento de la edicion funciono perfectamente

    php para guardar la variable

    <?php
    $num=$_SESSION['NUMBER'];
    $conexion=mysql_connect("localhost","asterisk","XX XXXXXX");
    mysql_select_db("asterisk",$conexion);
    mysql_query("insert into dncl (NUM) values ('$num')",$conexion);
    ?>

  • #2
    Creo que tu estás dando la respuesta: dices que para llamadas entre extensiones funciona bien, pero para llamadas inbound desde el exterior no. Eso quiere decir que el problema no es el AGI (tu código lo veo bien), sino que el callerid no está llenando el AGI en primer lugar.

    ¿Por que no imprimes a pantalla el contenido de tus varibles cuando recibes una llamada del exterior, para que veas si efectivamente contiene el valor que buscas?

    Saludos,
    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


    • #3
      Christian Aqui el codigo del agi debug al ejecutar desde una llamada entrante hasta aqui todo esta bien por eso digo que es al pasar la variable a msql

      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_request: dncl.agi
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_channel: SIP/XX.XX.XX.XX:50XX-00000e98
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_language: en
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_type: SIP
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_uniqueid: 1372103166.3971
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_version: 1.6.2.24
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_callerid: 2507853571
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_calleridname: 2507853571
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_callingpres: 0
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_callingani2: 0
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_callington: 0
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_callingtns: 0
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_dnid: XXXX
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_rdnis: unknown
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_context: macro-agidncl
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_extension: s
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_priority: 1
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_enhanced: 0.0
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_accountcode:
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >> agi_threadid: 47978945227072
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Tx >>
      <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Rx << SAY DIGITS 2507853571 '1#'
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/2.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/5.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/0.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/7.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/8.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/5.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/3.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/5.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/7.ulaw' (language 'en')
      -- <SIP/XX.XX.XX.XX:50XX-00000e98> Playing 'digits/1.ulaw' (language 'en')
      <SIP/XX.XX.XX.XX:50XX-00000e98> AGI Tx >> 200 result=0
      [Jun 24 15:40:46] ERROR[19009]: utils.c:1130 ast_carefulwrite: write() returned error: Broken pipe
      -- <SIP/XX.XX.XX.XX:50XX-00000e98>AGI Script dncl.agi completed, returning 0
      -- Auto fallthrough, channel 'SIP/XX.XX.XX.XX:50XX-00000e98' status is 'UNKNOWN'
      incluso en este ejemplo en la base de datos el valor fue diferente fue el sig.

      2147483647

      repetitivamente es el unico valor que se guarda ahora la llamada es contestada y luego transferida a un menu que ejecuta el agi pero evidentemente no cambia el did del cliente

      Comentario


      • #4
        Christian y todos los demas les comento he realizado una prueba desde un canal dahdi y funciona perfectamente tengo que probar desde el mismo destino y les comento gracias

        Comentario


        • #5
          El número 2147483647 nos da la respuesta.

          Ese número se obtiene con 2^32 - 1. Eso quiere decir que estás guardando el número en una tabla con campo int de 32 bits y estás excediendo el valor máximo del número, así que se está truncando a 2147483647. Es como si quisieras guardar el número 999999 en una tabla de campo de 3 dígitos: todo se truncaria a 999.

          Cambia tu campo a varchar(10) y eso debe resolver el problema. Según tu escenario te funcionó porque el callerid debe ser menor de (214) 748 3647, así que no se truncó.

          Saludos,
          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
            Cierto Christian funciono gracias

            Comentario

            Principales Usuarios Activos

            Colapsar

            No hay usuarios activos superiores.
            Trabajando...
            X