/** * 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; }