Creating a virtual service desk agent – a DevOps experiment

During January, I visited a potential customer from the financial sector in Sweden. This customer was very interested in the CSC MyWorkStyle offering, however had a few doubts around our approach to providing users with information. Our current approach sees us presenting multiple portals and interfaces depending on the services taken. The challenge this client laid out was how do we reduce this down to a single place for all IT needs.

I had already been reading (and blogging) about Artificial Intelligence and how when combined with the right APIs and training it can help solve quite tricky IT problems.

I decided I would try to create a small application to figure out how we could start joining several services together using Machine Learning and AI to create this single entry point for our customers. It’s worth stating that the customer visit in January was one of many reasons for going down this path. One other significant reason was to drive some fresh thinking into the consumption of our MyWorkStyle offering and show some fresh innovation.

I had a quick meeting with Glen Robinson (our Regional CTO) during one of our UK Tech Com events. He put me in contact with Rob White (Global IBM Bluemix Initiative Leader) and a plan was quickly formed. We would start off small and use several Watson components to demonstrate how we could use both Machine Learning and Artificial Intelligence to bring together. My target was to demonstrate on stage a working application at Tech Com 2016.

Week 1 (Feb. 22) – An idea takes form

First I was given access to one of IBM’s Bluemix developers. We had a few initial discussions to set the scene and work out what we could do. The idea was to leverage Bluemix (IBM’s hybrid cloud development platform) to create our AI application. The application would initially be used to present users with Knowledge Base data depending on what input they gave. We had a stretch target to include training data as a second source of information to complement knowledge.

As mentioned above my goal was to have something I could present at the CSC GSC Tech Com event at the beginning of April. This gave us around five weeks to create something demonstrable.

We started off with a rough idea for our application. This was going to be a learning exercise for both me and IBM, as many of the things I wanted to do, whilst possible, had not yet really been done by my IBM team before.

Rough Idea

Rough Idea

We decided to use Slack as our user interface and several modules within BlueMix to form the base application. These were the Natural Language Classifier, Dialog and Retrieve and Rank. To plumb the application together, we would use NodeRed.

  • NLC (Natural Language Classifier) – This is the machine learning module, which is used to get the end-users intent. We used this to understand and classify the input. With this we matched it to a specific class that feeds into the Dialog service. Basically we used NLC to capture the right string of variables.
  • Dialog – This was the service we would use to present options and knowledge information to the end users. This is where we created code for all conversational items. The end game here is to retain the conversation in the form of variables, so we did not have to ask the same question twice in the future.
  • Retrieve and Rank – The stretch goal was to use the R&R service to index training documents and present relevant information to end users based on the knowledge articles they were using.

The reason behind using both Dialog and Retrieve and Rank was to see how each of these services worked and how easy they were to setup and use going forward. Dialog relied on exact code to display answers. If it was not coded, it would not be found whereas R&R required feeding all our content, then training to make sure it found the relevant answer.

Week 2 (Feb. 29) – We have a working application

Within the first week we went through several iterations of our basic application. We had BlueMix talking to Watson and Slack using one of IBM’s example applications. We had no content, however it gave us the API links needed to get going and proved out a few things.

One interesting thing we learned straight away was that by using Slack we had put a big constraint on ourselves. Slack is very good with its APIs however it was quite tricky to use when it came to passing the information we needed in and out. We quickly decided to move onto a Web-based chat interface instead of Slack to avoid working out how we do things like retain dialog history. My long-term goal (assuming this continued development post-Tech Com) was not to use Slack, so I didn’t want to spend time figuring out Slack. Effectively I wanted the team to focus on the hard bits within Bluemix instead.

Our approach for adding content was going to be as follows:

  • Create the NLC and Class
  • Populate the NLC with the expected questions
  • Create dialog script that the NLC will point to
  • Upload and link dialog
  • Test

To help explain this, I will run through a quick example. First is a walk-through of an example chat between the end user and Watson. Here is an example of what happens when the end user chatting (in the Green boxes) asks a question to Watson (in the Blue boxes).

Example of a Dialog Explained

Example of a Dialog Explained

Next I am showing our NLC class for accessing the out-of-office assistant. This class was used in the example above in the first blue box. You can see we added phrases into the NLC to train Watson on what combinations of words to look out for.

NLC Example

NLC Example

Once we understand the user is asking for out of office, we ask them for the version of Outlook. We are asking because we have several different Knowledge articles for out-of-office and don’t yet know which version the user wants to see.

Below is an example of the XML file we used to drive the dialog discussion with the customer to determine the final variable. On lines 9 and 10 you can see we have captured two variables so far.

  • Out of Office
  • Mail

We need to gather a 3rd variable (software version) to proceed to the correct Knowledge dialog, this question is being asked on line 16 with 3 different options.

Out of Office Code

Out of Office Code

This next section of code shows what inputs we are looking for to determine the software version. Notice we are not just looking for the specific text prompted to the user, we have added OWA, webmail, etc. as possible answers for Outlook Web App.

Out of Office Code

Out of Office Code

Once we have collected the required variables we can provide the end user with the Knowledge they need to hopefully achieve their goal. Below is what this all looks like from the end-user point of view.

Dialog Example

Dialog Example

Dialog Example

Dialog Example

One other thing to note here, we started to present images to the users as part of the Knowledge article. To do this, we turned on another BlueMix module called object storage. This would go on to be used to host any object we want to call from within the application.

Week 3 (March 7) – The team grows

IBM brought in another Architect / Developer (also based in India) to help with the Retrieve and Rank element. This allowed us to have focus on both the main application whilst the stretch target was being worked in parallel.

To bolster the team even more, we onboarded two extra CSC staff from our team in Vietnam. This team was brought in to create content in the form of additional dialog scripts for the application while the IBM developers continued to create the back end interfaces and fixed bugs.

So now we had started creating our own dialog content based on exported Service NOW Knowledge Articles and also introduced a BlueMix Cloudant instance. Cloudant was used as a basic database for all our dialog history.

By this point, I had moved past my rough diagram and had something a bit more mature to talk through.

 Slightly less rough idea

Slightly less rough idea

We also had a basic flow working in NodeRed. We left the Slack input and outputs in just in case we wanted to go back later.

Node Red getting joined up

Week 4 (March 14) – Working through bugs and making our lives a bit easier

By now we had several dialogs in the system and we also decided to focus our content creation around Email knowledge and training. Originally I wanted to have quite a broad selection of Knowledge available, however I decided to cut back and go for quality over quantity. Getting Email working would be good enough for now.

We spent this week making the application a bit more user friendly to update. Up to now our IBM developer was plumbing in all the code for our dialogs behind the scenes. Rather than continue using our key resource to update dialogs, we worked on a front-end mechanism to enable easy upload / update of new dialog templates from the rest of the team.

Simple interface for adding dialogs

Simple interface for adding dialogs

Lots of dialogs being added

Lots of dialogs being added

We also started getting rid of some bugs, for example hitting enter to submit the question (in the former setup you had to point and click with the mouse to submit the question).

One final thing we did this week was implement GIT for managing the code. This helped us manage the submissions of code between CSC in Vietnam and IBM.

Week 5 (March 21) – We broke Watson

Our team in Vietnam had been creating dialog scripts for Outlook 2010, Outlook 2013 and Office 365. Our initial approach was to create a single dialog script for each knowledge article and by the middle of the week we had hit 100 dialogs. Unfortunately, this was also the moment we found out that there was a 100 dialog limit within Watson and we could not upload any new dialogs. A few quick calls later (confirming that it was a 100 dialog hard limit) and we had a new approach where we could fit all the dialog knowledge articles in a single file for each application type. This change would let us reduce the 90 dialog files for our 3 Outlook versions down to 3 or 4.

We also had the first working demo of Retrieve and Rank. We decided to call retrieve and rank when a user typed in “more info” after retrieving a knowledge article. What we displayed was a view of the articles Retrieve and Rank found in the Training data we provided. The articles were retrieved in rank order with the closest match at the top and ever-decreasing matches shown as the user scrolled down. The example below was following the Voting Buttons dialog for Outlook 2013.

Retrieve and Rank

Retrieve and Rank

We were closing in on Tech Com now only 2 weeks away, so I agreed to a set list of questions that I planned to ask Watson in the demos. This helped the team focus testing on the specific areas I needed for the demo. I also made a call to further challenge the team by adding in three more stretch targets.

  • Add in Single Sign On using our Envision ADFS.
  • Add Voice to Text into the web interface
  • Create a couple of service request dialogs

These would really help show off some of our integration capability, agility and future thinking.

Week 6 (March 28) – The final push

This was the final week before we stopped for Tech Com. My three final stretch jobs were completed and tested. We even managed to add in a Web re-direct / alias to make it easy to access. All our remaining focus was on adding polish to the application.

I created a final overview of the solution to help describe what we had created.

Final Overview Diagram

Final Overview Diagram

I also recorded a few walk-through videos describing the front and back end of the application also showing how it works for end users.


Post Tech-Com Results

It’s now the week after Tech Com and we had a very successful conference. I demonstrated the Virtual Service Desk in three of our breakout sessions and did various 1-1 demos. The interest in this area was significant with demand from our offering sales leads across multiple regions. Work is now beginning to create our first product using BlueMix and Watson for MyWorkStyle and Service Management.

Mark RotheramMark Rotheram Joined CSC in the year 2000 and has held senior operations, engineering and architecture roles across major accounts. He is currently working as one of the lead Enterprise Architect’s for the CSC MyWorkStyle offering. He has recently won the CSC award for Technical Excellence for complex integration and the hyper productive workplace.


  1. Reblogged this on Rother's Blog and commented:
    My blog on creating an Arificial Intelligence from

  2. This is interesting Mark, but I tried all the same queries in google and got the right answers in the first or second search result, even with vague queries like “going on holiday outlook” so maybe support related to common office tools and operating systems might not be the best examples, as google’s AI platform has already done all the work, without all of the manual effort that you had to go through. I’ve always believed that most users try google first, before they try any IT support portal, so these type of queries are unlikely to get through, and if they do they will only be from a small subset of the users.

    Where I was specific in my query, for example “add voting buttons outlook” google even gave me inline instructions:

    Add the voting buttons
    Create a new e-mail message, or open a message that you want to reply to or forward.
    In the message window, on the Options tab, in the Tracking group, click Use Voting Buttons.
    Click one of the following: …
    Compose your message, and then click Send.

    and of course video’s were also available if I needed them

  3. Hi Steve, totally agree, unfortunately I had to work with the generic KB’s I had available at the time. We are now using the same idea but with a customer centric focus that Google can’t (yet) help with. For example dealing with issues and requests on a customer specific procurement system.

Speak Your Mind


This site uses Akismet to reduce spam. Learn how your comment data is processed.