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 :-)

Wednesday, May 16, 2012

Unreachable Goal Satisfied Customer

Jaroslav Orság
Technology Consultant 

How (Not) To Throw Away Customers’ Money

A majority of software development projects end in disaster. Deadlines are not met. Useful features are not developed.

If you are using custom software solutions, then you probably know how difficult it is to force the software vendor to deliver THE RIGHT THING.

I’m leading a team that is working on an upcoming version of the 2Ring CA (CALL ACCOUNTING) application. This long-term project could end in disaster if it is not properly managed.

I will describe several key benefits of using agile methodologies during the development of 2Ring CA. These methodologies help us satisfy customers in many direct and indirect ways. Most importantly, it helps us not to throw away customers’ money.

Get feedback on time with short development cycles

Agile in our case means iterative. First, I divide my application into several small parts – increments – and deliver these parts separately. An increment must be something meaningful for the customer, something he can simply use, such as GUI for user management.

One of the biggest advantages of this approach is that you have continuous feedback from those that will use the product. They know best what the system should do.

By having this valuable feedback, you can find out soon if you are developing bad software or features that are not so important while important features are waiting somewhere in the queue. With this knowledge, you are able to adapt to real customers’ needs.

Do not develop useless features, do frequent planning and priority checking

64% of features developed are never used. That’s why I emphasize prioritization.

I organize the planning meeting at the beginning of each iteration. The best is when customers directly specify their needs. Developers should not be responsible for setting the priorities because they usually do not concentrate on business priorities.

I work with features as with tangible physical artifacts. My team uses A4 papers for features and post-it notes for tasks. We put all the features we would like to implement on a table. Developers can then break down features into tasks or divide one feature into two features. Customers can easily change priorities.

The final goal of the meeting is to order the features by priority. Priorities are set by physically ordering the features, which is really convenient. Really – try it! Then, with such an order defined, it is very easy to decide which feature to implement next.

Make your project more transparent by using a visible physical task board

We also started working with a physical task board. Why?

Here are THREE important reasons:
  1. The plan is a physical tangible artifact
  2. It creates interactive communication with the team
  3. Team members are motivated to resolve tasks
Most of my team members today believe that having such a visible plan really makes a difference. Plus, as a bonus, my BOSS is very happy when looking at the physical task board because he knows what is happening with the project.

The last note

I believe that the key to the success of a software development project is how you adapt to a changing environment, such as new requirements and estimations or new problems nobody knew about at the project’s start. Agile methodologies were developed with this in mind. Instead of trying to avoid changes, they embrace changes.