Monday, June 11, 2012

How To Customize Agent Desktop Within a Day?


Contact Centers

The upcoming major release of the AgentDesktop takes a big step towards effectivity by embedding a Python scripting language engine. Usually it takes ... (days, ) 


As the user of many software applications I have wished many times "what if this application could also do THIS or perform THAT in a little bit different way"? Software users often have their specific needs regarding the particular software functionality but such feature requests usually fall below the threshold of interest of a software vendor. That's not necessarily a bad thing because those needs are usually too specific and it would be ineffective for the big software vendors to handle such requests.

That's where flexible companies like 2Ring shine when we are willing to implement such feature requests and in a relatively short time. The customization ability - that is in my opinion the biggest value the 2Ring AgentDesktop brings to the table. 

Welcome Python to the stage

One of many benefits of the AgentDesktop application while making the workflow of an agent in a contact center easier is the ability to integrate miscellaneous customer's enterprise applications into one agent-centric interface. Customers usually have very specific requests regarding the customization and integration of AgentDesktop with their applications or internal systems. Many of such requests can be handled by AgentDesktop's predefined set of "CustomActions" which can be specified in the application's configuration without the need to change the application's source code. Because the CustomActions have some limits there are many customer's feature requests that can't be handled by simply configuring a specific CustomAction.

Examples of such real world customer's requests include:
  • Sending http GET/POST request to a specific web server including JSESSIONID obtained from the integrated browser's cookie.
  • Generating specific CallID (a unique call identificator) for every call and storing it into call context for later processing.
  • Transfer a call to a predefined number triggered by a click on a custom button.
Such customer specific requests can be implemented effectively by short Python scripts without changing the application's source code and therefore very quickly. When creating a new feature using a Python script only the sky is the limit. The script creator is able to define any complex behavior most likely in a few tens lines of code. The power of mature, stable and very well documented Python language together with the large amount of ready-to-use Python libraries and community support drive the easiness of such changes. Expressiveness and concise syntax of Python make the scripts readable even for non-programmers.


The script to perform automatic navigation to a client's page in some CRM application during received inbound call can be as short as that:

def onCallDelivered(args): 
    currCall = agd.CtiosSession.GetCurrentCall()
    ani = currCall.GetValueString("ANI")
    url = "    

When the customer later decides it makes sense to redirect to CRM page only the calls from the phone numbers starting with "099" the script change could take less than one minute by adding the condition:

def onCallDelivered(args):
    currCall = agd.CtiosSession.GetCurrentCall()
    ani = currCall.GetValueString("ANI")
    if ani.startswith("099"):
       url = "

No need to build a new release of AgentDesktop, just to send the updated script file to the customer. Quick change, quick deployment.


The newly introduced scripting support in the AgentDesktop should have a good impact on productivity on both sides, i.e. on a customer and on 2Ring as well. Its advantages are obvious:
  1. Short time to market - new features or customizations are usually very quickly implemented.
  2. Versatility - scripting languages have broad range of readily available libraries.
  3. Suppressed "pollution" of core codebase by one-time changes driven by very specific customer needs - minimalized risk of new bugs caused by the change.
  4. Extremely easy and fast deployment of new features - no need to reinstall the AgentDesktop application.
When somebody would ask me "what exactly brings this scripting thing to me?" the answer would be:

More flexibly and quickly meet even unusual customer's needs. Well, at least those related to the computer telephony integration :-)