We would like to add and additional directory to our Cisco phones.
I have downloaded the SDK and we are looking at the details but some things are still a little unclear.
From what I understand an additional directory will have to sit on an external server and we can use AD as the data source.
How do I make the additional directory, the query fields, and the returned data display on the Cisco phones?
Would this be done via XML scripts that sit on the external server?
In CUCM Administration-->System-->Enterprise Parameters-->Phone URL Parameters-->URL Directories I can see that CUCM points to "http://ip address:8080/ccmcip/xmldirectory.jsp"
If I change the URL Directories field then it looks like CUCM can be pointed to my external server ...but then I am guessing that CUCM will not be able to see the built in Corp Directory, etc, anymore?
So there would have to be scripting to make the Corp Directory, etc, work as well?
Also will changing the URL Directories field cause anything to happenn with the Missed Call, Recieved Calls, and Placed Calls directories?
I also see how DirSync can be enabled on CUCM so it will get AD data, store it locally, and query against it.
If DirSync is enabled and I point the URL Directories field to my external server does CUCM stop querying the AD data locally?
Even if you change the directory URL to another URL, the built in directories (Misses calls, Palced calls, etc.), still show up on the phone.
Yes, you can set up an additional server (i.e Tomcat) and use AD as data source.
Thank you for the reply.
So your response is consistent with what I had believed...that the built in directories Missed Calls, Placed Calls, etc, would not be affected by changing the URL DIRECTORIES...but I wanted to double check.
What about the Corporate Directory?
Is this affected when I change URL DIRECTORIES?
I am working on the very same thing today with CUCM 6.0.
I have been able to get the CUCM server to query AD using the LocalizedDirectory.asp URL. Works well.
However, I have found that when I change the Directory URL on a phone, I lose the Corporate Directory and Personal Address book options for the particular phone.
I have been able to keep the corporate directory and personal address book by creating a phone service with the LocalizedDirectory URL.
My question is this...Can I replace the Corporate directory with the LocalizedDirectory URL but keep the Personal Address book?
I am setting up a managed / hosted environment and do not want users to see the CUCM corporate directory.
We just tested this today and got it working.
We changed the URL Directories in CUCM to point to our external server XML.
That external XML will display a new item called Mobile Directory on the Cisco phones so we can now search for and auto dial cell phone numbers.
Also in the external XML you just need to point back to the default URL Directories "http://ipaddress:8080/ccmcip/xmldirectory.jsp" and the Cisco phones will use the local CUCM Corp Directory the same as before.
(I believe this is indicated in the SDK examples/notes so I should have realized this early on)
We decided not to enable DirSync on our CUCM at this time but if you enable DirSync then the result should be the same...the external XML will point back to CUCM and CUCM will search the AD data stored locally for Corp Directory.
Do you know if there is a way to get the personal address book and the external server xml without the Corporate directory.
We will be hosting several customers on the same cluster and do not want them to be able to view the CUCM corporate directory. We do want each user to have the personal address book and fastdials.
If you just change the default directory URL to point to an external URL which serves XML, it will remove the corp directory but keep the personal directories (misses calls, placed calls, etc.)
In your external app, you can even give user access to only their corporate directories based on a criteria -- i.e if IP or extension starts with a certain pattern, display this directory, otherwise display that one. (just a small custom app to accomplish this).
Right. This is how it is working for me now. The problem is that I lost the Personal Address book. Missed Calls, Placed calls and Received calls are all still active.
I am looking into ways to customize the external app to include the Personal address book url (http://
you should be able to just add the link to the personal address book in your external directory
you can find the url by going to the old directory url with a webbrowser
The URL for the personal directory is http://x.x.x.x/ccmpd where x.x.x.x is the CUCM ip address.
Basically, I want to have my cake and eat it too.
I would like to be able to Search entries in Active Directory with the Localized Directory script from the IP Phone SDK AND have access to the personal address book.
If I add the link to the personal directory in the External Directory field, I can't use the LocalizedDirectory script for my Corporate Directory and vice versa....
Unless I am completely missing something here, I can't have both without editing the Localized Directory script to add the Personal Address Book options.
The URL I enter in the External Directory field within the phone configuration takes over the default Corporate Directory / Personal Directory options in the Directories menu on the phone. If enter the Personal Directory URL, I only get the Personal Directory option along with Missed Calls, Recieved Calls and Placed Calls when I press the Directories button.
The url to your external directory will point to a menu, right?
In that page, you need to add another menuitem to link the personal address book so that the complete output will look like;
I haven't looked at the sdk localizeddirectory, you might have to tweak it, and it is probably asp..??
This is exactly what I was looking for!
I created an xml file for customer1 in C:\CiscoIPServices\ASP\LocalizedDirectory\.
Here is my topology.
Microsoft AD: 10.168.10.82
I have two files for customer1:
I enter the following URL in the external directory on the customer's phone:
Here are the contents of my XML file:
Big thanks to s.monteiro!!
Now, I have not tested this, but I imagine you could create several connections to different LDAP databases with the LocalizedDirectory Script and edit the xml file to query several directories by adding menu items to the above xml configuration.
Here is my directory1.asp file.
If you have problems with the ldap syntax (like I do). I recommend using the adsiedit.msc tool from Microsoft.
The file metions copying the "dictionary.asp" file to the external server, did anyone find those in CUCM Version 6?
No, I just changed the name of the LocalizedDirectory.asp file that comes with the SDK to directory.asp then referenced this file in the url.
I've got this partially working. I can get the Personal Address book from CallManager with no problem. I get "page not found" when selecting Corporate Directory. I copied the localizeddirectory.asp with a new name, updated the xml doc to reflect this new file name and only change the 5 Variables listed int the .asp file to point to my local AD server (var ldapserver, var ldapsearchbase, etc...). Did you change anyting else in the .asp page to get this thing to work? Funny thing is that my External Web server, my phone and the AD server are firewall seperated and I don't see any connection attempts from either the Phone or the Web Server for LDAP...
My earlier question about the "dictionary.asp" file comes from the .asp file, when opened with Notepad, has a reference in the beginning stating something about copying the dictionary files from CallManager to the External Web server...
Thanks, this post has been a great help. I am looking to get a little more information returned. In my search results I would like to get back the name, the number, and the department. My problem is that I can't seem to figure out how to get my listing back with 3 lines of infor instead of just 2.
the number of lines in a standard directory is controlled by the length of the string you're displaying (and there's a limit to how many characters you can display).. if you have long names and long internal extensions you might run into a cutoff problem if you're trying to add more information.
If you want a really flexible directory you'll have to go outside the directories menu and create a regular ip phone service.. there you are free to use different GUI elements... e.g. I've done directories using a CiscoIPPhoneMenu and list results using that.. I list whatever information fits into the character limit for a menu item, then I have a dial (dials the default number for the user.. if available the office number, then the cell and if not available the personal number) softkey and details softkey - the latter gets you to a detail page that shows whatever info the customer wants displayed including information like department, and a list of all phone numbers found (I usually query another directory than ccm or return a combined search result from ccm and another directory.. hence the possibilty for more numbers) and have softkeys to dial the different numbers (since they're listed in text you cannot select one).
That is exactly what I am trying to accomplish. Would you mind posting your pages that you are using for this IP service?
Are you refering to me? I do all my work with JSPs, I have my own custom search libraries that I reference as well as my own library to write the CiscoIPPhone Elements - so while you see me iterating through the results and might get an idea of what I'm doing with my CiscoIpPhone lib I'm not sure how telling the whole thing is (and I cannot post everything.. a snippet of the jsp would be all).
If you're interested though I can just save a couple pages of the output when I connect to the customer the next time so you see the pages my service returns (input, results, details).
What (programming) language do you speak? Though even if I give you a frontend page.. I have complete separation between presentation and search logic.. my jsp pages just contain presentation logic (gather parameters, ask backend to perform the search, list search results) and I cannot give out backend code (for one I have base classes and project specific classes that have the customer name in them.. and customers don't pay for sourcecode access and would feel more than slightly miffed if we shared the code with third parties but not with the guys that paid us to write the code).
But the principle is always the same.. CiscoIPPhoneInput with 2-3 input parameters (usually first and last name, and depending on the customer location or company name), then perform the search and get a vector of my DirectoryEntry class, then iterate through them and generate a CiscoIpPhoneMenu with MenuItems (until you hit the maximum number of allowed items on the page.. or unless you run out of items) or a CiscoIpPhoneDirectory. If it's CiscoIpPhoneMenu it depends on the customer what happens if an item is selected.. default is call the number but there's a call softkey as well (adds a query string action=call to the url).. depending on customer there can be a details softkey which returns a CiscoIpPhoneText items listing all the numbers and a softkey per number... so you could e.g. have 3 softkeys
and depending on which you press, the appropriate number is called (naturally those buttons are only there if the corresponding number is).. there can also be more info about the directory entry e.g. company, location, etc. I even have a directory where the DirectoryItem contains a PNG image.. in that case the details page generates a PNG image composited of a fixed background, the person's image and then I "write" the name number etc onto the background using standard AWT mechanisms for drawing, then save the file to the webserver and return a CiscoIpPhoneImageFile object.
If you are asking me, I do not speak any "programmer" language. All I'm looking for is a way to have an external server perform a search of the Active Directory by OU and provide those results back to the phone...The directory1.asp file that is loaded on my external Web server has the applicable variables set for the AD, but I get "page not found" on the phone when hitting button 5 for "corporate directory". Has anyone gotten this proposal to work?
Yes, I got it to work. I posted a response to this thread on Sept 11, 2008 with the details.
What url are you using?
What happens when you try to access the url with a PC web browser?
Here's my topology:
External Web Server: 10.96.0.53
AD Server: 10.32.0.21 with domain "test.local". OU for Users = "Test Customers". User for AD login = CUCM in "Test Service Accounts"
the Directory1.xml file has this:
The Directory1.asp file has the following Variables set and nothing else changed...
var ldapserver = "10.32.0.21";
var ldapsearchbase = "OU=Test Customers,DC=test,DC=local";
var ldapport = "389";
var ldapuserid = "CN=CUCM,OU=Test Service Accts,DC=test,DC=local";
var ldappassword = "test";
Any thoughts would be GREATLY appreciated...
Does the external webserver have the Cisco IP Phone Services Software Development Kit (SDK) installed?
so what happens if you enter the url in a web browser?
check if the virtual directory CiscoIPServices exists in IIS
I get "page cannot be found" with HTTP error 404.
The Directory "CiscoIPServices" does exist under IIS->Web Sites->Default Web Site. When I expand the Directory I see all the folders that SDK created and when expanding the LocalizedDirectory folder I see my files there.