Welcome to the new forum!
<?php /* qmon.php Author: Barry Flanagan <barry AT flantel DOT com> Date: 21 Nov 2007 Copyright Barry Flanagan 2007 Small program to grab the calls waiting and Agent information for a given queue from the QueueMetrics XML-RPC service and create a simple display for use on a wallboard.*/$defaultqueue = 'inbound';require_once 'XML/RPC.php';$qm_server = "XXXXXXXXXXXX"; // the QueueMetrics server address$qm_port = "8080"; // the port QueueMetrics is running on$qm_webapp = "queuemetrics"; // the webapp name for QueueMetricsisset($_REQUEST['refresh'])?$refresh = $_REQUEST['refresh']:$refresh=5;isset($_REQUEST['queue'])?$queuereq = $_REQUEST['queue']:$queuereq=$defaultqueue;switch ($queuereq) { case 'inbound': $queueids = "9000|9001|9002|9003|9004|9005|9006|9007|9008|9009|9010|9011|9012|9013|9014|9015|q-123"; $outboundqueue = ''; $queuename='inbound'; break;; case 'outbound': $queueids = "q-123"; $outboundqueue = ''; $queuename='outbound'; break ;;}?><html><head><meta http-equiv="refresh" content="<?php echo $refresh ?>"><title><?php echo $queuename . " Wallboard" ?></title></head><body marginheight=0 marginwidth=0><table width="100%" cellpadding=0 cellspacing=0 border="0"> <tr><?php$queuelist = array_merge(explode("|", $queueids),explode("|",$outboundqueue));// Choose the Realtime nethods we want to query.$req_blocks_rt = new XML_RPC_Value(array( new XML_RPC_Value("RealtimeDO.RTCallsBeingProc"), new XML_RPC_Value("RealtimeDO.RTAgentsLoggedIn"), new XML_RPC_Value("RealtimeDO.RTRiassunto") ), "array");// initialize the XML_RPC call$params_rt = array( new XML_RPC_Value($queueids), new XML_RPC_Value("robot"), new XML_RPC_Value("robot"), new XML_RPC_Value(""), new XML_RPC_Value(""), $req_blocks_rt );// Make the XML_RPC call $msg_rt = new XML_RPC_Message('QM.realtime', $params_rt);$cli_rt = new XML_RPC_Client("/$qm_webapp/xmlrpc.do", $qm_server,$qm_port);//$cli_rt->setDebug(1);$resp_rt = $cli_rt->send($msg_rt);// Make sure it was successfulif (!$resp_rt) { echo 'Communication error: ' . $cli_rt->errstr; exit;}if ($resp_rt->faultCode()) { echo 'Fault Code: ' . $resp_rt->faultCode() . "\n"; echo 'Fault Reason: ' . $resp_rt->faultString() . "\n";} else { $val_rt = $resp_rt->value(); $blocks_rt = XML_RPC_decode($val_rt); // now we decode the results // Get the Agents' Status $agent = getAgentLoggedIn( "RealtimeDO.RTAgentsLoggedIn", $blocks_rt ); // Get all the current call details $agentStatus = getCurrentCalls( "RealtimeDO.RTCallsBeingProc", $blocks_rt); // Get details of all the queue activity and store them in the $queue array getQueueStatus( "RealtimeDO.RTRiassunto", $blocks_rt, $queueids, $print); // Output the html for the $queue array printQueues($queue); } // Get the current queue stats and place them into the $queue arrayfunction getQueueStatus( $blockname, $blocks, $queueids, $print ) { global $queue, $queuelist, $ragents; $block = $blocks[$blockname]; for ( $r = 1; $r < sizeof( $block ) ; $r++ ) { $currentQueue = $block[$r][1]; if ( $currentQueue == "all selected") { $ragents = $block[$r][3];// continue; } // if this is a SubQueue, we need to put all the results into the Master Queue for display if (1 == substr_count($currentQueue,'.')) { list($masterqueue, $subqueue) = explode('.', $currentQueue); $currentQueue = $masterqueue; $queue[$currentQueue]['name'] = $masterqueue; $queue[$currentQueue]['waiting'] = $block[$r][7] + $queue[$currentQueue]['waiting']; $queue[$currentQueue]['nagents'] = $block[$r][2]; $queue[$currentQueue]['ragents'] = $block[$r][3]; $queue[$currentQueue]['incalls'] = $block[$r][8] + $queue[$currentQueue]['incalls']; $queue[$currentQueue]['outcalls'] = $block[$r][9] + $queue[$currentQueue]['outcalls']; } else { // it is a normal queue $queue[$currentQueue]['waiting'] = $block[$r][7]; $queue[$currentQueue]['name'] = $block[$r][1]; $queue[$currentQueue]['nagents'] = $block[$r][2]; $queue[$currentQueue]['ragents'] = $block[$r][3]; $queue[$currentQueue]['incalls'] = $block[$r][8]; $queue[$currentQueue]['outcalls'] = $block[$r][9]; } // sometimes the maxholdtime is blank, fix it if($queue[$currentQueue]['maxholdtime'] == '') $queue[$currentQueue]['maxholdtime'] = '00:00'; // If this is an Outbound queue it needs some special treatment if (preg_match('/utbound/', $currentQueue)) { $ragents = $queue[$currentQueue]['ragents']; $queue[$currentQueue]['waiting'] = '0'; $queue[$currentQueue]['maxholdtime'] = '00:00'; } }// This function sorts the $data array of arrays by $fieldfunction orderBy(&$data, $field) { $code = "return strnatcmp(\$a['$field'], \$b['$field']);"; usort($data, create_function('$a,$b', $code)); } // create the html output for the $queues arrayfunction printQueues($queues) { orderBy($queues,'name'); global $ragents; $tdwidth = round(100/sizeof($queues),1) . "%"; foreach ( $queues as $queue ) { // width for the tables $currentQueue = $queue['name']; if (1 == substr_count($currentQueue,'Master')) continue; $queueholdtime = $queue['maxholdtime']; $waitqueue = $queue['waiting']; $nagents = $queue['nagents']; $currcalls = $queue['incalls'] + $queue['outcalls']; $ragents = $queue['ragents']; // Set up colour and formatting depending on the status of the queue if( $waitqueue == 0 ) { $waitbgcolor = "green"; $snd = null; $waitfontcolor = "white"; } elseif ($waitqueue == 1){ $waitbgcolor = "yellow"; $snd = '<EMBED SRC="/sounds/dingdong.wav" HIDDEN="true" AUTOSTART="true">'; $waitfontcolor = "black"; } elseif ($waitqueue > 1) { $waitbgcolor = "red"; $snd = '<EMBED SRC="/sounds/ringer.wav" HIDDEN="true" AUTOSTART="true">'; $waitfontcolor = "white"; $waitqueue = "<blink>" . $waitqueue . "</blink>"; } if( $ragents > 2 ) { $ragentsbgcolor = "green"; $ragentsfontcolor = "white"; } elseif ($ragents == 2){ $ragentsbgcolor = "yellow"; $ragentsfontcolor = "black"; } elseif ($ragents <= 1) { $ragentsbgcolor = "red"; $ragentsfontcolor = "white"; } print <<<END <td width="$tdwidth" valign="top"> <div style="border: 2px solid #FFF; width: 100%"> <div width="100%" align="center" valign="center" style="color:white; font-size: 15px; background-color: green; height: 20px;">$currentQueue</div> <div style="background-color: grey; height:3px"> </div> <div align="center" style="color:$waitfontcolor; font-size: 15px; background-color: $waitbgcolor; ">Calls Waiting</div> <div align="center" style="color:$waitfontcolor; font-size: 70px; background-color: $waitbgcolor; ">$waitqueue</div> <div align="center" style="color:$waitfontcolor; font-size: 15px; background-color: $waitbgcolor; ">Max $queueholdtime</div> <div style="background-color: grey; height:3px"> </div> <div align="center" style="color:white; font-size: 15px; background-color: green">Curr Calls:</div> <div align="center" style="color:white; font-size: 70px; background-color: green">$currcalls</div> <div style="background-color: grey; height:3px"> </div> <div align="center" style="color:$ragentsfontcolor; font-size: 20px; background-color: $ragentsbgcolor">Rdy Agnt: $ragents/$nagents</div><!-- <div align="center" style="color:$ragentsfontcolor; font-size: 70px; background-color: $ragentsbgcolor">$ragents </div> --> </div> </td>END; } }}// Get the actual status of each agentfunction getAgentLoggedIn( $blockname, $blocks ) { $agent = array(); $block = $blocks[$blockname]; for ( $r = 1; $r < sizeof( $block ) ; $r++ ) { $agent[$block[$r][1]]['name'] = $block[$r][1]; $agent[$block[$r][1]]['lastlogin'] = $block[$r][3]; $agent[$block[$r][1]]['queues'] = $block[$r][4]; $agent[$block[$r][1]]['extension'] = $block[$r][5]; $agent[$block[$r][1]]['onpause'] = $block[$r][6]; $agent[$block[$r][1]]['srv'] = $block[$r][7]; $agent[$block[$r][1]]['lastcall'] = $block[$r][8]; $agent[$block[$r][1]]['onqueue'] = $block[$r][9]; $agent[$block[$r][1]]['caller'] = 'none'; $agent[$block[$r][1]]['entered'] = null; $agent[$block[$r][1]]['waiting'] = null; $agent[$block[$r][1]]['duration'] = null; } return $agent;}// Get the current call details for each agent or call waitingfunction getCurrentCalls( $blockname, $blocks) { global $agent, $queue; $block = $blocks[$blockname]; for ( $r = 1; $r < sizeof( $block ) ; $r++ ) { $agentname = $block[$r][6]; $agent[$agentname]['queue'] = $block[$r][1]; $agent[$agentname]['caller'] = $block[$r][2]; $agent[$agentname]['entered'] = $block[$r][3]; $agent[$agentname]['waiting'] = $block[$r][4]; $agent[$agentname]['duration'] = $block[$r][5]; if ($agent[$agentname]['duration'] == '-') { if (1 == substr_count($agent[$agentname]['queue'],'.')) { list($agent[$agentname]['queue'], $subqueue) = explode('.', $agent[$agentname]['queue']); } if (toSec($agent[$agentname]['waiting']) > toSec($queue[$agent[$agentname]['queue']]['maxholdtime'])) $queue[$agent[$agentname]['queue']]['maxholdtime'] = $agent[$agentname]['waiting'] ; } } $agentStatus = ''; $rowcount=1; for ( $r = 0; $r < sizeof( $agent ) ; $r++ ) { $agent = array_values($agent); if ($rowcount == 1){ $rowcolor = "green"; $rowcount++; } elseif ($rowcount == 2) { $rowcolor = "gray"; $rowcount = 1; } // get the last call time for the agent, and convery to epoc time if (strstr($agent[$r]['lastcall'],':')) { list($h, $m, $s) = explode(':', $agent[$r]['lastcall']); $lastcalltime = mktime($h,$m,$s); } // decide on the agent status we should display if ($agent[$r]['duration'] != '') { $status = "On Call since " . $agent[$r]['entered'] . " (" . $agent[$r]['duration'] . " mins)"; $bgcolor3 = $rowcolor; $fontcolor3 = "white"; } elseif (!preg_match('/-/',$agent[$r]['onpause'])){ $status = "On Pause since " . $agent[$r]['onpause']; $bgcolor3 = $rowcolor; $fontcolor3 = "white"; } elseif (time() - $lastcalltime < 5) { $status = "Wrapping up"; $bgcolor3 = $rowcolor; $fontcolor3 = "white"; } else { $status = "Available"; $bgcolor3 = $rowcolor; $fontcolor3 = "white"; } if ($agent[$r]['name']) { $agentStatus .="<tr bgcolor=\"" . $rowcolor . "\" style=\"color:white; font-size: 20px;\"><td> </td><td>" . $agent[$r]['name'] . "</td><td style=\"color:" . $fontcolor3 . ";\" bgcolor=\"" . $bgcolor3 . "\" >" . $status . "</td><td>" . $agent[$r]['lastcall'] . "</td><td>" . $agent[$r]['queue'] . "</td></tr>"; } } return $agentStatus;}// function to convert 00:00:00 time to seconds.function toSec ($hms) { list($h, $m, $s) = explode (":", $hms); $seconds = 0; $seconds += (intval($h) * 3600); $seconds += (intval($m) * 60); $seconds += (intval($s)); return $seconds;}?></tr><tr><td> </td></tr><tr><!-- Agent Status Table --><td colspan=20 bgcolor="gray" valign="top"><table width="100%" height="100%" cellpadding=0 cellspacing=0 style="border: 2px solid #000"> <tr style="color:white; font-size: 25px;"> <td> </td><td>Agent</td><td>Status</td><td>Last Call</td><td>Current Queue</td> </tr> <?php echo $agentStatus ?></table></td></table></body></html>