Writing Your First Avaya Aura Collaboration Environment App

This is my fourth blog article about the Avaya Aura Collaboration Environment. My previous articles were fairly high level in nature and explained what you can do with Collaboration Environment, but didn’t go into a lot of detail about how to make the magic work. In this article, I am going to take you much deeper and introduce you to the process of developing a Collaboration Environment application.

While knowing how to write Java code is certainly helpful in understanding the nitty-gritty aspects of creating Collaboration Environment applications, I will do my best to hold your hand through those parts. Don’t get scared away just yet.

Are you ready? Great, let’s get started.

A word to the wise–you will gain a deeper understanding of this material if you first read through these related articles:

The Avaya Collaboration Environment

Avaya Call Intercept Services

An Introduction to Avaya Collaboration Environment 3.0

First, Collaboration Environment applications are written in Java. Period. If you are a C# programmer, you need to find yourself a good book on Java and get busy learning it. Of course, since Java is the greatest language ever written, this requirement should not be a problem for real programmers.

That last comment was meant to be a joke…mostly.

The development environment for Collaboration Environment applications consists of Eclipse For Java EE Developers and Maven. Both are available as free downloads and are fairly simple to install. Grab the latest tested releases and you will be fine.

Note that Avaya SDK requires that you set a number of Environment Variables for Eclipse and Maven. Please refer to the installation manuals or videos for details on which ones need to be created.

Eclipse is the IDE (Integrated Development Environment) in which you will write all your Java code. For nearly every Java programmer that I know, this should not come as a great surprise. Eclipse has been around for a long time and is a very popular development tool. I started using it over ten years ago and it’s still my IDE of choice.

Maven is used to package and build your Collaboration Environment application. I will admit that this is my first experience with Maven, but I found it easy enough to figure out and far less complicated than old-fashioned Make files. Better yet, there is a plug-in for Eclipse that hides nearly all the Maven plumbing and allows you to concentrate on writing code. Maven does the heavy lifting of building the deliverable that gets loaded onto a Collaboration Environment server.

Of course, since you are writing Java code, you must install a Java Software Development Kit (SDK). I use the glassfish4 release, but that’s certainly not a requirement.

You also need to obtain the Collaboration Environment SDK. This can be downloaded from the Avaya DevConnect site. You will also find a number of excellent videos up there that walk you through the installation and configuration process. I found them to be invaluable to my success.

Avaya created a Maven archetype that makes it extremely easy to write your applications. With just a few key strokes and mouse clicks, I was able to create the skeleton of a Call Intercept application that looks something like this.

public class MyCallListener extends CallListenerAbstract {

private static Logger logger = Logger.getLogger(MyCallListener.class);

public MyCallListener()



public final void callIntercepted(final Call call)


logger.fine(“Entered callIntercepted.”);




If you are not a Java programmer (and I applaud the uninitiated that are still reading this article), please allow me to explain what you are looking at.

MyCallListener is the container for the code that processes an incoming or outgoing call. This means that it will be executed on every single call that comes in on a trunk or is sent out through a trunk. Of most importance is the method callIntercepted. This is where you put the code that tells Collaboration Environment what to do with a call. By default, callIntercepted allows a call to proceed uninhibited.

Of course, allowing a call to proceed as if nothing happened isn’t all that exciting. To remedy that, you add code to callIntercepted that tells Collaboration Environment to do interesting things with the call.

Those things might include stopping it dead in its tracks (e.g. block list). It might also include sending it to a destination different than the number the caller dialed (e.g. Find-Me-Follow-Me). Even more exciting, you may want to create a conference from this call and invite other people to join in. We can take it even further by having this call launch emails, text messages, video conferences, or anything else your heart might desire (or your business requires).

Once you have latched onto an in-progress call, Collaboration Environment allows you to write an application that manipulates it in a million different ways.

Key to this manipulation is the call object. If you look at the skeleton code you will see the statement call.allow(). This tells Collaboration Environment to send the call on its merry way. The call object allows you to do so much more than that, though.

Here are a few examples:

call.allow() Send the call on to the next hop
call.divert Send the call to a new destination
call.drop Release the call
call.getCalledParty() Get information about the called party
call.isCallingParty() Get information about the calling party
call.initiate() Create a new outgoing call

Using the above, redirecting an incoming call to an operator could be as simple as this:


Adding the text “Important:” to the caller’s name display could be accomplished with the following lines of code:

Participant callingParty = call.getCallingParty();

String newInfo = “Important: ” + callingParty.getDisplayName();

I could go on and on, but the point is that once you have the call, what occurs next is up to you. You can dip into a database, call out to external service via web services, change the caller’s displayed number, invoke another Collaboration Environment application, or anything else you code into your application. You are only limited by your imagination.

It’s important to know that even though the application is processing a SIP call, there is no need for the programmer to know the first thing about SIP. The SIP URI, headers, header parameters, and message body are all hidden from the application. That’s not to say that you can’t get to them if you really want to, but for most applications, that’s not required. Telling a call to drop can be accomplished without knowing that this will generate an 6xx response or a BYE message.

Now, I wasn’t quite accurate when I said “every single call that comes in on a trunk or is sent out through a trunk.” Collaboration Environment allows you to define exactly which calls you want your application to process. It does this by assigning endpoints and telephone numbers to an application. For instance, you might want to assign everyone in the sales group to one Collaboration Environment application and everyone in accounts receivable to a different Collaboration Environment application. You might want your Collaboration Environment application to only run on the behalf of your contact center agents. You get to decide all that when you install and configure the application.

In addition to simply manipulating telephone calls, Collaboration Environment has connectors to email, SMS text, and video systems. It also provides a media interface that allows you to play prompts and collect responses.

Writing an application that intercepts an incoming call, plays a message to the caller, collects his or her touch-tone responses, deflects the call to a new destination, and sends a text message back to the caller is straightforward and simple.

Building the Application

Once you’ve figure out what you want your application to do, you must invoke Maven to build and create the deliverable. The deliverable is in the form of an svar (Structural VAR) file that is then loaded onto the Collaboration Environment server. The loading and subsequent configuration is done using the Avaya Aura System Manager.

Once an application is loaded and users have been assigned to it, it’s ready to run. It’s that simple.

One more thing. Make note of the logger variable in the skeleton code. This allows your application to write to a system console at execution time — think System.out.println(). This can be invaluable during the development phase.

That’s All For Now

I was pleasantly surprised to see how easy the entire process was. The longest part was setting up Eclipse, Maven, and the Java SDK, but I would have to do that for any Java development project. Once everything was installed and configured, using the Collaboration Environment SDK is a piece of cake. It’s extremely well documented with an organized and well-structured Javadoc. Additionally, Maven greatly simplifies the application development process. It’s almost as if the code writes itself.

I intend to continue documenting my findings as I dig deeper into the SDK and write more complicated applications. I am just starting to play with the data APIs and I have yet to do anything with the media interface.

So much to explore and so little time…

Related Articles:

Winning the CX with Apps, Integrated Data Views, Custom Agent Desktops

An estimated $6 trillion in global revenue is up for grabs due to dissatisfied customers constantly switching providers, seeking a better customer experience—CX. From finance to retail to hospitality, it seems virtually every industry is grappling with above-average customer churn. Why? Technology has evolved to a point where there is now an inconceivable number of ways for customers to engage with brands, creating a communications environment that many companies simply aren’t set up to handle.

Think about it: if customers aren’t connecting with a brand using one of their three personal mobile devices, they’re leveraging a myriad of other channels and connected platforms to research, communicate and engage. Consider that 150 million emails and 2.4 million Google search queries were sent last year per minute. In that same 60 seconds, almost one million customers were logging into Facebook, and almost 350,000 new tweets were being posted. Over 50,000 apps were being downloaded per minute through the Apple App Store, and over 20 million messages were being sent via communication apps like WhatsApp.

If these statistics show us anything, it’s that experience is everything. The average consumer today uses a combination of the above channels to engage with his or her favorite brands. In fact, in 2014, over 40 % of customers were already using up to seven different service channels including live chat, email, social media, SMS and traditional phone.

The Entire Organization Contributes to the CX

In this next-generation communications environment, a series of unique interaction touch points are created to form a dynamic, inimitable customer journey, as Avaya’s Bernard Gutnick discusses in his blog “Customer Journey Maps Help Strengthen Relationships.” This journey extends across an entire organization, regardless of business line or function. It transcends the limitations of time and space. Conversations continue where they last left off and are routed to whoever is best fit to help, regardless of where that expert resides within the organization. As mentioned, however, many companies aren’t set up to handle this kind of environment from an architectural standpoint. Just consider companies in industries like government, where 71% of federal IT decision makers still use old operating systems to run important applications

Communications-Enabled Applications

To create this revolutionary environment, businesses must operate on open, agile infrastructure that enables them to build any communications-enabled application organization-wide. In today’s smart, digital world, companies need the speed and flexibility to design, build and run unique applications to meet constantly changing customer needs and business requirements. This open environment supports businesses with a contextual, 360-degree view of the customer journey—a view that seamlessly extends across all teams, processes and customer touch points to deliver unparalleled brand experiences.

These apps need to be easy for IT to create, deploy and manage, and they must be agile enough to serve multiple departments to improve ROI and TCO. Driven by the right tools and strategies, every employee must be empowered to do his or her job at maximum potential each day. As we’ve mentioned time and again, gaining a 360-degree view of the customer means serving both contact center and non-contact center environments within a company. This is exactly why best-in-class companies are 30% more likely to align their entire organization around the customer to ensure consistency and contextualization.

Integrated Data Views and Custom Agent Desktops

Here’s how this next-generation communications environment specifically works:

  • A full library of customer engagement capabilities for contact centers—plus team engagement APIs to build business apps for almost any computer environment (i.e., Mac, Windows, iOS, Android and Javascript)—enables businesses to continually reinvent the communications experience, thus reimagining CX possibilities and business outcomes. This is how any expert can be made available for any customer inquiry or issue regardless of their location within the organization.
  • Companies can build their own contact center apps, or embed specific functions into their existing apps, to customize the agent desktop for any unique customer configuration. This ability to instantly innovate customer communications enables organizations to anticipate and respond to the speed of the consumer. Keep in mind that virtually anyone should be able to oversee these customizations, be it the company’s development team, system integrators, or the provider’s professional services team.
  • To know where your customers want to go, you must first know where they’ve been. With CRM information directly integrated within its interface, a web-based application empowers agents with a single, integrated browser view. This enables employees to view all data—both historical and real-time—across every fathomable interaction channel. This means an agent seeing that a customer communicated with a chatbot twice over the last two days about a billing error, for example. Agents will never have to wonder what steps were taken prior to their interaction with a customer, and consumers will never have to repeat the same information or be transferred across multiple different agents. Also keep in mind that this move to a web-based application offers contact center operators more flexibility to leverage general purpose browsers on a range of computers such as Macs, PCs and Chromebooks. This not only eliminates the need to upgrade client apps, but allows companies to customize the layout of each contact center so that information matches the requirements of each individual operation.

As technology continually evolves, businesses will have no choice but to press forward if they wish to perform at the speed of the consumer. Experience is everything, and organizations need a new way to design, deliver and manage customer engagements. With customers now using more digital channels than ever to engage with the brands they love, it’s clear that customer-based business applications have won the war.

Interested in learning more or chatting about transforming your environment? We can help enable you to compete and win the hearts and minds of your employees and customers. Contact us. We’re here to help and would love to hear from you.

A totally new way to approach customers—and a million reasons to do so

Last month, Laurent Philonenko wrote about some of the exciting work being done with the Avaya Breeze™ Platform, noting that many of our 2016 DevConnect Excellence Award winners were making the creation of Avaya Snap-ins a center point of their strategies.

There is perhaps no better proof point for this than the efforts of Engelbart Software GmbH, our 2016 DevConnect Partner of the Year.

DevConnect business development manager Bill Petty recently sat down with Dirk Engelbart, founder and owner of Engelbart Software, as part of our new DevConnect 8-and-Out podcast series, and talked about their experiences with Avaya Breeze. Avaya Breeze represents “a totally new way to approach customers,” according to Dirk.

In the interview, Dirk speaks directly to the opportunities his company is able to pursue through Avaya Breeze, with “millions of use cases” solvable at his fingertips through Avaya Breeze. His examples, including a manufacturing-related solution to enable warehouse workers to reach suppliers by mapping part numbers via SAP integration, clearly demonstrate the power of this platform.

But most impressive is his story of delivering a deal-winning proof-of-concept implementation in less than two days. This isn’t just a mockup, or some fancy slideware that shows what could be done, but rather a demonstrable, tangible example of how it is actually implemented.

We’ve been hearing this speed-to-market feedback from Avaya customers and partners alike, as we’ve been running bootcamps and training programs on Avaya Breeze and related tools like Avaya Engagement Designer. Avaya Breeze simply makes it easy and quick to create solutions that, using more traditional CTI methods, would have taken weeks to months to complete.

So grab a cup of coffee/soda/tea, and have a listen to what Dirk has to say about Avaya Breeze and why Engelbart has shifted all of their development focus towards leveraging Avaya Breeze.

Why Healthcare Providers Need to Deliver Uber-Like Service

I have a confession to make: I’ve never used Uber. Personally, I like to order my taxis the old fashioned way – by calling the local service on my smartphone and paying via credit card. I know, so 2009.

But while seemingly all my friends are now Uber converts, I’ve yet to download the app, because I know it would be used once, or never, and then just sit on my phone. While there are now literally millions of apps available to us, not many of them actually get used. According to data from Nielsen, the average U.S. smartphone user accesses less than 30 apps per month, with 70 percent of total app usage coming from the top 200 apps.

So, which app would get my vote? A recent unfortunate event has made up my mind for me. The event was my son breaking his arm, and the dream app for me would be one that simplified my healthcare journey.

That dream healthcare smartphone app is yet to be created. After we rushed my son to the emergency room, we had to present his insurance card, answer questions about his previous medical history, any allergies to medication, list his emergency contacts and so on, all before he could be admitted to see a physician. By the time he did actually see a doctor, he was in so much pain his screams echoed through the hospital, and I was in tears.

Even worse, when we got to the operating room, the doctor went through the same list of questions. Fast forward another few hours and my son has now been transferred to a hospital room for two days of observation. With each doctor and nurse on duty, most of the questions asked before are asked again.

Now, if I had my dream app available, we would have clicked a single button to instantly talk to emergency responders, who could access my son’s up-to-date medical and healthcare profile. My phone could be geolocated and an ambulance dispatched, with skilled medical staff available who could relay information about my son’s condition to physicians while en route to the hospital. That information might prompt the hospital to make an emergency room available and prep the surgical team for an immediate operation–with the entire procedure being completed in a few hours, and questions restricted to immediate medical issues.

Admittedly, this is expecting a lot from one app: Uber doesn’t especially care about what happens to you once you reach your destination, after all. Is it too much to expect our healthcare providers to focus on providing a seamless experience for their users? The ordeal I suffered with my son recently was made worse because the hospital hadn’t done enough to ensure that I wasn’t frustrated as I progressed through the system, and to link its various points of contact… it lacked an omnichannel customer experience.

This seamless experience in healthcare is what each one of us should expect and healthcare providers should aspire to deliver. We take for granted that when we use Uber, we are going to get a reliable and safe journey that will get us to where we want to be. In the future, healthcare providers that don’t deliver the best possible experience to their customers are going to find themselves left behind by those providers who do.