Monday, 22 December 2014

Jabber IM Chat Log

The best way to log IM chats for Jabber is to use the server side chat logging to a PostgreSQL database, but for those of you who haven’t deployed this feature there is a limited workaround for getting at a user’s chat history...

Jabber for Windows will create a history of the last 99 messages in an IM conversation. When a conversation reaches 100 messages the client will loop and overwrite the history. The IM history is stored in a local database file in the user’s local machine profile:

C:\Users\[userid]\AppData\Local\Cisco\Unified Communications\Jabber\CSF\History

The .db file is simply an SQLite database file, and can be opened in any SQLite editor, such as DB Browser for SQLite.
Look at the history_participant table to find usernames in the jid field, if there are multiple entries with the same number in the item field then these are the conversation participants.
The history_item table lists details of a particular call/conversation, the item field from the history_participant table identifies the id in the history_item table.
The history_message table contains IM messages (with HTML tags) in the payload field, the date & sender fields let you identify when & who sent the message. The item field links to the id field from the history_item table and the item field from the history_participant table.

Thursday, 20 November 2014

Jabber SIP URI Dialling Check List

Quick check list for enabling calls to SIP URIs in Jabber:

  1. In LDAP Directory configuration set Directory URI to "mail" (i.e. use email address for URI).
  2. Configure a SIP Profile for use by Jabber with "Use FQDN in SIP requests" & "Allow presentation sharing using BFCP" enabled. Any SIP Trunk carrying URI calls will also need a SIP Profile with "Use FQDN in SIP requests" enabled.
  3. In Enterprise Parameters set the Organisation Top Level Domain & Cluster FQDN (e.g. & *
  4. In Enterprise Parameters set the Directory URI Alias partition.
  5. In CallManager Service Parameters check that SIP Max Incoming Message Size is >= 11000.
  6.  On the SIP trunk to the VCS Control/Expressway-C set Calling and Connected Party Info to "Deliver URI and DN".
  7. In jabber-config.xml under <Policies> put <EnableSIPURIDialling>true</EnableSIPURIDialling> & <DirectoryURI>mail</DirectoryURI>.

Friday, 7 November 2014

Alphanumeric SIP URIs for Rendezvous Conferences

  • Refer to the Cisco Unified Communications Manager with Cisco Expressway (SIP Trunk) Deployment Guide for the underlying configuration required to get SIP trunks/neighbour zones configured between CUCM & the Expressway-C or VCS-C.
  • Refer to the Cisco TelePresence Conductor with Unified CM Deployment Guide for the underlying configuration required to integrate TelePresence Conductor & Server with CUCM.

The combination of TelePresence Conductor & Server integrated with CUCM allows both ad hoc and rendezvous video conferences. However there are some limitations in that currently (CUCM v10.5) can only handle alphanumeric URIs on directory numbers. To direct calls to TelePresence Conductor requires using route patterns, which have the following limitations:
  • Route patterns only handle simplified regular expressions for phone numbers, so you can't specify an alphanumeric string.
  • SIP route patterns work on IP addresses or domain names (e.g. or so you can't specify a whole URI such as
To get round this you can create unassigned DNs with a directory URI configured, that then call forward all to the appropriate route pattern to reach a conference. This has the advantage of requiring no additional equipment and minimal configuration.
However if you have Expressways or VCSes you can offload the call routing to them instead and thus use a proper SIP URI to dial into rendezvous conferences. This way allows external participants to join without ever having to hit CUCM for call routing, but requires more configuration.

Configuration Overview 1
First create a DN, as it is unassigned make sure that active is ticked:

Don't forget to fill out the appropriate directory URI & then set the call forward all destination to the route pattern that directs calls to TelePresence Conductor:
Now you can join a rendezvous conference via numeric dialling or SIP URI.

Configuration Overview 2
First configure a SIP neighbour zone on the Expressway-C or VCS-C with all the CUCM servers as peer addresses:

You'll need a DNS A record that resolves to the TelePresence Conductor's rendezvous IP address so that we can configure a neighbour zone to the Conductor:

Note that if you have TLS verify mode on, the Conductor's certificate must have the rendezvous FQDN as a Subject Alternate Name (SAN); it's easiest to just turn TLS verify off.

Next configure a wildcard (*.*) SIP route pattern in CUCM pointing to the Expressway-C to direct calls to unknown URIs to it via a SIP trunk:

Now we need a search rule on the Expressway-C or VCS-C to direct calls to the rendezvous URI to the Conductor:

Finally Conductor needs a suitable conference alias to create or add participants to a rendezvous conference:
By also having a numeric conference alias that shares the same conference name as the alphanumeric alias, we can allow phones that can't dial URIs to also join the same conference via dialling a pilot number.

Friday, 24 October 2014

8941/8945 Firmware Upgrades

Got the lab 8945 out of the cupboard today to register it to a CUCM 10.5 server, unfortunately it kept seizing up during the firmware upgrade - the display would show "upgrade in progress" & the phone is totally unresponsive. Turns out you can't upgrade 8941/8945 phones to firmware version 9.4(1) or later unless you're running 9.3(4). The firmware release notes do actually state this important fact, so remember always read the release notes when upgrading phone firmware!

Tuesday, 21 October 2014

Ordering Personal MultiParty & Expressways

Cisco have started bundling some nice new toys at no extra charge if you have valid ESW & UCSS contracts in place. CUWL Pro users get Personal MultiParty, which is a combination of TelePresence Conductor & TelePresence Server to enable 4 participant video conferences. All licence levels (UCL Essential aside) get Expressway-C & Expressway-E virtual machines to enable Mobile and Remote Access for Jabber.
Unusually for existing deployments you don't use PUT to request the relevant install media & licences, instead you must place orders for zero cost items with your Cisco Partner.
The top level part codes that can be used are:
  • L-CUWL-MISC for Personal MultiParty
  • R-UCL-UCL-LIC-K9 for Expressways
An example bill of materials for 50 users Personal MultiParty & 4 Expressways (so they can be clustered) looks like this:

1.0    L-CUWL-MISC    Unified Workplace Licensing - Top Level -  Misc Addon Only        x1
1.0.1    CON-SES4-CUWLMISC    SC ESS ADV SAS Unified Workplace Licensing-Top Level        x1
1.1    LIC-PM-V-USRA-UWL    Personal Multiparty Video for Virtual Machine            x50
1.2    LIC-CNDTR-PMP-K9    Conductor License for Base Encrypted Software Image        x1
1.3    LIC-VTS-PMP-INTOP    Order L-VTS-UPG-PAK for e-Delivery Virtual TS Interop Lic    x2
1.4    LIC-VTS-PMPUWL-1SL    Cisco TelePresence Server Resource License            x10
1.5    LIC-VTS-PMP-PAK    PAK for e-Delivery Virtual TS Lic                    x1
1.6    VMCNDCTR-PMP-K9    Virtual TelePresence Conductor  supports Personal Multiparty        x1
1.7    SW-VTS-V4.X-PMP-K9    Software Image v4.X for Virtual TelePresence Server        x2
1.8    LIC-AES-VTS-PMP-K9    AES and HTTPS option for VTS                    x2
1.9    LIC-CNDTR-PMP-B30    Conductor license support up to 30 bridges            x1
1.10    LIC-CNDTR-PMP-CL    Conductor clustering support                    x1
1.11    LIC-VMCNDTR-PMP-PK    PAK for virtual Conductor                    x1
1.12    SW-CDTR-2.X-PMP-K9    Cisco TelePresence Conductor base software image v2.X        x1
1.13    LIC-VTS-PMP-K9    Cisco VM TelePresence Server Release Key                x2
1.14    VTS-PMP-K9    Cisco VM Telepresence Server                        x2
1.15    LIC-CNDR-PMP-C2400    Conductor 2400 call sessions license                x1
2.0    R-UCL-UCM-LIC-K9    Top Level SKU For 9.x/10.x User License - eDelivery        x1
2.0.1    CON-ESW-RUCLUCK9    ESSENTIAL SW Top Level SKU For 9.                x1
2.1    EXPWY-VE-C-K9    Cisco Expressway-C Server Virtual Edition                x2    CON-ESW-EXPWYVEC    ESSENTIAL SW Cisco Expressway-C S                x2
2.2    EXPWY-VE-E-K9    Cisco Expressway-E Server Virtual Edition                x2    CON-ESW-EXPWYVEE    ESSENTIAL SW Cisco Expressway-E Server Virtual Editi        x2
2.3    SW-EXP-8.X-K9    Software Image for Expressway with Encryption Version X8        x1
2.4    LIC-EXP-E-PAK    Expressway Series Expressway-E PAK                    x1
2.5    LIC-SW-EXP-K9    License Key Software Encrypted                        x4
2.6    LIC-EXP-GW    Enable GW Feature (H323-SIP)                        x4
2.7    LIC-EXP-SERIES    Enable Expressway Series Feature Set                    x4
2.8    LIC-EXP-TURN    Enable TURN Relay Option                        x2
2.9    LIC-EXP-E    Enable Expressway-E Feature Set                        x2
2.10    LIC-EXP-AN    Enable Advanced Networking Option                    x2

To enable video calls through the Expressways requires Rich Media Session licences to be installed on every Expressway (both C & E). Simply add LIC-EXP-RMS under the options for the Expressways, each licence equates to 1 sessions, so select the quantity based on the of calls you want through each one.
Finally note that you have to be careful when redeeming the PAK codes you receive as LIC-EXP-E-PAK & LIC-VTS-PMP-PAK will have multiple licence quantities attached that will need to be fulfilled against different serial numbers to receive the option keys.

Thursday, 25 September 2014

Bulk Updating Primary Extension

As part of renumbering a large number of DNs I recently ran into weird issue whilst using the BAT tool to bulk update the primary extension on end users. Having renumbered all the directory numbers using BAT & then trying to update end user's primary extension to match their new number kept failing. The BAT error report showed the error below for each user that it failed to change the primary extension:

19081 Can not change the fkNumPlan field on EndUserNumPlanMap

As both the new & old DNs exist there shouldn't be a problem, updating the primary extension to a non-existent number produces the error message below:

WARNING : PRIMARY EXTENSION : 6701 in Internal does not exist. If all other values in the CSV are correct, then user will be inserted/updated without primary extension.

However it wouldn't update the primary extension until I'd deleted the old DNs, after having done that the BAT update worked just fine. So for CUCM 9.1.2 at least, the order of operations for bulk renumbering is:

  1. Use BAT to update phones & their DNs
  2. Delete old DNs
  3. Use BAT to update user's primary extension

Wednesday, 17 September 2014

Unity Connection Cluster Upgrades

Seeing as this tripped me up the last time I did it, here's the correct order of actions for upgrading a Unity Connection HA cluster:
  1. Confirm database replication is OK & cluster is functioning
  2. Upgrade the publisher but don't switch versions
  3. Upgrade the subscriber but don't switch versions
  4. Switch versions on the publisher
  5. Switch versions on the subscriber
  6. Confirm database replication is OK & cluster is functioning
  7. Install locales if required

Wednesday, 20 August 2014

Jabber Pickup Groups

Cisco recently released Jabber for Windows 10.5 which introduces support for notification of calls to hunt groups & group pickup capability. However these features aren't enabled by default & the Call Pickup/Hunt Group sections in the Jabber Jabber deployment guide don't actually tell you this, nor does the release notes or the advanced functionality guide. To enable these features you need to add some parameters to jabber-config.xml, the deployment guide does list these parameters in the Client Configuration > Configure Users > Policies Parameters > On-Premises Policies section.
Below is an example jabber-config.xml that enable hunt group notification, pickup & other group pickup:

<?xml version="1.0" encoding="utf-8"?>
<config version="1.0">


As per usual, this needs to be uploaded to all your TFTP servers & the TFTP service restarted.

Friday, 18 July 2014

Unity Express Upgrade Failure

Hit an odd error when attempting to upgrade Unity Express 8.5.1 to 8.6.7 where it downloaded part of the files & choked with the error message "Error: Required Subsystem ID e2497725-368d-48b5-a7d5-7f87d889a608 was not found either on Installed or Candidate list.". There's a known bug (CSCtd56585) that causes this error, but Cisco's documentation says the conditions are:

1) Cisco Unity Express was shipped from Cisco with version 7.0.1 or later
2) One of the following upgrades is done
– 7.0.x to 7.1.
– 7.0.x to 8.0.
– 7.1.x to 8.0.x

Given that this was CUE 8.5.1 running on an SRE, it doesn't match the criteria. Fortunately the workaround does still work - use the CUE CLI command software uninstall uid-list 26bd663c-3e5a-43d9-a6c3-5441ce44941b & once it has finished rebooting you can proceed the with the upgrade.

Friday, 30 May 2014

Unable to Transfer Calls on 7900 Series Phones

Recently encountered an issue in 7900 series phones where transferring a call when using a headset doesn't work, this is a confirmed bug in firmwares 9.3(1) SR4 & 9.3(1) SR4.1, full details here. The symptoms are:
  • When a user attempts to transfer a call, the original call is placed on hold, but the user is not able to dial the transfer destination.
  • When a user already has an active call on their phone, they are unable to answer a new incoming call. The original call is placed on hold, and the new call is simply disconnected.
Unfortunately every device pack for CUCM since around December 2013 includes affected firmware, the solution is to roll back to an older firmware or request the engineering special firmware from TAC.

Friday, 21 March 2014

Attendant Console Installation Problems

Installing the Attendant Console usually involves me tripping over one or more of the following problems...

Remote Desktop
The Cisco TAPI driver installation fails to work properly if you're using remote desktop to connect to the AC server. Use VNC, physical or  VM console access to do the installation.

TAPI Driver Configuration Failure
Sometimes despite using VNC or physical access to do the installation, the Cisco TAPI driver fails to be configured correctly. If you open the Control Panel "Phone and Modem" applet & select the Advanced tab there should be "CiscoTSP001.tsp" or similarly named present in the list of Providers. If it's not present you need to click Add & select it from the list, if it's not in this list manually install the Cisco TAPI driver. If you select "CiscoTSP001.tsp", click Configure & none of the settings inputted during the Attendant Console installation are actually present, you'll need to enter them again into the various tabs. If the Timer Settings on the Advanced tab are absent, then use the following:

Synchronous Message Timeout15 seconds
Requested Heartbeat Interval30 seconds
Connect Retry Interval30 seconds
Provider Open Completed Timeout50 seconds

Error -206 When Synchronising to Cisco Unified Communications Manager
The device synchronisation will fail with the following error message:

Error Code: -206
Error Description: The specified table (owneruserid) is not in the database.

This error occurs if your template device has a Subscribe CSS configured, the Cisco AC troubleshooting guide says "To prevent this error, edit the Phone Template Configuration to include an Owner User ID under the Device Information. We recommend that you use the Application User ID allocated for Cisco Unified Attendant Console Advanced for the Owner User ID". However this is incorrect as it isn't possible to assign an Application User as the owner of a phone, therefore the solution is either to have no Subscribe CSS configured or assign an End User (not Anonymous).

CTI Devices Not Registering
If everything looks OK (e.g. application user group membership & device association) but the CTI devices refuse to register, first make sure the Common Device Profile they're using has only IPv4 enabled. Currently enabling IPv6 prevents the AC from controlling the CTI devices.
Sometimes it's also necessary to un-install & then re-install the TAPI driver, you can download the correct version from CUCM under Application > Plugins > Cisco TAPI Driver. See the previous note about TAPI driver configuration.

For any other issues refer to the latest CUAC Advanced Troubleshooting Guide.

Tuesday, 25 February 2014

Jabber for Windows/Mac With Telephone Number as Username

Jabber for Windows & Mac assumes that the sAMAccountName & userPrincipalName in Active Directory provide the correct username. However if in CUCM you're using the telephoneNumber or ipPhone field as the username (which I've seen many times!) Jabber won't work properly. When you view a contact in Jabber the IM address will show the incorrect username, for example instead of
In the days of CUPC you could edit the LDAP attribute mappings in the CUPS GUI, but for Jabber you have to create an XML file to configure the attribute mappings. Assuming you're using the telephoneNumber field as the username, create a file in UTF-8 encoded text file named jabber-config.xml containing the following:

<?xml version="1.0" encoding="utf-8"?>
<config version="1.0">

Upload this file to all your TFTP servers & restart the TFTP service on them. Now when Jabber loads it will download this file & assign the correct LDAP attribute mappings.
There's a bunch of other settings for Jabber that you can only configure via an XML file, fortunately Cisco have released a tool to help automate this process.

Wednesday, 22 January 2014

Useful Debugs

There's a multitude of debugs on Cisco routers, below are some that I frequently find useful for VoIP troubleshooting:

debug ccsip messagesShows the SIP messages being sent & received
debug gatekeeper call 5Shows gatekeeper call processing, including bandwidth requests
debug gatekeeper main 5Shows gatekeeper address resolution, including zone/prefix matching
debug h225 asn1Shows H225 messages being sent & received
debug isdn q931Shows ISDN Q931 messages, including calling & called number
debug rasShows summary of H225 RAS messages being sent & received
debug voice ccapi individual 2Shows a summary of call setup messages regardless of protocol, including calling & called number
debug voip ipipgwShows the CUBE processing, such as when it needs to invoke a transcoder