Example #1
0
 /**
  * Obtiene los parametros de las colas y los agentes en el servidor Asterisk
  * Esta funcion fue creada especificamente para el DashboardWeb, ya que permite
  * obtener todos los parametros de las colas y agentes de la misma forma como lo
  * hace la aplicacion Dashboard de escritorio.
  *
  * @return array donde cada elemento corresponde a una cola. Cada cola posee ademas
  *         un array interno que indica los agentes de esa cola
  */
 public function GetQueueInfo()
 {
     $parametrosCola = array();
     /**
      * La respuesta a un mensaje de QueueStatusAction retorna un array de
      * objetos QueueParams y QueueMember.
      * Con los objetos QueueParams
      * podemos obtener las estadisticas de la cola, con el objeto QueueMember
      * el estado de los agentes
      */
     $respuesta = $this->a->send(new QueueStatusAction());
     if ($respuesta instanceof ResponseMessage) {
         if ($respuesta->isSuccess()) {
             $event = $respuesta->getEvents();
             foreach ($event as $obj) {
                 // Es informacion de una cola
                 if ($obj instanceof QueueParamsEvent) {
                     $e = new elementosCola();
                     $e->__set('nombreCola', $obj->getQueue());
                     $e->__set('llamadasContestadas', $obj->getCompleted());
                     $e->__set('llamadasAbandonadas', $obj->getAbandoned());
                     $e->__set('llamadasRecibidas', $obj->getCompleted() + $obj->getAbandoned());
                     $e->__set('asa', $obj->getHoldTime());
                     $e->__set('contestadasEnNS', $obj->getKey('completedinsl'));
                     $e->__set('ns', $obj->getServiceLevelPerf());
                     if ($e->__get('llamadasRecibidas') == 0) {
                         $e->__set('porcentajeAbandonadas', 0);
                     } else {
                         $pabandonadas = $e->__get('llamadasAbandonadas') * 100 / $e->__get('llamadasRecibidas');
                         $e->__set('porcentajeAbandonadas', round($pabandonadas, 2));
                     }
                     $e->__set('espera', $obj->getCalls());
                     $e->__set('aht', gmdate("H:i:s", $obj->getKey('talktime')));
                     array_push($parametrosCola, $e);
                     //Es informacion de un agente de una cola
                 } elseif ($obj instanceof QueueMemberEvent) {
                     // Es informacion de un miembro perteneciente a una cola
                     // Creamos un nuevo elemento agente
                     $a = new agente();
                     // Lo cargamos con la informacion que retorna el objeto QueueMember
                     $a->__set('nombre', $obj->getKey('name'));
                     $a->__set('llamadasRecibidas', $obj->getKey('callstaken'));
                     $a->__set('estatus', $obj->getKey('status'));
                     $a->__set('pausado', $obj->getKey('paused'));
                     // Este agente pertenece a una cola, por eso obtenemos el nombre
                     // de la cola a la que pertenece y lo agregamos a ella
                     $perteneceACola = $obj->getKey('queue');
                     foreach ($parametrosCola as $p) {
                         if ($p->__get('nombreCola') == $perteneceACola) {
                             $p->incluirAgente($a);
                         }
                     }
                 }
             }
         } else {
             Yii::app()->user->setFlash('error', "La respuesta a la consulta de QueueStatus no fue exitosa. Consulte al administrador del sistema para mas detalles");
         }
     }
     return $parametrosCola;
 }