Back from the dead

I’m back baby!

It’s been over two months since my last post, I’ve been slacking a lot lately.
I did buy the INE CCIE Voice Ultimate Bundle some time ago, and yesterday I passed the CCIE Voice Written.

Now begins the long and hard road to prepare for the lab, cya life!


UCCX Holiday Script

When you create a UCCX script you have functions for time of day and day of week, but there is no function for holidays.
However you can use an XML file with dates to perform a check against current date to determine if it’s a holiday or not.

It works by first checking current date, then comparing that to the dates in the XML file. If there is no match you can just call your normal script for regular days.

If there is a match, it will check the “tag” to the right of the date, for example Holiday or Halfday. Depending on the match you can trigger another script or play a prompt or whatever you want to do.

My sample script triggers a main script if no matches found. If a match is found with tag “Halfday” it performs a time of day and then triggers the main script to route to agents.

If a match if found but it’s not the tag “Halfday” I assume it’s a holiday and just play a prompt.

Modify the dates according to your needs and save it as Holidays.xml and then upload it as a document to the UCCX.

Note that the date format is day/month/year, you can change it in both the script and the XML document.

<?xml version=”1.0″ encoding=”ISO-8859-1″?>
  <Holiday Date=”1/1/2012″>Holiday</Holiday>
  <Holiday Date=”3/1/2012″>Halfday</Holiday>
  <Holiday Date=”6/1/2012″>Holiday</Holiday>
  <Holiday Date=”5/4/2012″>Halfday</Holiday>
  <Holiday Date=”6/4/2012″>Holiday</Holiday>
  <Holiday Date=”8/4/2012″>Holiday</Holiday>
  <Holiday Date=”9/4/2012″>Holiday</Holiday>
  <Holiday Date=”30/4/2012″>Halfday</Holiday>
  <Holiday Date=”1/5/2012″>Holiday</Holiday>
  <Holiday Date=”17/5/2012″>Holiday</Holiday>
  <Holiday Date=”27/5/2012″>Holiday</Holiday>
  <Holiday Date=”6/6/2012″>Holiday</Holiday>
  <Holiday Date=”23/6/2012″>Holiday</Holiday>
  <Holiday Date=”6/4/2012″>Holiday</Holiday>
  <Holiday Date=”3/11/2012″>Halfday</Holiday>
  <Holiday Date=”25/12/2012″>Holiday</Holiday>
  <Holiday Date=”26/12/2012″>Holiday</Holiday>

Rename the file to Holiday_Check.aef

UCCX 8.5 CAD/CSD Call Recording and Silent Monitoring

There are two types of call recording in the UCCX.

1. Via the traditional VoIP monitor Service: captures packets directly from an IP network switch via the switch’s Switched Port Analyzer (SPAN) configuration.

Cisco Unified CCX does not support using a second NIC for SPAN-Based VoIP monitor. As a result, switches that do not allow the destination port of a SPAN configuration to act as a normal network connection cannot be used to perform VoIP monitor.

2. Via the Cisco Agent Desktop, also known as Endpoint monitoring or the Desktop Monitoring Service: The agent’s IP phone repeats RTP packets to the agent’s PC. When a supervisor wants to monitor/record the agent, the supervisor application sends a message to the agent desktop to forward the RTP packets to the supervisor, who can then monitor the agent/caller conversation via the sound card on his or her PC. This method requires the agent to use the Cisco Agent Desktop (not the IP Phone Agent) and a phone that supports desktop monitoring.

Enhanced or Premium license is required for call recording.

Here’s how you configure Endpoint/Desktop Monitoring Service:

1. Connect the PC running CAD to the computer port on the IP Phone.

2. Enable SPAN to PC port on the Agents IP Phone.
Device -> Phone

3. Disable G722 codec.
System-> Enterprise Parameters

4. Set the recording count on the UCCX.
System-> System Parameters

5. Ensure that monitoring and recording services are started.
Unified CCX Serviceability-> Tools-> Control Center – Network Services

6. Add start and stop recording buttons in CAD using the Cisco Desktop Work Flow Administrator.
Work Flow Groups-> X-> CAD Agent-> User Interface-> Toolbar-> Task X-> Add -> Utility Action -> New

7. Add the Workflow created in the previous step to the Agents.
Cisco Desktop Administrator-> Personnel-> Agents

8. Assign VoIP Monitoring Device to the Agents.
Cisco Desktop Administrator-> Service Configuration-> Multiline, Monitoring & Recording-> VoIP Monitoring Device

9. You can configure monitor/recording notification, Supervisor Barge In/Intercept etc under:
Cisco Desktop Administrator-> Service Configuration-> Multiline, Monitoring & Recording-> Display Settings

10. Install CAD on the Agent PC.

11. Goto C:\Program Files\Cisco\Desktop\bin\PostInstall.exe

Click OK at the first screen showing the UCCX server(s). Click on VoIP Monitoring Service and  select the IP address of the NIC that’s connected to the IP phone.

12. If you are running tagged voice VLAN your NIC must be able to handle tagged frames. Most newer NICs supports this but you might have to enable it in Windows.
Settings menu for the NIC-> Advanced-> Priority and VLAN enabled.
List of tested NICs: 

The Agent recordings are saved on the UCCX Server and only the Supervisor can listen to them from the CSD. Recordings are saved for 7 days, you can also mark them as extended and save them for 30 days.

Don’t forget to open the correct ports if you have a firewall.


Always-on MeetMe with password protection

In this post I will show you how to configure multiple password protected MeetMe conference bridges that are always on/open and does not require the user to initiate it from his/her IP Phone.

I’m assuming you know your way around UCM, CME and UCCX, and how to route calls in/out, class of service etc. This information is just the specifics for this topic.

Here’s what you need:

– UCM and or CME running at least 8.0 with DSP resources.


Starting with CME version 8.0 (IOS 15.1(1)T) there is a new features called MeetMe Unlocked. This allows you to configure a conference bridge that’s always on/open. This feature is not available on the UCM. There you still need to start the MeetMe bridge from an IP Phone.

While it’s possible to mix the conference bridge in software, it only supports G711 and 3 participants. I’m using a hardware conference bridge that supports 16 participants in each bridge with different codecs.

Note: The MeetMe numbers in the config below are just  dummy numbers that the UCCX transfers users to. You should ensure that users cannot dial these numbers directly.

Users will hear a beep when participants are joining or leaving the bridge. This is configured with the conference custom-cptone.

voice-card 0
dsp services dspfarm
voice class custom-cptone conf-join
dualtone conference
frequency 400 400
cadence 150 50 50
voice class custom-cptone conf-leave
dualtone conference
frequency 300 300
cadence 150 50 50
sccp local GigabitEthernet0/0
sccp ccm identifier 1 version 7.0
sccp ccm group 1
associate ccm 1 priority 1
associate profile 1 register MEETME_CFB
dspfarm profile 1 conference
codec g711alaw
codec g711ulaw
maximum conference-participants 16
maximum sessions 5
conference-join custom-cptone conf-join
conference-leave custom-cptone conf-leave
associate application SCCP
sdspfarm units 1
sdspfarm tag 1 MEETME_CFB
conference hardware
max-ephones 10
max-dn 10
ip source-address port 2000
transfer-system full-consult
ephone-dn  1  octo-line
number 1111
conference meetme unlocked
ephone-dn  2  octo-line
number 1111
conference meetme unlocked
ephone-dn  3  octo-line
number 2222
conference meetme unlocked
ephone-dn  4  octo-line
number 3333
conference meetme unlocked

Ephone-dn 1 and 2 are configured with the same number to allow 16 participants in one bridge.
Ephone 3 and 4 are configured for 8 participants in each bridge.

Router#show ephone-dn conference
type         active inactive  numbers
Meetme          2       14      1111
DN tags: 1, 2
All DN tags unlocked.

type         active inactive  numbers
Meetme          0       8      2222
DN tags: 3
All DN tags unlocked.


I made a UCCX script that prompts the user for Meeting ID and password. If authentication is successful the call is transferred to the MeetMe bridge running on the CME router.

Each Meeting ID and password is a variable that’s set as a parameter. So you set/change each Meeting ID and password from the Application webpage.

You need to record your own prompts for this script. I have defined each prompt and if you just record each prompt as I have named it you should be able understand all messages.

Download the script below, rename it to MeetMe.aef


1. User calls the conference DID number from the PSTN.
2. The UCM has the number configured as a CTI Route Point that points to the UCCX trigger number.
2. The UCCX MeetMe script starts and prompts the user for Meeting ID and password.
3. Authentication is successful, the UCCX makes a call redirects to the dummy MeetMe number on the CME.
4. User is placed in the conference bridge and a join tone is played.
5. User leaves the bridge and a leave tone is played.


Handle meeting ID and password in an XML file. However it’s easier for users to manage id/pwd from the application page.

Add meeting administrator code that opens and closes the bridge by writing to an XML file. If the bridge is closed put users on hold until it’s open.

I have no idea how to automatically close the bridge however, also it would be nice to allow the users to record their name and play it to the bridge, but the supervised transfer does not allow you to play prompts.

Cisco Jabber for Windows custom EDI config file

Here’s a sample config file if you want to use custom parameters in EDI mode in Jabber for Windows.

First we specify EDI as Directory Server Type.
Connection type is set to 1 = Connect to a Domain Controller server.
Primary AD server IP is
Server port is 389.
Use Windows Credentials is disabled by setting it to 0.
Username and Password is specified to be used when connecting to the AD.
SSL is disabled by setting it to 0.
Secure Connection is enabled to encrypt all data including authentication and query data. It seems backwards but according to Cisco 0 enables it.
Search Base is specified for specific container and DC lookup.
Business Phone is set to ipphone instead of the default telephoneNumber.
Contact photos are grabbed from a web server and sAMAccountName is used to substitute the filename.

All other LDAP attributes that you don’t configure are set to their default values as specified here: 

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

Setting up Cisco Jabber for Windows

Cisco finally released Jabber for Windows, It’s intended to replace both WebEx Connect and CUPC.

Some new features are introduced such as file transfer, desktop sharing, screen capture tool and the ability to use the Callmanager instead of LDAP for user lookup.

Cisco has moved some of the client configuration from the Presence server to a jabber-config xml file.

Basic presence stuff, visual voice mail, CCMCIP, CTI Gateway profile, Audio profile etc is still done in the Presence admin GUI.
Directory Integration, deskphone/softphone credential source, client policy such as file transfer, video, screen capture etc is configured in a jabber-config xml file.

When it comes to Directory Integration for user lookup there are two options, EDI and UDS.

EDI – Enhanced Directory Integration requires no configuration by default. If you install Cisco Jabber for Windows on a workstation that is registered to an Active Directory domain, Cisco Jabber for Windows automatically discovers the directory service and connects to a Global Catalog in the domain. However, you can configure EDI to specify custom attribute mappings or custom connection settings.

UDS – User Data Service is an interface in Cisco Unified Communications Manager that makes contact information available to Cisco Jabber for Windows.

No server configuration is required for UDS. You create your directory source in Cisco Unified Communications Manager and then synchronize the contact data to Cisco Unified Communications Manager. After the synchronization occurs, your contact data resides in Cisco Unified Communications Manager. Cisco Jabber for Windows then automatically connects to UDS and performs all contact resolution.

UDS contact photo retrieval is done from a web server.

Supported directories

  • Microsoft Active Directory 2003
  • Microsoft Active Directory 2010
  • Cisco Unified Communications Manager User Data ServiceUDS is supported on Cisco Unified Communications Manager 8.6.2 or later.

In this post I will go through how to configure Jabber for Windows in an on-premise Presence environment.

CUCM 8.6.2

1. Download the Jabber for Windows install file and the admin files from Cisco.

2. Install the cmterm-bfcp-e.8-6-2.cop.sgn file on the publisher. Restart the server when it’s done.
This COP file enables BFCP support for CSF devices which is required for desktop sharing.
Note: this step is not required for 8.6.1. 

3. Create a new SIP Profile, Device-> Device Settings-> SIP Profile. Copy the Standard SIP Profile, name it CUPS SIP Profile and check the Allow Presentation Sharing using BFCP.

4. Create a Client Service Framework Device. This is the softphone/desktop sharing used in Jabber for Windows.
I usually name it CSFuserid. Add your standard CSS, Loc, DP as you would on any other phone.
If the user has a deskphone select it under primary phone. This way adjunct licensing is used to save DLUs.
Check Allow Control of Device from CTI.
Select the SIP Profile created in the previous step.
Check the Allow Presentation Sharing using BFCP.
Note: Device name has no correlation with username but for convenience you might choose to include a username in the device name.

Add a DN to the line, be sure to associate the end user to the line to enable on/off hook presence status.

5. Assign CUP and CUPC license capabilities to your end user under System-> Licensing-> Capability Assignment
This is to enable so that you can login with the client and to see/publish presence status.

6. Goto the end user page. Add the CSF device and any deskphones to the end users device associations.
This is so you can use these devices in the Jabber for Windows client.

Add the Standard CTI Enable group.

If the user has a Cisco Unified IP Phone 9900 or 8900 series model phone, also select the following group: Standard CTI Allow Control of Phones supporting Connected Xfer and conf user group.

If the user has a Cisco Unified IP Phone 6900 series model phone, also select the following group: Standard CTI Allow Control of Phones supporting Rollover Mode.

7. Create the jabber-config.xml global configuration file.
The following config file enables screen capture, file transfer and video. Potentially malicious files are blocked for file transfer such as exe, msi etc.

UDS is specified to use the Callmanager as user search database. A web server is defined to fetch contact photos. %%uid%%.jpg is substituted with the userid in the Callmanager. eg http://server_name.domain/rwiklund.jpg

Phone service credentials is set to use the same username and password used in Jabber for Windows.

Note: this file must be saved in UTF-8 format.

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

7. Upload the file to all TFTP servers, be sure to restart the tftp service on Pub/Subs.

CUC 8.6

1. Class of Service -> Voice Mail User COS -> Check the following
– Allow Users to Access Voice Mail Using an IMAP Client and/or Single Inbox
Optional: Select what types of messages you want to be secure from the “Require Secure Messaging” drop down menu.

2. Add your VM account and be sure to set the web password, this is used for Visual Voice Mail in Jabber.

Note: The user ID in Cisco Unity Connection does not need to match the user ID in Cisco Unified Presence or in the client application. The client application has an independent voicemail ID, which is set in the application Options dialog box. However, you might find it useful to have the same user IDs across your Cisco Unified Communications system.

I recommend using LDAP SYNC+AUTH on both CUCM and CUC to keep end user credentials consistent. 

CUPS 8.6

1. Application -> Jabber -> Voice Mail server -> Add New
Add your Unity Connection server here.

2. Application -> Jabber -> Mailstore -> Add New
Enter name and IP address of Unity Connection server. Use port 7993 and TLS protocol.

3. Application -> Jabber -> Voice Mail profile -> Add New
Add your Voice Mail profile here. Enter your Voice Mail pilot number, Voice Mail server and Mailstore. 

4. Application -> Jabber -> CCMCIP Profile -> Add New:
Add name, description, primary and backup CCMCIP server (I.E Publisher and Subscriber).
Note: This is used to pull information about associated devices for end users.

5. Application -> Jabber -> Settings
Here you can select Credential source for Voice Mail service. If you select CUP, username and password for VM will be pulled from the CUCM.
If you select “Not Set” you will have to manually specify Voice Mail username and password in the Jabber client option page. If your Vocie Mail credentials differ from the CUCM end user credentials chose this option.

6. Application -> Jabber -> User Settings
Select the end user and add your profiles for Voice Mail, CCMCIP, CTI Gateway, etc.
Note: Selecting an LDAP profile here has no effect on Jabber for Windows.

Jabber client

Start the Jabber client, you will be prompted to use WebEx Connect or Presence. Chose Presence and enter the IP address to the server, you must also enter the domain that’s configured on the Presence server.

Because we have phone credentials set to presence in the xml config file you don’t need to enter the username and password to control the softphone/desktphone. The same goes for voice mail because we set the voice mail credentials to CUPS in the Presence admin GUI.

That’s it, you’re good to go.

Note: Desktop sharing can only be turned on when there’s a call in place and only when using softphone mode.

Exchange Outlook Calendar integration.

Outlook calendar integration works the exact same way as before and I already covered that in a previous post. However I cannot find a way to enable/disable calendar integration from the client itself. It seems that the user has to do it from the Presence end user page.


It seems that click to dial is missing from this release. Click to email from the client is not available either.
If you create a customer away message, AFAIK there is no way to delete it, only change it.
Clear chat history seems to be missing, and there is no way to clear the call history all at once, you have to clear each post individually.

I have not tested the Office integration yet.