Monday, April 23, 2012

Cisco 7945G custom wallpaper and CUCM 8.X

As of the time of this writing, there are a couple issues with the "Cisco Unified IP Phone 7975G, 7971G-GE, 7970G, 7965G, and 7945G Administration Guide for Cisco Unified Communications Manager 8.6 (SCCP and SIP).pdf" instructions on how to implement custom wallpapers on 7945G guides.
1. The correct image size for 7945G's is 320x212, not 320 by 216 as indicated in the guide.

Therefore the correct directory path that has to be used or created is "Desktops/320x212x16".

The PNG formated pictures must also be sized as 320x212 for the wallpaper, and 80x53 for the thumbnail.

The List.xml file should also reference the correct directory / size, like below:

<CiscoIPPhoneImageList>
<ImageItem Image="TFTP:Desktops/320x212x16/YourWallpaper-TN.png"
URL="TFTP:Desktops/320x212x16/YourWallpaper.png"/>
</CiscoIPPhoneImageList>
 
2. If you copy and edit the List.xml sample from the PDF for use in production and do not validate using an XML aware text editor (i.e. you use MS Notepad, rather than Notepad++, etc.), you will likely be including some extended characters in the XML file rather than "real" double qoutes around the directories. This will prevent your phones from accessing the wallpaper's as well. Check your XML file in something other than MS Notepad to verify your double quotes are really double qoutes and that the XML is valid.

Friday, March 02, 2012

Cisco UCS on UCS basic things you'll forget

Some basic stuff you need to do in VMWare but will forget to when you get distracted by just getting things upgraded, migrated, licensed, etc.

All documented here: http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/virtual/servers.html


Install the VMWare tools on the applications:
Depending on what application you are running and what version, there are different techniques to do so. See here: http://docwiki.cisco.com/wiki/VMware_Tools

Disable LRO on the host:
You may experience issues with TCP performance speed. See here for modification techniques, and note it requires rebooting the host. See here: http://docwiki.cisco.com/wiki/Disable_LRO

Saturday, January 28, 2012

UC500: How to eliminate the access code for outbound calls in PBX mode, part 2

The basics of how to eliminate the access code for outbound calls in PBX modeis describe well at https://supportforums.cisco.com/docs/DOC-9787. 

Assuming you start with a basic configuration via Cisco Configuration Assistant, you will still need to modify how the 6XXX pattern, used for transferring calls directly to voicemail is handled, as well as fixing the MWI codes in CUE.

Per the supportforums, I've found using rule 2 below to remove the trailing star from the standard three digit extension works fine applied to dial-peer 2000 associated with the CUE pilot number.  The problem is now when using the 6XXX* pattern to send calls to voicemail, the redirecting number simply becomes 6XXX and CUE replies with a "Sorry. There is no mailbox..." prompt.

To remove the 6 and star if there, and then just the star if the leading 6 isn't there,  you can change the translation-rule like below (insert rule 1):

voice translation-rule 2222

 rule 1 /^6\(...\)[*]/ /\1/
 rule 2 /\(.*\)[*]/ /\1/

To fix the CUE's ability to light and extinguish MWI:

service-module integrated-Service-Engine 0/0 session

se-10-1-10-1(config)#ccn application ciscomwiapplication aa
se-10-1-10-1(config-application)# parameter "strMWI_OFF_DN" "A8001"
se-10-1-10-1(config-application)# parameter "strMWI_ON_DN" "A8000"

Friday, January 20, 2012

Unity Connection 8.6 find Alternate Extensions

Before you break out CUDLE from http://www.ciscounitytools.com/Applications/CxN/CUDLE/CUDLE.html and get your SQL on, be aware there is an easier way.

To find an Alternate Extension in the Unity Connection database, simply navigate to the Unity Connection administrative GUI as normal.
Pick Users.
Limit your search to a particular partition.
Check the radio button to Display Primary and Alternate Extensions in Selected Partition.
Search by the Alternate Extension you are looking for.

Below is a sample search for 2465 that returns a user with a primary extension of 2466.

Easy.

This is the user returned when searching for 2465.  Note, 2465 is the alternate extension, not the primary extension:


Updated 2/3/2014: This is the page that would be referenced when searching normally for 2466, the primary extension for the user:


Updated 2/3/2014: This is the alternate extension page that is normally not displayed via the default search, but which matches when using the particular partition and Display Primary and Alternate Extensions in Selected Partition :


Sunday, January 15, 2012

MS Excel: Find a value in one list in another list and do two different things if found

I use the following formula or variations on it pretty regularly, but always have to double check the logic to make sure I'm not creating a mess.  Here's my notes to myself on what it does.

=IF(ISERROR((VLOOKUP([what to look for],[where to look for it],1,FALSE))),[do something if TRUE],[do something else if FALSE])

A specific example of when I used it last is:
=IF(ISERROR((VLOOKUP($F3,$B$3:$B$1214,1,FALSE))),F3,"Shipped")
Basically, I have a long list of all the parts that need to be shipped out.  These are all in column F.  I also have a shorter list of parts that have already been shipped.  These are in column B.  Now I need to find what parts still need to be shipped.  I imagine I need to take all the parts in F and try to find them in the shipped parts B.  If they are in that list, then they're shipped and I'm just going to fill the cell with "Shipped".  If they aren't in the list, they haven't been shipped, so I'll fill in the cell with the part.

The whole thing works from the inside out, so the first thing the function does is:

(VLOOKUP($F3,$B$3:$B$1214,1,FALSE)
This takes the value found in F3, and looks for it in column B (or specifically B3 through B1214).
If it finds the F3 value in B, it returns F3,
If it doesn't find F3, it returns #N/A.

Then:

(ISERROR()
This checks to see if something is an error equal to #N/A, #VALUE, #DIV/0, etc.
If it's an error, then ISERROR returns TRUE.
If it's not an error, then ISERROR returns FALSE.

Then:

IF([the TEST],[something if the test is TRUE], [something if the test is FALSE])
If tests a condition (i.e. ) is TRUE or FALSE.
If the test is TRUE, then the thing after the test in the function happens.
If the test is FALSE, then the last thing in the function happens.

So...

First, when we do a (VLOOKUP($F3,$B$3:$B$1214,1,FALSE), maybe we get the value of F3, or maybe we get an error like #N/A.

Let's just assume F3 isn't found.

If so, (VLOOKUP($F3,$B$3:$B$1214,1,FALSE) would return a #N/A.

Next, consequently, the (ISERROR((VLOOKUP($F3,$B$3:$B$1214,1,FALSE))) portion of the function ends up logically looking like (ISERROR(#N/A).

Since ISERROR checks for a value of #N/A, the ISERROR portion of the function returns TRUE.

Ultimately, this first means the IF(ISERROR((VLOOKUP($F3,$B$3:$B$1214,1,FALSE))),F3,"Shipped") logically looks like IF(ISERROR(#N/A),F3,"Shipped") after the VLOOKUP fails to find F3. Then the IF(ISERROR(#N/A),F3,"Shipped") ends up looking like IF(TRUE,F3,"Shipped") after the ISERROR decides #N/A is an error it recognizes.

Finally, since the IF function does the first thing after its test when the result is TRUE, we simply end up with the value of F3.

Ta'da.

Conversely, if our VLOOKUP was actually succesful in finding F3 in B, the ISERROR function would be passed the value of F3, rather than an error. In this case, ISERROR would be false, and would pass FALSE to the IF function. Then, the if function would return the value "Shipped", rather than the value of F3.