Where I work right now, they use a Nortel phone system. For voicemail, they use CallPilot. The CallPilot system happens to be on the network, which is rather intriguing. For the department I am in, we use an Asterisk phone system that talks to the Nortel. I’ve always wondered however if there was an phone directory of the extensions. I was told no. So I did some digging. I happened across and LDAP server running on the CallPilot system. After some hacking, I discovered that the LDAP system had all the names in it (outdated of course). Two caveats though: it is only the extensions which have voicemail and it is using LDAP 2.0.
So come to find out, no one makes a free LDAP browser that actually supports version 2.0, and certainly none that will talk to the hacked version on the CallPilot system. LDAP 2.0 is ancient as I heard it quoted on one website. But, PHP supports 2.0. So I took my Active Directory lookup script, and modified it for use with CallPilot. I’ve posted a script below that you can use if you’d like to do lookups against this directory. It uses any voicemail user and password (I used mine for instance). Next, I may be playing with the IMAP server that appears to be running on the CallPilot system. That should prove interesting…
<?php // Specify server settings here $CP_Server="0.0.0.0"; // Enter the IP address of your CallPilot System $CP_User="mail=12345671111@CALLPILOT.domain.com,dc=nortel,dc=ca"; // The extention was prefixed with the VPIM $CP_Password=""; // Password for voicemail box $CP_Root="addressbook=user,dc=nortel,dc=ca"; // You should probably leave this alone function connectLDAP($server,$user,$password) { // Issue the connect command $cp_connect=ldap_connect($server) or die ("Could not connect to LDAP"); // These options are required for MS Active Directory ldap_set_option($cp_connect, LDAP_OPT_PROTOCOL_VERSION, 2); ldap_set_option($cp_connect, LDAP_OPT_REFERRALS, 0); // Bind to AD with the username and password $ds_connect = ldap_bind($cp_connect,$user,$password) or die("Couldn't bind to CallPilot!"); // Return handler return $cp_connect; } function disconnectLDAP($handle) { // Disconnect from the server ldap_unbind($handle); } function searchLDAP($ldap,$query,$root,$sort) { // Query the LDAP server // Future: Want adjust the array on the fly later, such as objectclass $sr=ldap_search($ldap, $root, $query); // If a sort field was requested, adjust the list if ($sort) { $st=ldap_sort($ldap, $sr, $sort); } // Generate the array, and return $info = ldap_get_entries($ldap, $sr); return $info; } // Start the script, check for extention if ($_REQUEST["ext"]) { $cp = connectLDAP($CP_Server,$CP_User,$CP_Password); $query = "(&(telephonenumber=".$_REQUEST["ext"]."))"; // Put whatever you want here $sort = ""; $info = searchLDAP($cp, $query, $CP_Root, $sort); if ($info["count"]>0) { echo "Name: " . $info[0]["givenname"][0] . " " . $info[0]["sn"][0] . " (" . $info[0]["cn"][0] . ")<br />"; echo "Department: " . $info[0]["department"][0] . "<br />"; echo "Extension: " . $info[0]["telephonenumber"][0] . "<br /><br />"; echo "<pre>"; print_r($info); // print the array echo "</pre>"; } else { echo "No such user found for " . $_REQUEST["ext"] . "."; } disconnectLDAP($cp); } else { echo "Please specify an extension."; } ?>