Issabel ISO (Latest): Download Here
Cloud Services: User Portal - Quick Guide
News: Telegram channel
Become a Patron!
  • General
  • SOLICITUDES DE MEJORAS CODIGO - MODULOS

juanelojga todas las mejoras que hago pongo como poder usarlas y probarlas, y una vez que me funcionan bien y las pongo aqui es cuando las envio para que las pongan tambien en el hithub de issabel y se actualicen. muchas veces los codigos que mejoramos quien los hace hace lo que puede y luego el que quiera puede mejorarlo pero eso es bien raro la verdad.

por ejemplo la mejora de los cdr que estoy haciendo ahora he puesto el codigo para que puedan probarlo

puedes participar y cuanto mas mejor de echo incluso si eres programador con mejoras de codigo tambien que asi podremos tener mas cosas que ayuden a todos.

    juanelojga efecto Valente Juan, cómo dice @hgmnetwork los cambios que estamos haciendo los estamos publicando para que todos los puedan probar y luego de que entre todos lo aprobemos hacemos un push a el repo principal.

      Hola a todos, sigo con algunos avances aunque me disculpo por no dedicarle mas seguido.

      Ya he insertado los selectbox para seleccionar el agente y poder modificarlo en las llamadas agendadas.
      Solicito la ayuda para saber como hacer de forma correcta lo siguiente:
      Neceisto realizar la modificacion de la base de datos al cambiar el selectbox pero con ajax, que se seleccione y de forma automatica lo haga. Ya tengo identificada la funcion en paloDB para hacer la actualizacion en la base de datos pero no se si exista forma ya desarrollada para llamar esta funcion desde ajax.

      Pueden revisar el pantallaso desde https://github.com/casoftcol/campaign_monitoring

      Espero comentarios

      @asternic ahora que lo recuerdo tengo una duda:
      Estoy reutilizando librerias tales como:
      require_once "modules/agent_console/libs/paloSantoConsola.class.php";
      require_once("modules/agents/libs/Agentes.class.php");

      Pero como se ve, las estoy llamando desde el directorio donde las encontre mas no copiandolas en el directorio, por buenas practicas cual seria la recomendacion...

      Llamarlas de esta forma o copiarlas. Lo que hize fue llamarlas asi, porque creo que si el dia de mañana se actualizan si estan centralizadas en un solo directorio es mas optimo, pero no se ustedes lo vienen manejando.

      Gracias!

      casoft esta quedando muy bien felicidades :D una cosa segun veo en el pantallazo solo mira los agentes y no los callback, nosotros usamos mucho los callback para no tener al agente en espera siempre por eso creo que al probar las llamadas agendadas no se me muestran, para que lo tengas en cuenta y se revise tanto los agentes como los callback.

      Lo que indicas segun veo en la imagen entiendo que quieres hacer que al cambiar el selectbox quede grabado el agente nuevo osea se haga una modificacion en la tabla. lo unico que se me ocurre asi muy rapido es hacer una funcion en javascript o ajax que llame a una url donde se le deben pasar el id o numero de la llamada agendada y el agente y este actualice la tabla

      por ejemplo que el ajax llame al fichero actualizar_llamada_agendada.php?idllamada=12345678&extension=5001&tipo=SIP

      en tipo seria por ejemplo SIP para callback o AGENT para agente por ejemplo

      no se si asi te valdria y puedes obtener en el listado que sacas el id de la llamada asi es mas facil identificarla de forma unica

        hgmnetwork es muy cierto, revisare como listar las extensiones de CallBack.
        Ti me puedes regalar un pantallaso de la tabla
        SELECT * FROM calls where scheduled='1'
        Donde se vea la tabla agent para ver como las esta guardando issabel!
        Con esto reviso como hacerlo y de una lo incluimos

          casoft en el campo de agent sale SIP/xxxx donde xxxx es la extension del agente como tal( por ejemplo SIP/1234). Eso si esta asignada a un agente, si no sale null.

          si necesitas alguna otra cosa avisame y te la envio y la pruebo :D
          intenté subir un pantallazo pero aqui no me deja subir imagenes si te hace falta mañana lo subo a la web y te lo envio

            hgmnetwork excelente, entonces resulta más sencillo de lo que creí.
            Ahora más tarde realizaré la actualización correspondiente.

            Gracias

              genial ! :D asi reviso el codigo y pruebo y lo actualizo al mio. Espero entre el domingo y lunes tener un poco de tiempo y ver como hacerte lo del script que necesitas para cambiar al agente. si actualizas el codigo y me avisas lo pruebo e intenteo hacer el script para que ejecute el cambio y te aviso para que puedas realizarlo :D

                Me di cuenta de que las llamadas que se originan por el módulo de Call Center en Issabel no se guardan. ¿Tiene corrección para eso? ¿Alguien me puede ayudar con esta información?

                  5 days later

                  casoft No debes copiarlas, si las librerias existen y estan en cierta ubicación, hay que requerirlas de esa ubicación. Saludos,

                  casoft Hola Casoft, siento la tardanza pero ando bastante liado hoy he tenido alguna hora libre y he podido revisar el código y ponerme con ello.

                  He modificado algunas cosas ya que en el listado que añadiste nuevo ( muy bueno eso por cierto :D ), pasaba lo mismo, solo salían los Agentes (Agents) y no los call back, así que he modificado algunas cosas del código para que se muestren los agentes y los Call back también.

                  También aparecía debajo la casilla de agentes vacía y lo he modificado para que salga bien ( simplemente en el index.php de campaign monitoring es cambiar esto
                  $cont = count($datos);
                  for ($i=0;$i<=$cont;$i++)

                  por
                  //le restamos 1 al total para evitar que añadia fila ultima sin datos hgmnetwork.com 29-07-2018
                  for ($i=0;$i<=$cont -1;$i++)

                  con los cambios que he realizado solo queda hacer que al cambiar de agente lo almacene en la db que esto ya lo dejo para otro dia porque hoy ni tiempo , pero ya va teniendo mas forma :D

                  esta quedando muy bien creo :D.

                  Te digo los cambios que he realizado, para que puedas hacerlos y ver los resultados y comentar que te parecen

                  y a los demás que lo tengan para pruebas tambien.

                  modulo /var/www/html/modules/campaign_monitoring/index.php

                  vi /var/www/html/modules/campaign_monitoring/index.php

                  modifique el index.php y busque esto

                  $oBreaks = new PaloSantoBreaks($pDB);
                  $oAgentes = new Agentes($pDB);
                  $listaAgentes = $oAgentes->getAgents();

                  y cambie por

                  $oBreaks = new PaloSantoBreaks($pDB);
                  $oAgentes = new Agentes($pDB);
                  //modificamos getAgenttodos para obtener agentes y calback hgmnetwork.com 29-07-2018
                  $listaAgentes = $oAgentes->getAgentsTodos();

                  luego en esa misma pagina

                  buscar debajo

                  foreach (array_keys($listaAgentes) as $k)
                  {


                      $agnum=split('/',$datos[$i][19]);
                      $nag=$listaAgentes[$k]['number']; 
                      if ($nag==$agnum[1])
                          $issel="selected";
                      else
                          $issel="";
                      $miag.="<option value='$nag' $issel>Agent/$nag</option>";
                  }

                  y cambiar por

                  foreach (array_keys($listaAgentes) as $k)
                  {
                  $tipo=$listaAgentes[$k]['type'];
                  $numero=$listaAgentes[$k]['number'];
                  if ($listaAgentes[$k]['number']==$numero)
                  $issel="selected";
                  else
                  $issel="";
                  $miag.="<option value='$tipo/$numero' $issel>$tipo/$numero</option>";
                  }

                  luego en
                  /var/www/html/modules/agents/libs

                  vi /var/www/html/modules/agents/libs/Agentes.class.php

                  cree la función de agentes todos es básicamente una replica de la otra pero evitando mostrar solo Agentes así muestro todos agentes y Call back Activos y añadiendo el tipo de agente SIP o Agent y añado el tipo de agente ( type).

                  //funcion creada para obtener todos los agentes y extensiones call back loging hgmnetwork.com 29-07-2018

                  function getAgentsTodos($id=null)
                  {
                  // CONSULTA DE LA BASE DE DATOS LA INFORMACIÓN DE LOS AGENTES
                  $paramQuery = array(); $where = array("estatus = 'A'"); $sWhere = '';
                  if (!is_null($id)) {
                  $paramQuery[] = $id;
                  $where[] = 'number = ?';
                  }
                  if (count($where) > 0) $sWhere = 'WHERE '.join(' AND ', $where);
                  $sQuery =
                  "SELECT id, number, name, password, estatus, eccp_password,type ".
                  "FROM agent $sWhere ORDER BY number";
                  echo " query: $sQuery";
                  $arr_result =& $this->DB->fetchTable($sQuery, true, $paramQuery);
                  if (is_array($arr_result)) {
                  if (is_null($id) || count($arr_result) <= 0) {
                  return $arr_result;
                  } else {
                  return $arr_result[0];
                  }
                  } else {
                  $this->errMsg = 'Unable to read agent information - '.$this->
                  DB->errMsg;
                  return NULL;
                  }
                  }

                  y listo ya obtenemos los agentes ( Agents y los callback login :D )

                  otro pequeño cambio fue en lo que tenias

                  cambie

                  $agnum=split('/',$datos[$i][19]);

                  por

                  $agnum=explode('/',$datos[$i][19]);

                  ya que split esta obsoleto a partir de php 5 para evitar errores futuros

                  espero que sea de ayuda y guste :D espero en estos dias tener un hueco para poder hacer lo del cambio con jquery si puedes ir haciendo tu un php o similar que se le pueda pasar por get valores como el id y el agente por ejemplo para actualizar la tabla de llamadas y que quede cambiado seria genial :D

                  lo mismo para cambiar la fecha y hora de la llamada, espero en estos dias poder hacerlo, asi entre los dos lo dejamos terminado o al menos funcional al completo :D

                    Hola a todos, ya tengo echo el cambio pero tengo un problema que no he podido resolver a ver si me echan un cable.

                    Ya hice que al cambiar el agente llame a una pagina por jquery y ajax que meti dentro de libs

                    esa pagina al llamarla por get le paso el id de la llamada y el agente nuevo a cambiar

                    lo que no consigo hacer es que me ejecute un query me da error al conectar

                    tengo esto

                    require_once "../configs/default.conf.php";

                    include_once("/var/www/html/libs/paloSantoDB.class.php");
                    // se conecta a la base
                    $pDB = new paloDB($arrConfModule['cadena_dsn']);

                    $sPeticionSQL = "UPDATE calls set agent='".$GET['agente']."' where scheduled = 1 and id ='".$GET['id']."'";
                    };
                    $recordset = $this->DB->fetchTable($sPeticionSQL, FALSE, $paramSQL);
                    // $recordset = $this->
                    DB->genExec(($sPeticionSQL,FALSE );

                    el problema que tengo es que me da error 500 y no tengo forma en cuanto le hago el

                    $pDB = new paloDB($arrConfModule['cadena_dsn']);

                    que la variable seria algo asi

                    $pDB = new paloDB(mysql://asterisk:asterisk@localhost/call_center);

                    en cuanto activo esa opcion me da error 500

                    y luego

                    no se si esta bien
                    $recordset = $this->DB->fetchTable($sPeticionSQL, FALSE);
                    fetchTable para ejecutar el query
                    o
                    // $recordset = $this->
                    DB->genExec(($sPeticionSQL,FALSE );

                    gen Exec

                    o cual usar para hacer el update

                    si alguien me puede echar un cable en esto lo termino pronto :D si no tendre que esperar a que tenga mas tiempo libre para ver como solucionarlo

                      he cambiado algunas cosas el problema lo tengo al conectar a la db que no se como hacerlo

                      tengo esto

                      $module_name="campaign_monitoring";
                      require_once "/var/www/html/modules/$module_name/configs/default.conf.php";

                      include_once("/var/www/html/modules/$module_name/libs/paloSantoDB.class.php");
                      echo " cadena destino: ". $arrConfModule['cadena_dsn'];
                      // se conecta a la base
                      // $pDB = new paloDB($arrConfModule['cadena_dsn']);
                      $this->_pDB = new paloDB($arrConfModule['cadena_dsn']);

                      tanto si uso $pDB = new paloDB($arrConfModule['cadena_dsn']);
                      como $this->_pDB = new paloDB($arrConfModule['cadena_dsn']);

                      no me conecta y el script se para en esa parte

                      a ver si alguien me echa un cable para poder hacerlo funcionar :D

                        Hoy he tenido mas tiempo a entender el funcionamiento, les adelanto que ya consigo hacer el cambio sin problema del agente agendado y he añadido otra mejora para volver al campaign monitoring

                        espero poder en estos dias y avisar los cambios finales

                        tambien mejore algunas cosas, ahora muestra la fecha programada de la llamada la inicial y la final y la hora programada inicial y la final

                        y en el resultado de llamada si no se habia realizado no salia nada ahora lo detecta y pondrá Sin Llamar, pero se puede indicar cualquier otro texto similar.

                        queda basicamente asi

                        [Monitoreo de Campaña] <-------- esto lo añadi nuevo para poder ir de llamadas agendadas al monitoreo y va a la misma campaña que tenemos en agendadas.

                        Llamadas agendadas

                        N.TELEFONO AGENTE FECHA PROGRAMADA HORA PROGRAMADA ESTADO
                        xxxxxxxxxx yyyy 2018-07-18/2018-07-26 16:00:00/17:00:59 Sin llamar
                        xxxxxxxxxx yyyy 2018-08-22/2018-08-31 10:00:00/19:00:59 NoAnswer

                        donde pone yyy en los agentes es el select con el agente seleccionado y todos los que se tengan, tambien añadi la opcion de cualquier Agente para poder no tener que forzar a un determinado agente.

                        asi creo que queda mas completo.

                        espero mañana poder hacer el boton de cambio de fecha y horas y con eso creo que quedaría muy completo :D

                        si lo tengo listo mañana o el lunes pasaré el codigo para que lo vean y si les parece bien hago un commint para que lo añadan

                          si a ver que tal queda, ya va quedando menos en cuanto tenga un hueco lo intento terminar.

                          tengo otras ideas de mejora como es en el modulo call center en campañas salientes poder indicar un callerid por cada campaña ya que ahora solo usa el caller id para todas las campañas que se indique en el sip trunk y eso a veces es complicado seria muy bueno poder indicar a cada campaña que caller id saliente se quiere poner y poderlo cambiar facilmente.

                          Tambien hoy mismo he visto por el telegram en el grupo el modulo bsmart que permite ver las llamadas activas y desconectar las llamadas via web, he conseguido el codigo para ver como funciona ya que esta para elastix lo he puesto en el foro para quien quiera y pueda seria bueno si algun otro ingeniero puede revisarlo y adaptarlo a issabel.

                          Hay muchas cosas que se pueden mejorar a nivel de software lo unico que hace falta que varios ingenieros echen una mano y ayuden aunque sea con parte del codigo.

                          Gracias a @casoft que hizo la parte principal de las llamadas agendadas he podido hacer yo el resto y entre los dos tener otra mejora. A Ver si mas ayudan con estas cosas y asi hacemos de issabel un software mas util, mejor y mas práctico para todos.

                            @hgmnetwork perdon la desconexion pero he estado con demaciado trabajo. Exceñente todos los avances logrados, sin falta espero esta semana cojer lo que has montado y integrarlo en el codigo que tenia para dejarlo listo en el git.
                            Igualmente revisare lo que comentas para mirar y probar.

                              casoft No te preocupes :D es normal nos pasa a todos :D

                              ya por fin creo que lo tengo todo terminado y ha quedado creo que muy bien o al menos aparentemente :D

                              paso en unos minutos todo lo que he modificado para que puedas probarlo y si esta todo ok subirlo para que lo añadan :D o avisarme cualquier fallo y lo vemos.

                              se puede mejorar mas cosas pero ya poco tiempo libre tengo estos dias y ahora quiero centrarme en una adaptacion que tengo que realizar para un cliente