Hallo,
ich habe eine kleine Anwendung geschrieben, mit der Mitarbeiter ihre Status setzen können. Urlaub, Feierabend usw.. Ja spielerei
Nun habe ich die IdleUrl dazu verdonnert, mir den jeweils aktuellen Status anzeigen zu lassen.
Jedes Telefon hat eine feste primäre Line. Anhand dieser Line suche ich auch in meiner eigenen MySql Datenbank.
Nun habe ich zwei Probleme:
1. Wie man im nachfolgenden Skript sieht, ermittel ich die IP Adresse des Phones, von dem ein Request kam. Mit dieser IP hole ich mir aus dem CUCM die MAC Adresse/Device Name, passend dazu das Model des Phones. Weiter zieh ich mir dann mit dem Device Name die UUID der ersten Line. Mit der UUID wird dann wiederum das Pattern der Nebenstelle ermittelt. Damit suche ich dann in meiner Datenbank, was für einen Status die Rufnummer/der Mitarbeiter hat.
Nun gibt es erstmal schon einen Unterschied zwischen einem Telefon, was nur eine Line auf dem Phone hat und ein Telefon mit mehreren Lines. Das Problem habe ich aber mit einer IF (empty(..... Abfrage abgefangen und dann in dem Fall, wenn mehrere Lines auf dem Phone sind, nur die erste Line genommen.
Aber irgendwie gibt es zwischendurch in unregelmäßigen Abständen immer mal das Problem, das er trotzdem nicht die UUID herausfindet. Muss man noch etwas speziell beachten? Oder hat jemand eine Idee, wie man das ganze in einer Abfrage optimieren kann?
2. Ich habe weiter unten im Skript eine Abfrage, wie der Status ist. Vorher hatte ich keine Abfrage, was für ein Telefonmodel das Phone ist. Meine Idee war und klappt auf 7960er Telefonen prima, das ich einfach checke, ob der Status Anwesend ist und wenn ja, dann zeige NICHTS an. Ist er anders als Anwesend, dann zeige den Status.
Allerdings verhalten sich neuere Telefone etwas anders. Was bei alten Phones noch geht, geht bei den 7921ern, 7965ern usw. nicht. Es wird mir entweder ein leeres Fenster (7965) oder ein XML-Analysefehler (7921) angezeigt, wenn ich bei Status Anwesend nichts machen lasse in der Schleife.
Hat da auch jemand eine Idee??
Vielen Dank schonmal und hier das Skript...
ich habe eine kleine Anwendung geschrieben, mit der Mitarbeiter ihre Status setzen können. Urlaub, Feierabend usw.. Ja spielerei
Nun habe ich die IdleUrl dazu verdonnert, mir den jeweils aktuellen Status anzeigen zu lassen.
Jedes Telefon hat eine feste primäre Line. Anhand dieser Line suche ich auch in meiner eigenen MySql Datenbank.
Nun habe ich zwei Probleme:
1. Wie man im nachfolgenden Skript sieht, ermittel ich die IP Adresse des Phones, von dem ein Request kam. Mit dieser IP hole ich mir aus dem CUCM die MAC Adresse/Device Name, passend dazu das Model des Phones. Weiter zieh ich mir dann mit dem Device Name die UUID der ersten Line. Mit der UUID wird dann wiederum das Pattern der Nebenstelle ermittelt. Damit suche ich dann in meiner Datenbank, was für einen Status die Rufnummer/der Mitarbeiter hat.
Nun gibt es erstmal schon einen Unterschied zwischen einem Telefon, was nur eine Line auf dem Phone hat und ein Telefon mit mehreren Lines. Das Problem habe ich aber mit einer IF (empty(..... Abfrage abgefangen und dann in dem Fall, wenn mehrere Lines auf dem Phone sind, nur die erste Line genommen.
Aber irgendwie gibt es zwischendurch in unregelmäßigen Abständen immer mal das Problem, das er trotzdem nicht die UUID herausfindet. Muss man noch etwas speziell beachten? Oder hat jemand eine Idee, wie man das ganze in einer Abfrage optimieren kann?
2. Ich habe weiter unten im Skript eine Abfrage, wie der Status ist. Vorher hatte ich keine Abfrage, was für ein Telefonmodel das Phone ist. Meine Idee war und klappt auf 7960er Telefonen prima, das ich einfach checke, ob der Status Anwesend ist und wenn ja, dann zeige NICHTS an. Ist er anders als Anwesend, dann zeige den Status.
Allerdings verhalten sich neuere Telefone etwas anders. Was bei alten Phones noch geht, geht bei den 7921ern, 7965ern usw. nicht. Es wird mir entweder ein leeres Fenster (7965) oder ein XML-Analysefehler (7921) angezeigt, wenn ich bei Status Anwesend nichts machen lasse in der Schleife.
Hat da auch jemand eine Idee??
Vielen Dank schonmal und hier das Skript...
Code:
<?php
header("Content-type: text/xml");
header("Connection: close");
header("Refresh: 300");
include ("../shared/config.php");
include ("../shared/class.nusoap_base.php");
include ("../shared/class.soap_parser.php");
include ("../shared/class.soap_transport_http.php");
include ("../shared/class.soapclient.php");
function getRealIpAddr()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
$xml_getMAC = "";
$xml_getMAC .= '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.cisco.com/ast/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">';
$xml_getMAC .= ' <soapenv:Header>';
$xml_getMAC .= ' <AstHeader xsi:type="soap:AstHeader">';
$xml_getMAC .= ' <SessionId xsi:type="xsd:string" />';
$xml_getMAC .= ' </AstHeader>';
$xml_getMAC .= ' </soapenv:Header>';
$xml_getMAC .= ' <soapenv:Body>';
$xml_getMAC .= ' <soap:SelectCmDevice soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">';
$xml_getMAC .= ' <CmSelectionCriteria xsi:type="soap:CmSelectionCriteria">';
$xml_getMAC .= ' <MaxReturnedDevices xsi:type="xsd:unsignedInt">200</MaxReturnedDevices>';
$xml_getMAC .= ' <Class xsi:type="xsd:string">Any</Class>';
$xml_getMAC .= ' <Model xsi:type="xsd:unsignedInt">255</Model>';
$xml_getMAC .= ' <Status xsi:type="xsd:string">Any</Status>';
$xml_getMAC .= ' <SelectBy xsi:type="xsd:string">IpAddress</SelectBy>';
$xml_getMAC .= ' <SelectItems soapenc:arrayType="soap:SelectItem[1]" xsi:type="soapenc:Array">';
$xml_getMAC .= ' <item xsi:type="soap:SelectItem">';
$xml_getMAC .= ' <Item xsi:type="xsd:string">'.getRealIpAddr().'</Item>';
$xml_getMAC .= ' </item>';
$xml_getMAC .= ' </SelectItems>';
$xml_getMAC .= ' </CmSelectionCriteria>';
$xml_getMAC .= ' </soap:SelectCmDevice>';
$xml_getMAC .= ' </soapenv:Body>';
$xml_getMAC .= '</soapenv:Envelope>';
$options_getMAC = array('location' => 'https://'.$cucmip.':8443/realtimeservice/services/RisPort/', 'uri' => 'http://www.cisco.com/AXL/1.0', 'xml_encoding' => 'UTF-8', 'login' => $ccmuser, 'password' => $ccmpass);
$getMAC = new nusoap_client("https://".$cucmip.":8443/realtimeservice/services/RisPort",$options_getMAC);
$getMAC->setCredentials($ccmuser,$ccmpass);
$result_getMAC = $getMAC->send($xml_getMAC."\n",'http://schemas.cisco.com/ast/soap/action/#RisPort#SelectCmDevice',30,30,'');
$mac = $result_getMAC['SelectCmDeviceResult']['CmNodes']['0']['CmDevices']['0']['Name'];
$model = $result_getMAC['SelectCmDeviceResult']['CmNodes']['0']['CmDevices']['0']['Model'];
// Get UUID for primary line from phone
$xml_getPhone = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<axl:getPhone sequence="1234" xmlns:axlapi="http://www.cisco.com/AXL/API/1.0" xmlns:axl="http://www.cisco.com/AXL/API/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cisco.com/AXL/API/1.0 axlsoap.xsd">
<phoneName>';
$xml_getPhone .= $mac;
$xml_getPhone .= '</phoneName>
</axl:getPhone>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
$options_getPhone = array('location' => 'https://'.$cucmip.'/axl/', 'uri' => 'http://www.cisco.com/AXL/1.0', 'xml_encoding' => 'UTF-8', 'login' => $axluser, 'password' => $axlpass);
$getPhone = new nusoap_client('http://'.$cucmip.'/axl/',$options_getPhone);
$getPhone->setCredentials($axluser,$axlpass,'basic');
$result_getPhone = $getPhone->send($xml_getPhone."\n",'CUCM:DB ver='.$version,30,30,'');
$uuid = $result_getPhone['return']['device']['lines']['line']['dirn']['!uuid'];
if (empty($uuid))
{
$uuid = $result_getPhone['return']['device']['lines']['line']['0']['dirn']['!uuid'];
}
// Get DN of primary line
$xml_getLine = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<axl:getLine sequence="1234" xmlns:axlapi="http://www.cisco.com/AXL/API/1.0" xmlns:axl="http://www.cisco.com/AXL/API/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cisco.com/AXL/API/1.0 axlsoap.xsd">
<uuid>'.$uuid.'</uuid>
</axl:getLine>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
$options_getLine = array('location' => 'https://'.$cucmip.'/axl/', 'uri' => 'http://www.cisco.com/AXL/1.0', 'xml_encoding' => 'UTF-8', 'login' => $axluser, 'password' => $axlpass);
$getLine = new nusoap_client('http://'.$cucmip.'/axl/',$options_getLine);
$getLine->setCredentials($axluser,$axlpass,'basic');
$result_getLine = $getLine->send($xml_getLine."\n",'CUCM:DB ver='.$version,30,30,'');
$dn = $result_getLine['return']['directoryNumber']['pattern'];
$QUERY_STATUS = mysql_query("SELECT * FROM am_benutzer WHERE rufnummer = '".$dn."'");
$RESULT_STATUS = mysql_fetch_array($QUERY_STATUS);
$SQL_KATEGORIE = mysql_query("SELECT * FROM am_kategorien WHERE kategorie_id = '".$RESULT_STATUS['benutzerstatus']."'");
$RESULT_KATEGORIE = mysql_fetch_array($SQL_KATEGORIE);
if ($RESULT_KATEGORIE['kategorie_bezeichnung'] == "Anwesend")
{
if ($model == "7")
{
}
else
{
print "<CiscoIPPhoneText>";
print "<Title>Abwesenheitsnotizen</Title>";
print "<Prompt></Prompt>";
print "<Text>Aktueller Status:\nAnwesend</Text>";
print "<SoftKeyItem>";
print "<Name>Zurück</Name>";
print "<URL>Key:Services</URL>";
print "<Position>2</Position>";
print "</SoftKeyItem>";
print "</CiscoIPPhoneText>";
}
}
else
{
$cut_datumzeit = explode(" ",$RESULT_STATUS['abwesend']);
$datum = $cut_datumzeit[0];
$cut_datum = explode("-", $datum);
$zeit = $cut_datumzeit[1];
$cut_zeit = explode(":", $zeit);
print "<CiscoIPPhoneText>";
print "<Title>Abwesenheitsnotizen</Title>";
print "<Prompt></Prompt>";
print "<Text>Aktueller Status:\n".$RESULT_KATEGORIE['kategorie_bezeichnung']."\nAbwesend bis:\n".$cut_datum[2].".".$cut_datum[1].".".$cut_datum[0]."\n".$cut_zeit[0].":".$cut_zeit[1]." Uhr</Text>";
print "<SoftKeyItem>";
print "<Name>Beenden</Name>";
print "<URL>Key:Services</URL>";
print "<Position>4</Position>";
print "</SoftKeyItem>";
print "</CiscoIPPhoneText>";
}
?>