{uccx scripting: after hours transfer automation}

Product: UCCX 8.x + with Enhanced License or better
Scenario: During after hours, you want to have the ability to automate the process of assigning the Representative who will answer the calls. The rotation occurs every week; the on call assignment/duration is MON-SUN.
Problem: I’m quoting someone who commented on a potential method of setting up an automated way of doing this: “You are right but it doesn’t work the way I’m thinking. Such as an on-call rotation. Still need to Manually hit a button.” What I’m demonstrating here solves that very statement…but with UCCX…
Disclaimer: There are a few other ways to do what I’m about to demonstrate, which have in fact been demonstrated on the Cisco technical support forums..If you use this script you use with limited support, but I do love to answer questions especially when it involves solving a puzzle..Obviously if this script isn’t abstracted enough for your use and you don’t understand that IF Step(you will come to see shortly 🙂 then you may find yourself in trouble if you use this.
Continue reading

{uccx tips & tricks: more dates part 2}

Product: UCCX 8.x + with Enhanced License or better
Scenario: For whatever reason, you want to have the ability as a script writer to get Today’s Date (that’s easy enough), Yesterday’s Date, and Tomorrow’s Date then we will Create Generated Date Prompts out of them that only play Month Day and not the Year.
Tip/Trick: Demonstrating the power of the Expression Editor when using a bit of Java code to get stuff done. (This could be said of a lot of the tip/tricks I like to write).
Disclaimer: There are a few other ways to do what I’m about to demonstrate, which have in fact been demonstrated on the Cisco technical support forums..
Continue reading

{cisco api series: updating phones with owner user id}

*Update: The version of the requests library I used in this post was 2.2.1. Recently 2.5.0 was released (http://docs.python-requests.org/en/latest/) which seems to have broken SSL Self-signed certificates (blindly trusting the verification of a lab box). You can “downgrade” requests using Easy_Install:

#From OS X Open Your Terminal and perform the following
sudo easy_install uninstall requests
sudo easy_install https://pypi.python.org/packages/source/r/requests/requests-2.3.0.tar.gz
#On Windows from a CMD Line
easy_install -m requests
easy_install 'URL from ABOVE'

Product: CUCM 9.x – 10.x (this script was tested on CUCM 10.5 using the 9.1.x AXL ToolKit)
Scenario: You are on the other side of a Communications Manager from 6.x – 8.x upgrade to 9.x-10.x. Users in CUCM have appropriate Devices Associated with his/her UserId, but the OwnerUserId is not populated on the Phone itself.
Problem: Reconciling User Licenses in 9.x/10.x (ELM/PLM) in order to not be penalized with “less” licenses if/when we deploy Jabber and/or other services for our Users. By default, if you do not “associate” an OwnerUserName with a Device, you only consume a UCL Enhanced License which only allows an “associated user” to have 1 Device, meaning, no Jabber, etc etc devices can be added later for the “user” without purchasing appropriate licenses (again potentially).
Disclaimer: I take no responsibility and/or necessarily provide support for your consumption of this script, so Use at your own peril..and if you do use it, test run it in a lab environment first. This script does 2 things and does them well: It loops through (all) end users (not application users), populates all their controlled device associations and then updates all those devices with an appropriate ownerUserName; it also has the ability for Exclusions of end users (possibly admins who control devices that really aren’t theirs..such as the phone view user if not an application user).
Requirements: Python 2.7, Requests and LXML Libraries, a little programming knowledge is good as well. Watch how to video?

Continue reading

{installing python and easy_install on win7}

Mac(book) owners shouldn’t feel left out; Python 2.7.6 and easy_install already came preinstalled with your machine..install requests or lxml using Terminal:

sudo easy_install requests

Windows 7 Folks follow the links below:
Download link for Python:
Download link for ez_setup.py/EasyInstall:

I recorded a video that more or less captures the entirety of the process in just a couple of minutes..let me know how it goes..And Watch in full screen for full quality:


{ccx script tips & tricks: agent rna => vm}

Product: UCCX version 8.x-10.x (but probably applies to 7.x and below as well)
Scenario: A call is transferred to an Agent, but the Agent does not answer the call so a Ring-No-Answer condition occurs which sends the call back into the CCX Script for processing. The call center supervisor wants all conditions that Match this Scenario to transfer the calls to a general delivery mailbox.
Problem: Number 1: If the UCCX System Parameter for Agent RNA automatically returns an Agent to READY, then the call could get stuck in a loop with the same “unavailable” Agent continuously. Number 2: Our customer’s requirement is asking that after an Agent RNA All Calls “Automatically” Transfer to a General Delivery Mailbox for the Group.

Hope that isn’t confusing. Ultimately, this post will spawn 2 videos. From a verbiage standpoint, I think this will be fairly brief however. The first order of business with the Select Resource Step is to ensure that it doesn’t “Connect” as soon as an Agent becomes available (we need the spacing this causes when we do it that way), but as part of this particular setting, it does force us to create a new User variable as you can see this below as uAgent; another tip, if you didn’t already know the Timeout below is the Default RNA timeout, of course when using the step as below that timeout doesn’t work..you would have to set that timer on the Connect Step that must be added to coincide with this particular setting in the select resource step:

Continue reading

{uccx scripting tips & tricks: valid date checking}

Product: UCCX version 8.x-10.x (but probably applies to 7.x and below as well)
Scenario: A Caller is allowed to enter a date into the keypad of his/her phone (for example, a payment date, date of birth, etc); The Caller enters and Illegal Date like June 31st
Problem: If no error checking is performed and the String (Get Digit String) is converted to a Date using auto conversion of a CCX Set Step the application will throw an exception and the caller will hear the Error Message. (I may repeat this below because this is a new thing I’m adding to the tips/trick posts.)

If you are new to my blog, then you may not know that my day job is more or less as a Cisco Contact Center Express IVR application developer; you can read a small piece I wrote concerning the development of UCCX apps here. In this post of tips and tricks about developing on top of UCCX, I want to show you a method to validate a date without the potentiality of having an Exception thrown in your Application. If you’ve ever develop an IVR application, you’ve probably had some sort of Date input in your application such as a caller entering their Date of Birth, date they want to pay a bill, and/or date they want to go somewhere (think schedules for planes, trains, automobiles, and even ferries/boats). As a note, your UCCX system should have at least an Enhanced IVR Port/CCX seat license. Let’s look at an example that encounters a problem if used on the system (think of the string as been given its value when a caller entered the digits on a keypad).

String sDt = "01672014" //You are Reading Correctly
//This is a Set Step in the CCX Editor
Set date = sDt
//Unfortunately Your Caller Just Got The
//System Error Message and Can't Continue

Continue reading

{cisco api practical usage series}

Eventually I will find a Blog Series that I can Stick with. A good example of a series that has been spectacular is Will Bell’s SQL Query Series; if you want to learn some neat tricks with pulling records from the CUCM Database while getting a better understanding of how SQL Statements work and how the Fields within a Table of a Database relate with other Tables YOU WILL WANT TO CHECK IT OUT! Sorry for the caps there but you really need to check out his blog..I can only hope this blog can evolve into something like what he has created on his blog.

Today though is just an announcement..and I hope that it will be well received. As the title might denote, I will be casting a wider net when it comes to how I demonstrate Cisco DevOps; I want to “show off” a wider expanse of Cisco technologies..and I will be able to do it by utilizing the Cisco Developer Sandbox and I encourage you to join me! One, the more who have the ability to use this Sandbox the better the environment will become especially when we provide feedback on how some things may need to be set up and Two we’ll just geek out on code and junior mints perhaps..and we can collaborate in Shared Labs..

Since this is a generically titled post, I shouldn’t have any issues keeping the series going. In fact if you look at the Menu of my site, you should already see an option there that says Cisco API Series. And I’ve already interfaced with a few APIs as you will see there (all collaboration based apis): CUCM AXL, Cisco Unity Connection REST API, and Contact Center Express REST API; hopefully soon I will move onto technologies such as CMX (from the Sandbox when it becomes available), APIC-EM, IoT Controllers and Sensors, et al. If you ever visit developer.cisco.com you might notice that there are code samples available, however, they aren’t entirely consumable out of the box. What I want to provide here are practical usage guides along with the Source Code, so you can experiment yourself and come up with your own brilliant ideas of how to use the technology being dealt with. I also want to post stuff on GitHub where it can be forked and further collaboration on the Source Code can be performed. The next several posts are more than likely going to be UC Collaboration based, but I will get to the REST of the APIs very soon..

Let me know what you want to see? I’m open to requests, but remember I may not even know the technology you are asking me to post on..so it might take some time..plus, the technology may not be quite ready in the Sandbox. And, it’s probably better to keep things short…for the posts…and collaborate further in other spaces..I don’t quite know what those other spaces are yet..but I’ll come up with something..or perhaps I can encourage the setup of something that is brewing in the back of my mind…

return sam;