Cursos Asterisk en México

Distintos uniqueid, diferentes contextos en una misma llamada..necesito 1

Colapsar

Anuncio

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

  • Distintos uniqueid, diferentes contextos en una misma llamada..necesito 1

    Hola gente necesito saber como hago para tener el mismo uniqueid en 2 contextos distintos por ej yo tengo lo siguiente:

    [Entrante]


    exten => s,1,Queue(Q-prueba,t,,,25) ; Se va al contexto MemberConnector donde me fijo si grabo la llamada o no.

    exten => h,n,NoOp( Cdr uniqueid dpues de queue: ${CDR(uniqueid)})



    ; assign the second field of QueueMember to Device using the hyphen separator
    ; filter out any bad characters, allowing alphanumeric characters and the hyphen

    exten => h,n,Set(QueueMember=${FILTER(A-Za-z0-9\-,${MEMBERINTERFACE})})


    exten => h,n,Set(Device=${CUT(QueueMember,@,1)})
    exten => h,n,Set(Device=${CUT(Device,-,2)})
    exten => h,n,Set(Device=${CUT(Device,M,1)})


    ; Averiguamos si el llamante tiene q ser grabado...

    exten => h,n,AGI(tieneGrab.php,10,noGuardar,${Device})

    ; same => 5,Hangup()
    ; same => 8,set(guardarCdr=1)


    xten => h,n,AGI(tieneGrab.php,10,noGuardar,${Device})

    ; same => 5,Hangup()
    ; same => 8,set(guardarCdr=1)



    exten => h,10,GotoIf( $[$["${CDR(disposition)}" = "ANSWERED"] ]?guardar:noGuardar)
    exten => h,n(guardar),MYSQL(Connect connid localhost root pelocaballo astcdr)
    exten => h,n,set(calltime=${STRFTIME(${EPOCH},,%C%y%m%d%H%M %S)})
    exten => h,n,MYSQL(Query resultid ${connid} INSERT INTO cdr set src="${CALLERID(num)}",dst="${Device}",calldate="$ {calltime}",channel="${CDR(channel)}",dstchannel=" ${CDR(dstchannel)}",duration="${CDR(duration)}",ac countcode="${CDR(accountcode)}",uniqueid="${UNIQUE ID}",modo="Entrante")

    exten => h,n(noGuardar),Hangup()







    [MemberConnector]


    same => n,Set(QueueMember=${FILTER(A-Za-z0-9\-,${EXTEN})})
    same => n,Set(Technology=${CUT(QueueMember,-,1)})
    same => n,Set(Device=${CUT(QueueMember,-,2)})


    same => n,AGI(tieneGrab.php,7,8,${Device})



    same => 7,MixMonitor(/var/www/html/rec2/recs/${UNIQUEID}.gsm)



    ; dial the agent

    same => 8,Dial(${Technology}/${Device},25,Tt)



    Cuando ejecuta el Mixmonitor ${UNIQUEID} tiene un valor, y cuando lo voy a guardar en el contexto Entrante a mysql ${UNIQUEID} tiene otro valor.
    Intente con ${CDR(uniqueid)} pero es lo mismo que con ${UNIQUEID}
    No puedo hcer todo desde el contexto MemberConnector xq luego del Dial retorna al contexto ENtrante.
    Como puedo hcer para grabar en la BD x mysql el mismo uniqueid que obtengo cdo hago Mixmonitor??
    Gracias.

  • #2
    Usa la base de datos de asterisk ASTDB para guardar le valor original y después lo puedes sacar desde cualquier lado.

    Comentario


    • #3
      Navaismo gracias por tu rta, pense lo mismo, pero que pasa con las llamadas simultaneas?? Si lo guardo en ASTDB por ejemplo
      exten => h,1,Set(DB(grab/${Device})=${UNIQUEID}) en una llamada simultanea al mismo agente se estaría sobrescribiendo el valor, es por eso que es mejor el uso de variables xq se crea una instancia distinta por cada canal.
      Lo cierto que tambien podria hcer es:
      exten => h,1,Set(DB(${CHANNEL}/${Device})=${UNIQUEID}) esto creo q funcionaria, pero estaria llenando de basura el ASTDB y desconoczco cual es el limite de crecimiento.
      Que podriamos hcer??

      Comentario


      • #4
        AstDB no tiene límite hasta donde sé, pero si eso te preocupa puedes limpiar los valores después de usarlos con DB_DELETE y asi solo los tendrias por un pequeño periodo de tiempo.

        Comentario


        • #5
          Ok, vamos a ver como utilizamos AstDB, creo q la mejor solución es utilizar variables..que tgan alcance entre diferentes contextos..
          En cuanto tga la solucion, lo publico asi puedo ayudar a alguien mas. Si se les ocurre algo mas avisen!

          Saludos.

          Comentario


          • #6
            Si utilizas un guión bajo antes del nombre de la variable, éste permanecerá despues de que la llamada sea transferida a otro contexto o canal... si utilizas un doble guión bajo la variable mantendrá su valor para ese canal de manera permanente. (Revisa el tema "Inheriting Channel Variables")
            Hector Alvarez
            dCAP Certified #2199
            http://mx.linkedin.com/in/alvarezhector/

            Comentario


            • #7
              Gracias Hector lo voy a probar y te aviso.
              Saludos.

              Comentario

              Principales Usuarios Activos

              Colapsar

              No hay usuarios activos superiores.
              Trabajando...
              X