Sunday, October 30, 2016

UCCX CUIC Not Ready Custom Reason Codes

While migrating a client to UCCX 11.5 found them needing to use and report on custom reason codes.  UCCX and CUIC do not have this capability available by default, but with some customization it can be done.

Here's an official bug CSCue26150 indicating Cisco is only considering this a documentation defect as they seem to think this functionality is acceptable by design.
UCCX: Not Ready Reason Code Report Does Not Display Custom Reason Codes

Here's a decent write up by a Cisco representative who apparently fields daily calls on why this is so painful but isn't 11.5 specific and lacks some detail for the newbies. 

Here's my version / what I suggest:

Create a custom version of your report
  • Click the ellipses to the right of the report name and choose Save As
  • Choose a new descriptive report name and location.  For example I have "Agent Not Ready Reason Code Summary Report 1" in a "Custom" folder.

Run the new copy of the report while filtering by your custom reason codes.
  • Here I know a custom code 108 equates to "Admin Duties" and 111 equates to "Done for the Day". We'll filter on those.  You can have a maximum of 8 codes displayed separately but the sum of the ninth through whatever will be displayed in a single column.  You may have to run multiple reports to display your data.
  • I will also select the "Save the chosen filter as default" check box to make filtering easier easier in the future.
  • Then run the report.

Verify the data column order
  • The columns will not have headers that reflect the descriptions of your custom ready codes.  The headers will still be the default names displayed if you did not filter at all (i.e. RC 32,751 or RC 32,752, etc.).
  • Use the SQL output or "View Filter Information" to verify what order your codes were retrieved in.   Here we see we retrieved 108 first and 111 second.  This should correspond to the order you entered them in your filter list.

Rename your column headers to make report readable
  • Choose "Edit View" from drop down.
  • Scroll to the column from the Selected list that you want to rename and click the edit pencil icon.
  • Change the Display Name to something meaningful.  Here I will use 108 Admin Duties and 111 Done for the Day.  Click Done.
  • To further tailor your report, you can remove unused columns from this same Selected List by selecting them and using the left button.

Wednesday, October 12, 2016

Download and save Instagram photos without an app

Download and save Instagram photos without an app

On a Windows 7 desktop using Google Chrome circa version 53:

  1. Find the photo on Instagram
  2. Right click the photo and choose "Inspect"
  3. On the developer tools menu, choose "Application"
  4. In the left pane, scroll down to "Images"
  5. Scroll down through images (displayed in right pane) until you find the one you are looking for.
  6. Right click image in right pane and choose "Save"
  7. Enter an appropriate name and file location and choose "Save"
Stalking my daughter for my wife with Chrome

 On a Windows 7 desktop using Mozilla Firefox (circa version 49):

  1. Find the photo on Instagram
  2. Right click the photo and choose "View Page Info"
  3. In pop-up window, choose Media icon.
  4. In top Address list, scroll down through images (displayed in bottom Media Preview frame) until you find the one you are looking for.
  5. Click "Save As" button.
  6. Enter an appropriate name and file location and choose "Save"

Stalking my daughter for my wife with Firefox

Saturday, September 10, 2016

NetApp cable diagram when adding DS2246 disk shelves

I had a chance to help a cohort add storage to a couple NetApp deployments.  I basically had to cable the devices so he could provision them remotely later. 

They had two FAS2220 systems with double controllers (Multipath HA) in production and I had to attach the new DS2246 disk shelves.

NetApp publishes a quickstart guide that has nice cable drawings in them but none specifically with this (a single external storage shelf) as the end result.  In addition, the new shelves were racked above the original systems so the drawings were evening a bit more difficult to follow  by a NetApp noob.

Below is the production system, the racked external storage above it, and the ultimate path for the SAS and ACP cables.  Worked like a champ.

Hope it helps calm someone's storage nerves.

Monday, August 01, 2016

UCCX CUIC Exported Reports Blank in Excel

After deploying UCCX 11.0 and working on setting thresholds in some live reports in CUIC I found that reports exported to Excel couldn't be opened.  When attempting to open the XLS file, Excel itself would open but not the report.  Excel would sit open, idle, returning no dialog box or even a blank default workbook.  It would simply be an idle instance of Excel displaying no information.

Bug CSCux50551 indicates there is a known issue with exporting the Abandoned Call Detail Activity Report but my issue was the same regardless of what report was exported.

I also found that the exported report could be opened in a text editor and that some data could be gleaned between markup tags.  If I opened the exported report in a browser, it could be viewed in a rather crude format.

Ultimately I discovered a security feature of either my laptop's Windows implementation or my Excel installation was preventing the file from being accessed on my laptop.  Unfortunately there was no dialog box indicating that was the case so it took a bit to decipher.

Right-click your exported report XLS file to view the properties.  Look for a Security reference.  The description on mine was "This file came from another computer and might be blocked to help protect the computer."  Simply hitting the Unblock button and Apply fixed my glitch.

Here's a screen shot of my blank Excel instance and the file property page:

For reference, I'm using Office Professional Plus 2010 on Windows 7 Professional on a domain different that the UCCX servers.

Cisco UCCX CUIC Report Thresholds

To add thresholds to existing reports:

  1. Copy existing stock report into new folder.
  2. Right click report and choose Edit.
  3. Click Edit View button.
  4. Choose view radio button (ie snapshot, since midnight, etc.) and Edit button
  5. Right click the field to set threshold against and choose Thresholds.
Selecting "Waiting Calls" variable and adding "Greater than 1" threshold

Setting text of variable to white on red when threshold met

Wednesday, June 29, 2016

Stream Multicast MOH from gateway notes

Cisco CUCM deployments can provide MoH / music on hold to callers that is streamed from the CUCM server(s) themselves.  If the devices you are putting on hold are far from the CUCM servers though and you don't want the music streams to cross lower bandwidth WAN links, one option you have is to stream the MoH from a voice gateway that is local to the devices on hold.

There are quite a few dependencies to make this work though. Below is a summary of the things I addressed today making it work at a new site.

In your CUCM, you need to enable multicast capabilities on the MoH source, the MoH server, and a Media Resource Group (MRG).

Audio Source with multi-cast enabled

MOH Server with multi-cast enabled

MRG with Multi-cast enabled

Note: You should configure multicast audio sources to increment on the IP address and not the port number (see server configuration above) because:

  • IP phones placed on hold join multicast IP addresses, not port numbers
    • Cisco IP phones have no concept of multicast port numbers. Therefore, if all the configured codecs for a particular audio stream transmit to the same multicast IP address (even on different port numbers), all streams will be sent to the IP phone even though only one stream is needed. This has the potential of saturating the network with unnecessary traffic because the IP phone is capable of receiving only a single MoH stream.
  • IP network routers route multicast based on IP addresses, not port numbers 
    • Routers have no concept of multicast port numbers. Thus, when it encounters multiple streams sent to the same multicast group address (even on different port numbers), the router forwards all streams of the multicast group. Because only one stream is needed, network bandwidth is over-utilized and network congestion can eventually result.

You then need to create and / or assign a MRGL to the trunk, device pool or other that includes the MRG configured above.

MRGL used by remote devices that includes multi-cast MRG from above

Note: You do NOT need to support multicast traffic generically across the network or across the WAN.  Because the phones and voice gateway used for streaming the MoH file were on the same subnet at the remote site, I only enabled support for multicast routing on the voice gateway itself.  The switch where the phones and voice gateway were connected at the remote site did not even have multicast routing enabled.

Now verify what multi-cast IP address your music will utilize.  It is not necessarily the IP address set in the MOH server you see above or even related to the number of the audio source in use. Rather it depends on what codec is being used and in what order the audio sources were added to your server.

Here's a great discussion on the topic:

On the MOH server where "Enable Multicast Audio Sources" is enabled, here's how I found the address I needed.

admin:run sql select m.mohaudiosourceid,m.multicastaddress,m.multicastport, from mohservermulticastinfo as m,typemohcodec as c where m.tkmohcodec = c.enum
mohaudiosourceid multicastaddress multicastport name
================ ================ ============= ========
1             16384         711 ulaw
51            16384         711 ulaw
2             16384         711 ulaw
1             16384         729
51            16384         729
2             16384         729
1             16384         wideband
51            16384         wideband
2             16384         wideband
1             16384         711 alaw
51            16384         711 alaw
2             16384         711 alaw

Note, if here I want to use audio source 2 and the G.711 ulaw codec, I should then use multicast address in my gateway config.

My gateway configuration then includes the following critical components:
ip multicast-routing distributed
ip source-address port 2000
moh enable-g711 "flash:/SampleAudioSource.ulaw.wav"
multicast moh port 16384

Here my gateway's LAN IP address is and I have chosen to stream Cisco's sample music from flash on the gateway.  If you are interested, here's my tips on how to download music from Cisco's music on hold servers to use elsewhere:  It's the technique I used get the sample music file off the server and on the gateway.

If all goes as planned, when a caller is put on hold you can see evidence of it being streamed from the gateway via the "show ccm-manager music-on-hold" command.
! with no calls on hold

my-router#show ccm-manager music-on-hold
Current active multicast sessions : 0

! with one call on hold
my-router#show ccm-manager music-on-hold
Current active multicast sessions : 1
 Multicast       RTP port   Packets       Call   Codec    Incoming
 Address         number     in/out        id              Interface
===================================================================        16384   0/0              25939 g711ulaw            

Friday, June 17, 2016

UCCX 11 Notes

11.5(1)SU1 essentially forces you to stop using Internet Explorer Compatibility View.  Read the release notes and make sure you aren't forcing intranet sites to be view in compatibility mode via Microsoft GPO before the upgrade.


Seeing a FATAL message when rebooting may be recoverable.  A bug CSCvb21486 Reboot of node may result in FATAL error was hit after deploying UCCX 11.5(1) with ES01 but Cisco has it associated with CUCM.  It appears to be related to the automatic VMware tools installation gone wrong.  You'll need to grab a recovery disk and bravery as my damaged file seemed to be on the wrong partition.  It looks like this:

Back up your custom Finesse desktop XML seperate from your DRS backups.  Document or take visual snapshots of your team resources.  Bug CSCvc94563 UCCX: Finesse Team Resource Configuration Lost (there seem to be multiple bugs along this line) will disassociate your team related configurations from your teams and make your custom Finesse desktop XML disappear.

If you are using Prime Collaboration Deployment to execute upgrades, note bug CSCuu34496 L2 upgrade status shows as running instead of complete from OS adminpage.  Your standard L2 upgrade may finish without issue but never report so.  You can see in the install_log|release_upgrade_lock: Releasing lock (pid: 15496)| and in the upgrade_monitor log upgrade finished.  Prime is not intelligent enough to figure this out and your tasks will stall indefinitely.  You should check in on the process soem time after your time completion estimate.

Calling Search Space for Redirect on your triggers by default is set to Default.  This means that UCCX will route calls through the application and script called by the trigger with the caller's CSS, not the trigger's CSS.  If your caller is not capable of reaching the agents or other destinations defined in the application and script directly your call will be rejected.  This is typically not an issue but where you might have PLARs set up with very restricted CSSs, sending the PLAR to a UCCX trigger may fail.  This can be modified per trigger on at least UCCX 8.5 and beyond.  See bug CSCso91760 at 20CSCso91760 for more redirect information.  See regarding basic SCCP PLAR setup.

The official Cisco install guide indicates the server hostname is case sensitive and must be lower case.  I suspect this is to alleviate issues with installing signed certificates later with all lower case SANs.

When modifying "Finesse Layout XML" it appears restarting TomCat or Finesse services is no longer required.  Users seem to have to log out and back in to see changes though.

If you are deploying UCCX 11.0 you should plan to hit bug CSCux33949.  Your default Finesse gadgets will all be broken.  At this time the fix requires TAC gaining root access, providing some new JAR files and restarting the UCCX Engine.  Budget time to have this fixed early in your implementation plan.

RTMT cannot be used to show telephony data on versions 11 or 11.5 per bug CSCuy72411.  We won't be able to use it to check triggers, call control groups and CTI ports until who knows when.

UCCX Editor is not compatible with Windows 8 or 8.1.

The Team Performance gadget served by /desktop/gadgets/TeamPerformance.jsp is not resizable in version 11.0.  The rumor is it will be in 11.5.

As of version 10.0, UCCX Finesse supervisor and agent desktop still shows all queues and all logged in agents.  See for guidelines regarding modifications.

Friday, April 22, 2016

CUCM Authentication URL format

When testing authentication against CUCM v10 using the Authentication URL, here is the format:

Thursday, April 21, 2016

Singlwire Informacast Resiliency feature

Somewhere around version 9 Singlewire introduced a "resiliency" feature where you no longer had to depend on a single server to provide paging, alerting, bells, etc. to your masses.  You can now deploy multiple backup servers (much like CUCM, called subscribers) that would perform all the paging functions in the event the publisher or higher order subscribers failed.  Now that they are on version 11 and I haven't deployed one since about version 8, here are few tips to get you over the resiliency feature deployment that I bumped into today.

1. Send Commands to Phones by JTAPI

If you are familiar with the single server deployment model or audio paging solutions from other vendors, you may be familiar with the suggestion they all make to modify the CUCM cluster's Authentication URL.  The Singlewire documentation still addresses this in multiple places, which is good as it is a common point of failure in these types of deployments.  Singlewire and others will strongly recommend you change the default CUCM Authentication URL to a custom URL pointing to your fancy new paging server instead.  The idea here is to have all the phones authenticate to the paging server when they are sent a page request rather than potentially overloading the CUCM Publisher with those same authentication requests.  You don't want thousands of phones smashing on CUCM's Tomcat door just because your receptionist wants to announce she found a pair of sunglasses at the front desk. 

The challenge is now that if you have redundant paging servers, what do you use for the new Authentication URL?  Normally you would use a URL that points to the Singlewire server.  But now you have two (or three or whatever). If your first paging server fails and the second takes over all the paging functions, your phones are still going to look for the first paging server to authenticate against and nothing will work even if subscribers are up and healthy because there is no paging server to authenticate the page requests.

What do you do?

You use JTAPI instead of HTML requests.  HTML sounds way simpler to me and it's been how things were done for some time now.  Why not stick with it?  Quietly you will find the Singlwire subscriber servers use JTAPI regardless of how you've chosen to authenticate requests from the Singlewire publisher.  This solves the problem of what URL to change the CUCM Authentication URL to as you can now set the one and only option to your one and only paging server using HTML requests, the Singlewire publisher.  But since the subscribers use JTAPI rather than HTML, why not use JTAPI on the publisher as well?  Just do it.  When you buy another administration bolt on tool and it wants you to change the Authentication URL to itself as well you'll thank me.  How many daisy chained authentication server requests do you need?

On the publisher you will find the single checkbox option under Admin | Broadcast Parameters.

2. Unified Communications Application User

Having installed you subscriber and it looking healthy you decide to shutdown the publisher and actually test the resiliency function.  You dial a CUCM route pattern that was working perfectly when the publisher was up but now hear something like "We're sorry. No devices could be activated. Your broadcast will not be completed."  You know your SNMP and AXL settings are correct since your pages worked through the publisher and you know it's not a HTML authentication issue since you are using JTAPI now so what is the problem?

Although most of the configuration information in a resilient Singlewire solution is replicated from the publisher to the subscribers, the CUCM Application User settings are not. Why? Don't know.  They just aren't.

Log into your subscriber server HTML interface where you typically are prevented from really doing anything and set your CUCM Application User credentials there.  Go to Admin | Telephony | Cisco Unified Communications Manager Cluster | Edit Telephony Configuration and enter the user name and password there.

3. Stop / Restart the singlewireInformaCast service

How do you replicate a server failure to test resiliency?  You could shut down the whole server, maybe use a fancy network ACL, maybe just pull an Ethernet cable, whatever, because you just can't find a tool in the administrative interface to stop or restart services. 

From the main administration page, choose the Webadmin option.  This wil take you to another log in and adminstrative interface.  From there choose System | Bootup and Shutdown.  That's right.  You can simply stop and start services manually from the option labelled Bootup and Shutdown.  This is not terribly intuitive as far as I'm concerned but it works.  Scroll down the service list and click singlewireInformaCast.  You can Stop Now or Start Now on the Publisher server to simulate a server outage.

Here's what it looks like if you're in the right place:

Tuesday, March 29, 2016

Using Cisco UCCX CUIC as a wallboard and CSCun28885 Tomcat inactivity timeouts

A co-worker of mine was involved in a new Cisco UCCX roll-out where the client was looking to use a CUIC report on a large LED flat screen as a wallboard solution.  After creating the report, running it via a permalink and adjusting screen resolution and Internet Explorer zooming to make the report readable, the client found the result to be satisfactory.  They unfortunately realized that because Cisco Tomcat has a maximum inactivity timeout of 14400 seconds, their new wallboard would break overnight if there was no activity in the call center and CUIC would need to be shutdown and restarted every AM.

You can find some background here:

From some email exchanges it looked like every 4 hours or AM someone would need to:
  1. Kill Internet Explorer
  2. Start Internet Explorer back up.
  3. Navigate to the CUIC dashboard permalink.
  4. Login to the CUIC dashboard.
Being pressed for time he asked for help and here's the solution, as dirty as it may be, I came up with.

Powershell script to stop IE, start IE, navigate to a web page and log in:

# Script closes instances of IE,
# opens a new visible instance,
# navigates to a URL
# and logs into CUIC
# NOTE: user name and password stored here in clear text
# WebMaxtor
# 03/28/2016

# Edit this $Url to be the URL or IP address of the site to launch
# This could be the CUIC logon page or a dashboard permalink
# This assumes there will be no challenge to accept certificates
# Typical CUIC logon page URL below as example
$Url = ''
# Edit this to be the username
# Edit this to the corresponding password

# Close IE to eliminate timed out reports
# option 1:
# Get-Process iexplore | Foreach-Object { $_.CloseMainWindow() }
# option 2:
#(New-Object -COM "Shell.Application").Windows() |
#  ? { $_.Name -like "*Internet Explorer*" } |
#  % { $_.Quit() }
# option 3:
Get-Process iexplore | Stop-Process

# Wait a few seconds to be safe for processes stop if need be
while ($IE.Busy -eq $true)
Start-Sleep -Milliseconds 2000;

# Start a visible Internet Explorer instance
$IE = New-Object -com internetexplorer.application;
$IE.visible = $true;

# Wait a few seconds and then log on
while ($IE.Busy -eq $true)
Start-Sleep -Milliseconds 2000;

# fill in the form and click submit button
$IE.Document.getElementById('j_username').value = $Username

Windows Batch file to make running powershell script easier:

PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"

The beauty of the batch file is if the powershell script and the batch file are named the same except for the file extension (i.e. MyFile.bat and MyFile.ps1) and reside in the same folder, you can just click the BAT file and you are off and running.

There are multiple methods to close IE via powershell and I can't be sure what will work best in your environment so be sure to test the three options or come up with your own.

The final step was then calling the BAT file from Window's Scheduled Tasks on a regular basis to ensure the report was not effected by the Tomcat inactivity timer.

Monday, March 14, 2016

VMware Workstation bridged network ping guest host

For years I've run Cisco UC servers on my laptop via VMware Player or VMware Workstation for testing interesting scenarios outside of production.  My latest laptop sports an Intel i5 with 8 GBs of RAM which is more than enough horsepower to run at least a couple small OVA servers in VMware Workstation 11.

The last time I tried to boot up a CUCM 10.5 server I was surprised to find I couldn't even ping between the host and guest.  The networking was set up pretty simply, used the default bridged VMware adapter and I was certain I used this server before.

The fix was ultimately to disable the DNE LightWeight Filter on the physical adapter on my laptop.  It seems to have been installed recently when I was forced to use Citrix to connect to a clients network remotely.

Below is a screenshot of the ping failures, the DNE Lightweight Filter correctly unchecked.  You hit OK at this point, the adapter resets and you might be in business again.

Good luck. Hope this helps.

Tuesday, February 23, 2016

Cisco Unity Connection and Office 365 Unified Messaging Integration

Helped a cohort out troubleshooting a new Unity Connection 11 and Office 365 Unified Messaging integration today.  A couple quick notes to help you out:
  • It's recommended to use Search for Hosted Exchange Servers.   
  • The Active Directory DNS Domain Name has been outlook at the last few sites I've dealt with or deployed.
  • The username to access Exchange must be in the format.
  • As usual, Unity Connection errors can be misleading.  Here we were being returned a "Searching the network Failed to locate a Domain Controller via DNS." error.  Despite looking to be a network access or name resolution problem, it's actually a symptom of a bad password on the Exchange access account. 
Good job, Cisco.

Friday, January 29, 2016

Cisco CUCME CLI commands

I don't run into Cisco CUCME systems much anymore and to complicate things the newer model SIP phones aren't accessible through the usual admin GUI.  Notes to self...

To show registered phones:
For SCCP phones use: show ephone registered
For SIP phones use: show voice register statistics

To show the status of phones:
For SCCP phones use: show ephone
For SIP phones use: show voice register all

To create phone config files:
For SCCP phones use: telephony-service | create cnf-files
For SIP phones use:  voice register global | create profile

To show created config files:
For SCCP phones use: show telephony-service tftp-bindings
For SIP phones use: show voice register tftp-bind