Omnichannel & Org URL

This post topic came out of some research that I was doing when getting my Omnichannel webinar presentation together, and I thought it would be useful to share with others.

When an environment (also referred to as an organisation is created within a tenant on the PowerPlatform, it’s given a URL. By default, this will be imaginatively named by the AutoGenerateElves, along the following lines:

It is of course absolutely possible to change this (assuming that someone else hasn’t taken that ‘special’ URL that you’re wanting to use!). To do this, you go to https://admin.powerplatform.microsoft.com/, log in with system adminstrator credentials, go to Environments, select the one you’re wanting, and click the ‘Edit’ button:

You’ll then be able to enter the name that you’re wanting to use (incidentally this is also where you’re now able to switch environments between Production & Sandbox):

You then click the Save button at the bottom of the screen. Assuming you’ve entered a name that isn’t already being used, all is successful. However if it’s being used by someone else (very frustrating, we know!), it’ll give a lovely error message at the top of the screen along the following lines:

Not very helpful, I know – if only there was a way that when you entered the name you wanted and moved off the field, there could be some validation checking happening there & then, with information in plain English if it was able to be used or not…ah well – one day!

OK – so people know this. Brilliant.

What I want to share, however, is how this affects Omnichannel within an environment.

See, when Omnichannel is provisioned into an environment, one of the things that it sets somewhere in the back end is the environment URL. You can’t see where it’s stored, but it’s saved somewhere. This is then used when setting up things such as Chat within Omnichannel – there’s an auto-generated code snippet that you would then use in an HTML block on a webpage to launch a chat session with an Omnichannel agent:

Now, when you change the URL of an environment, it doesn’t change in here – it seems that whatever is happening/updating in the background when you do the URL change, it’s not being pushed into Omnichannel and refreshing the settings there (and you can’t change them manually). Hopefully at some point it’ll happen, but it’s not doing it now.

Even manually changing the code in the HTML block on the website page won’t work, as it won’t be pointing to a valid Omnichannel URL.

We know that it’s not a usual course of events to change an environment URL, but there are valid scenarios that it would happen in, and we obviously need to know how to deal with it!

Having looked into this and tried out some different things, at this point in time there’s only one way to do this – you need to remove the Omnichannel solution, and then re-apply it to the environment. My immediate reaction to this was WHOAH…what about all of the settings (aka static data) that’s been entered for Omnichannel to be configured to the business needs?

With this in mind, I reached out to some people for advice – and they came through. Yes, you need to remove the solution totally (until a better mechanism will be implemented hopefully). But there’s something called the ‘Microsoft Configuration Migration Tool’.

Disclaimer – I haven’t actually used this yet, so this is based on the information I’ve seen on it

With this tool, it’s possible to select various entities, and export/move the data from one environment into a saved file, and then be able to import it. Phew – this sounds somewhat easier than manually doing things (as long as you remember every single place that you need to get the data from, of course).

Note: PowerObjects has a great article on the tool at https://www.powerobjects.com/blog/2018/08/27/microsoft-dynamics-365-crm-configuration-migration-tool/ , and the tool itself can now be gotten from http://xrm.tools/SDK (as it’s no longer part of the released SDK).

With this in mind, it’s now possible to recreate Omnichannel for the environment without hopefully TOO much fuss. The only additional thing to bear in mind is to then check and update the code snippets for Chat etc to reflect the new URL.

Man in Red Crew-neck Sweatshirt Photography

Let’s hope that in the future, this is streamlined and is much more trivial to be able to do!

Channel Integration Framework (II)

Last week I shared a post about the Channel Integration Framework 1.0 ( https://thecrm.ninja/omnichannel-the-channel-integration-framework-i/), where I introduced what CIF actually is, and how it was originally launched.

I was somewhat naughty – I ended the post on a slight teaser note. See, as I mentioned there, CIF 1.0 was all about allowing channel widgets from providers to integrate with what we refer to as ‘model-driven apps’. Eg Accounts, Contacts, etc, which are all ‘single session’ entities within Dynamics 365 (ie that a single channel is being used, like a phone call). It was never designed to support ‘multi session’ apps, which is what Omnichannel is all about (ie the ability to have multiple ‘conversations’ going on at the same time, regardless of the channel in which they’ve come in on).

This is why in 2019, Microsoft was working on the next version of CIF – 2.0! Imaginatively named, of course. The aim was to take the general concepts from CIF 1.0, and apply them to be able to be used with multi-session applications. Obviously at this point in time, the ONLY multi-channel application is….OMNICHANNEL!

Incidentally it’s important to note that any communication widget built on CIF 1.0 will continue to work. Microsoft is not removing the 1.0 APIs, as they’re still needed to support interfacing with single-session apps

So, what’s new (and improved) with CIF 2.0:

  • The ability to have multiple communications happening at the same time, through either the same channel, or multiple channels
  • The ability to have multiple third-party provider solutions. You could have Provider A for telephony, and right alongside it Provider B for SMS
  • Different modes for the widgets, which can be adjusted per session launched. It’s now possible to have them set to be docked in the interface, minimised to a smaller size (to give agents more screen space to work with) or hidden (where it’s running in the background). Agents are able to switch between docked & minimised modes

This is all really exciting. It will allow companies to mix and match solutions based on their actual requirements, rather than having to settle for a single solution provider that may not actually be everything that they’re wanting.

Note: With an eye to data security and things like GDPR, information, data & events for support sessions will only go to the provider for the channel that the session is coming through. They don’t have access to any other session/s that are happening

One of the other main features that comes with CIF 2.0 are the channel analytics. With CIF 1.0, all of the interactions are surfaced into the Dynamics 365 app, but are actually running on the provider’s system (in the background). Data can of course be exchanged between them, but there’s no real ability to perform analytics of what’s going on (especially as it’s only a single channel)

Black Samsung Tablet Computer

In order to get the full insight into what support agents are actually doing, along with seeing the performance of the support centre, it’s necessary to be able to see information across all of the following:

  • CRM data (itself). This covers the actual data of the customers, communications with them (eg activities and cases), their history over time, etc – all of this is stored in the underlying CDS
  • Agent Behaviour. How the agent handles the session – what they do before, during and after they’ve helped the customer
  • Communication data. How the customer has contacted the company now, how they’ve done so in the past, their experience, etc.

So how exactly does Channel Analytics help with things? Well, what it does is:

  • Provides APIs to bring the conversation data into CDS
  • Along with the APIs, it has a standardised schema for how the analytical data will be stored
  • Brings in a standardised scheme for how all of the data points shown above will be correlated together
  • Extendable – you can bring in your own KPIs and other data to best suit your needs.

With all of this now being available through CIF 2.0, it’s possible to carry out really advanced analytics, crunch the data using a tool such as PowerBI, and other things. It’s also possible, of course, to configure real-time dashboards as well as alerts to cover any issues that may come up.

Benefits of this of course include:

  • Identifying root causes of anomalies, help with audit reports, and tracking KPI’s
  • Help with predictive insights for volume of requests, and where to best focus resources
  • See customer satisfaction & average handling times to resolution, along with on-going customer sentiment

So in summary, this is really great. I’ve actually now started to speak with different companies who have ISV solutions that are going to be on CIF 2.0, and will be writing about them in the near future as well.

Mary Thompson on The Oops Factor

Discovering what Mary actually uses her time at (American) football game practices for, as well as finding out about her professional background. We chat about how she kept going when working at an end-user, and what happened when major accounting errors in the system were discovered!

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

Dynamics 365 Kanban Boards

One of the great features being released as part of Wave 1 2020 for Dynamics 365 is the ability to have Kanban boards in the system!

For those people who are unfamiliar with this functionality, “Kanban” is the Japanese word for “visual signal”. A kanban board helps make work visible using cards & columns to easily display data visually. This allows people to keep on top of things, rather than be distracted by lots of lists and data in different places.

Example of a generic kanban board:

When an item on a kanban board changes status (or whatever property the board groups by), it moves to the relevant column. This could be as simple as having PostIt notes on a wall somewhere and a member of the team physically moves it to a new column, or having a record value be updated and then it automatically moves in the view. Items can also be dragged/dropped to a new column in some systems, which then updates the status

I’ve used Pivotal Tracker for several projects that I’ve been working on over the years, which works exactly in this way.

One of the drawbacks with how data is displayed in Dynamics 365 is that the views are lists of records. You can add columns for fields that you want to reference (eg status), sort & filter on them, but visually it’s not very exciting. There’s the ability of course to have charts, graphs & Power BI objects (with the ability to drill down into these), but it’s still not the best of experiences in my opinion.

Well, that’s now no longer the case! You can now use the kanban board ability to display data more visually, as well as interacting with it (think drag/drop)

Caveat: At the moment, although you can add kanban to practically any entity, it’s actually only able to be used on Opportunity

So, the steps to enable it in your environment:

  • Go to https://admin.powerplatform.microsoft.com/environments & select the environment you’re wanting to try it in
  • On the right side of the page, you’ll see the Wave 1 release (see screenshot below). Select the ‘Manage’ button, and confirm the upgrade (it’s not reversible FYI). Wait patiently for it to install (it can take several hours)
  • Once the installation is finished, refresh the environment, open the environment, click the cogwheel on the top right, and select ‘Advanced Settings’
  • Joyfully, this takes you to the old system settings menu, as this functionality hasn’t yet been moved into the configuration available at make.powerapps.com (yet!). Click the dropdown arrow next to Settings in the menu ribbon, and select Customisations
  • Open the solution up (remember, you should probably be doing this in a custom solution, rather than the default one!), expand entities, and find Opportunity. Click on it, and then click on the ‘Controls’ tab
  • You’ll see the option for ‘Add Control’. Click this, then scroll down the list until you see Kanban! Add it, and it’ll show up in the list of controls
  • Now, it’s VITAL that you save, and then publish the customisations.
  • Close all of this, and go to the Opportunity entity. Click the 3 dots to expand the menu on the menu bar, click to slide into the Show As menu, and then select Kanban (you can of course change the default view to use Kanban, if you so desire)
  • And BOOM! The screen layout will magically change, and you should now see the following sort of thing (assuming you have data for Opportunities, of course)
Image from Carl Cookson at linked365.home.blog/

Incidentally, there are actually two Kanban board views available for Opportunities. One of these groups by the record status, and the other groups by where records are within the Business Process Flow timeline (which is shown in the screenshot above). You can switch between these easily by selecting the option that you want on the screen.

Now, as I stated above, this is currently only available for Opportunity (and you need a Sales Enterprise or Sales Professional license to use it). However, I really think this is great functionality, and would hope that it’ll roll out to other parts of Dynamics 365, as well as being available for Power Apps built on the CDS.

How do I see this being valuable? Good question to ask! I think that initially it could be really valuable for customer service scenarios, especially tracking negative interactions with customers (ie where the customer isn’t happy with support and/or the resolution, or there’s a fault, etc).

The ability to display this data visually, with time filters as well, should bring things into focus quite quickly to see where a company can both improve its offering, as well as pick up any issues that are occurring. Obviously regular reporting and BI will still continue to play their crucial roles, but this is another piece of functionality being added to the overall ‘toolkit’ to help get things every better!

Channel Integration Framework (I)

So for starters, the title is somewhat of a mouthful, right? Try saying ‘Channel Integration Framework’ several times fast, and you’ll end up with some VERY interesting sounding words. Thankfully, people and organisations working with it usually shorten it to ‘CIF’. So that’s what I’m going to do as well (which will also hopefully prevent any RSI whilst I’m typing this all out).

The definition of CIF according to Microsoft is:

The Dynamics 365 Channel Integration Framework is a cloud-to-cloud extensible framework to integrate third-party channel providers with Dynamics 365 model-driven app using a browser-based JavaScript API library.

Now, for the technically minded (isn’t that all of us?), CIF is a set of API’s (methods, events & protocols) that enable developers to build their own solutions, and integrate them with Dynamics 365.
Examples of these would be a communication widget that’s running on a 3rd party provider cloud system, but that can surface and interact with Dynamics 365.

There are multiple partners out there who are doing this, such as Solgari. The immediate benefits of this is that additional functionality can be provided for customers that Microsoft hasn’t built into the system (yet!). An example of one of the functionalities provided by Solgari is the ability to dial a number directly from the Contact record (telephony):

Before CIF was available, it was usually an immense headache to integrate a 3rd party application solution into the system. It could be done of course, but was something that you had to be REALLY dedicated to doing, with all of the time, efforts and costs that it would involve.

With it being launched, many people breathed a massive sigh of relief, and then started to look around for partners who had solutions that supported it. There are now several Microsoft partners who offer solutions that integrate with CIF, and through this extend the functionality.

The CIF framework offered the following benefits:

  • It provides an extensible framework to integrate third-party cloud-based channel providers or channel aggregators with Dynamics 365 model-driven app (not Canvas)
  • It’s channel agnostic. Ie channels such as voice, video, chat, co-browse etc can be built as long as there’s a Javascript-based widget available
  • It’s not just a single direction flow of data; it allows two way communication. This therefore allows both inbound and outbound data
  • It exposes Javascript API’s (note the item above about it being a Javascript based widget)
  • Deployment is easy (well, as easy as any deployment can be!). Deployment is also the same across all apps/widgets – it follows a standard process
  • Plug & Play! It’s now very easy to have multiple different providers integrated, rather than being limited to a single provider
  • Dynamics 365 model driven app agnostic – once the channel has been built and deployed, you can then enable it on the model-driven app that you’re wanting to use it with, based on business requirements
  • Not reliant on operating system or web browser – it’s not reliant on a specific hardware/OS/browser configuration (obviously the browser needs to have the appropriate Javascript security settings enabled, or else it won’t work)
  • Screen pop! Popouts are available to display customer information that can help agents with their customer conversations and service.

The architecture behind CIF is as follows:

High-level architecture diagram of Dynamics 365 Channel Integration Framework
  1. The Dynamics 365 environment is where the CIF app is present to create and manage the required configurations
  2. The single-session Dynamics 365 model-driven app exposes the CIF panel to host the 3rd party widget
  3. The CIF Adapter enables the communication between a single-session model-driven app and the channel provider solution
  4. The web-based communication channel (2rd party) is hosted in the widget that the CIF provides. This is multi-purpose; it’s possible to host chat, email, or telephony channels of your choice
  5. The Channel Provider is the service that you want to integrate and interact with using the CIF. Channel capabilities are specific to the channel provider (ie a 3rd party solution that only supports chat won’t be able to support telephony etc!)

So essentially by using 3rd party solutions that integrate with CIF, it’s possible to have customer service offerings covering things like:

  • Telephony
  • SMS
  • Chat
  • Social media

This is really great, and is really the starting point for taking customer service to the next level. Companies want to be able to easily and quickly support their customers across all possible channels, as forcing them into using a specific channel doesn’t always work well, and can in fact be counter-productive.

Now, all of the above is of course amazing, and really great. The MAIN drawback is that this was CIF 1.0…..and it’s not possible to load a CIF 1.0 widget into Omnichannel! Aarghhh!!! It’s only possible to use 1.0 widgets with model-driven apps, which Omnichannel is not (more on that another time). So it’s possible to have chat or telephony integrating with Accounts, Contacts etc.

However, don’t despair yet. Microsoft has released CIF 2.0, which DOES integrate with Omnichannel. So stick around, and I’ll be putting up a post around how that works (I know – such a teaser!).

Linn Zaw Win on The Oops Factor

Finding out from Linn Zaw Win about his hobby of online RPG gaming marathons (mostly using PS4 and Nintendo Switch), iterating on projects with minimum viable product sprints, & the need to have people familiar with the actual way to use low code in the Power Platform as well as having code reviews carried out within the team!

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

Bus Apps At Speed Day

Today I attended a ‘BusApps@Speed’ day (BusApps refers to Business Applications) at the Microsoft campus in Reading. The aim of the day was to give a whistlestop tour through many different applications, including some that I’m not that familiar with (in terms of the functionality and integration). Organised by Chris Huntingford (who also took most of the pictures that I’ve used below), it was really great to learn & broaden my knowledge and understanding of the different applications/functionality that can be used

A quick summary is below:

Image

Chris kicked off the day in his usual style, talking about how the landscape has changed and evolved. Quickly covering abilities that are now present in Power Apps, Power Automate and Power BI with quite some finesse, we were immediately entranced and ready for the rest of the day.

Image

Ruth Forster-Towne from FourVision gave a presentation about Human Resource, which is what Talent has been rebranded to (along with some changes). There were some gaps in the functionality, so FourVision brought several HR ISV solutions to the table to fill these gaps, which is really great to see. The ability to have a standard integration for payroll gives the option for companies to use a local payroll provider in order to be compliant with the necessary legislation (as this can change extensively from country to country!)

Chris Haley spoke about Project for Web, Project Online and PSA. Covering some of the architecture and how best to use each one, it was quite informative as I’ve never used any of them. It was also interesting to hear that DevOps could be included alongside as a project tool, and I’m going to be doing some research into how this would work best.

Image

Afshan Ipsen blew us away with talking about ‘One Version’ for FinOps – we couldn’t believe it’s the first time she’s carried out a speaking engagement at one of these events. Talking through the continual development of the platform, and how to efficiently handle testing the new releases (minor as well as major) on a regular on-going basis. Some really amazing thoughts which can apply to all technology projects really.

Image

Thomas Carroll absolutely wowed us with his presentation on the different Reality series that Microsoft has. Augmented, Virtual and Mixed all bring amazing solutions for being able to help us get better, as well as troubleshoot situations.

Dynamics 365 Guides in particular together with HoloLens can bring the amount of time needed to skill up in a particular area down by a massive amount

Image

Jack Lewis came to talk to us about Microsoft Teams, and the amazingly cool stuff that it’s now able to do. Benefits to people using it obviously include auto-creating Sharepoint sites in the background, but what was amazing to hear was that it’s possible to surface some Power Platform capabilities within Teams itself! Imagine having a Power App right there in the Teams channel.

Paul Henwood gave an amazing session on Power BI and AI capabilities. Demonstrating some of the functionality that Power BI can bring to the table (along with some of the noticeable limits when it comes to data sizes and processing), it was great to learn how AI can really feature. I’ve only played around with Power BI a little bit, and it’s definitely on the list of things that I’d like to take a further look into!

Image

Ana Demeny talked to us about integration architecture, and pointed out very clearly that the ‘right solution’ will always depend on the exact circumstances of the project. It was very clear that it’s vitally important to clearly understand all of the different components that could be used from the entire platform, and apply them in the right way for handling the business scenario, as well as licensing/cost considerations.

Pavlos Vasileiadis talked to us about the importance of having a Centre of Excellence for Power Platform objects (ie Power Apps). Unfortunately I was too engrossed in his session to take any pictures, as it was so excellent! Covering what’s needed to enable a CoE to run and function, as well as how it should be structured for success.

Image

Kaila Bloomfield led the final session, showing how wonderful everything would be if it were all pink! This talked about the capabilities of the different options of Power Platform versus Azure functionality, and that it’s not always a case of just being able to use Power Platform components without running into issues.

Excelling in Customer Service

I was out with some friends from the Microsoft technical community over the weekend, and obviously we got to talking about what we’re passionate about, our visions and values, and what we’re trying to achieve – in essence, what drives us.

From my side of things, I believe very strongly in the vision of excelling in customer service. It’s one of the main reasons that I started this blog, to be able to share my passion for it with others, and help them with getting along the journey on this as well. Obviously I also talk about other things in the technical universe, and have some fun along the way as well (which is also very important!), but ultimately I generally try to have my material centred around customer service.

Now it might seem obvious as to why customer service is so important. After all, we all want to have the best experience possible.

Close-up of Human Hand

But hold on – take a moment or two, and ask yourself exactly what excelling in customer service actually means to you? What comes to mind when you say it to yourself, and what visions are conjured up?

Having spoken with many people along the way, some of the answers that come out of this exercise can be:

  • Being able to be understand by the retailer/service provider, and feeling that my custom is actually appreciated
  • Being able to resolve any issues quickly and easily, without having delays or mis-understandings
  • Knowing that they value me, and go above/beyond in what they’re providing
  • Being able to call up to check on the status of a support case, and the customer service agent seeing my past history; not that they have to ask me absolutely everything again, and start at the very beginning!

Now flip the scenario around, and imagine that you’re providing a service, or a brand. What does excellent customer service mean to you, and why is it so important?

Again, some of the common themes and concepts that come out of this include:

  • Knowing that my customers like my service, and will stay loyal
  • My customers aren’t just about the price that they pay. Even if we’re charging more than others, they appreciate the support and additional actions that we undertake for them
  • Our clients know that we’ll do whatever is necessary to handle any issues that occur

There are plenty of examples of companies who have not just good, but great customer service. I’ve experienced a few myself over the years.

There’s the amazing example of an Amazon support representative who took the initiative in a support conversation to say that they’re Thor (a Norse god). The customer wanted to play along, and well, the rest can be seen below:

Did the support agent solve the problem? Yes. Did the customer walk away feeling that the situation was resolved? Yes. But…did the customer feel that they were engaged and had a positive support experience, and would continue with the provider? YES!!

I had a support session once myself with Amazon (unfortunately I don’t have a screenshot of it anymore) where the support session turned into comparing different fruits, and the benefits of each. Was it germane to the support session? Nope – but I came out of it feeling that the agent was really trying to understand me, and go above/beyond the general support role.

In today’s day and age, where there are so many competitors in markets, it’s the customer service that REALLY can make a specific brand or service provider stand out. It’s this that ensures that customers stay loyal, feel rewarded and empowered, and even recommend to others (which is, at the end of the day, absolutely free marketing for the company!).

Two great examples of this have been demonstrated by Lego and Trader Joe’s:

Lego

Losing a favourite toy feels devastating to a young child. Longtime Lego fan Luka Apps spent all of his Christmas money on a Ninjago (Lego ninja). Against his dad’s advisement, he brought his Ninjago on a shopping trip … and lost it. Luka wrote a letter to Lego explaining his loss and assuring the Lego staff that he would take extra-special care of his action figure if they sent him another one:

The response he received from Lego customer support representative Richard was nothing short of amazing. Richard told Luke that he had talked to Sensei Wu (a Ninjago character), writing:

Trader Joe’s

An elderly man, 89 years of age, was snowed in at his Pennsylvanian home around the holidays, and his daughter was worried that he wasn’t going to have access to enough food due to the impending storm and bad weather in the area.

After calling multiple stores in a desperate attempt to find anyone who would deliver to her father’s home, she finally got hold of someone at Trader Joe’s, who told her that they also do not deliver … normally.

Given the extreme circumstance, they told her that they would gladly deliver directly to his home, and even suggested additional delivery items that would fit perfectly with his special low-sodium diet.

After the daughter placed the order for the food, the employee on the phone told her that she didn’t need to worry about the price; the food would be delivered free of charge. The employee then wished her a Merry Christmas.

Less than 30 minutes later the food was at the man’s doorstep — for free!
In refusing to let red tape get in the way of a customer in need, Trader Joe’s shows that customer service doesn’t need to be about the fanfare; it can simply be about doing the right thing.

The above two examples show how companies can go above and beyond, and deliver stellar customer service. In these stories, did they make anything on it financially? Well no, not immediately. But the customer appreciation and loyalty, not to mention the (eventual) publicity, is priceless. Customers WANT to have a company or service provider that would do this sort of thing for them in an emergency.

Having been involved with the Microsoft Dynamics CRM/365 product for over a decade now, I’ve carefully followed the path that it’s taken, and where the roadmap seems to be pointing to.

Now, Unified Service Desk (USD) has been around for a while, and it’s a really good product. Neil Parkhurst has written extensively on the subject over the years (take a look at https://neilparkhurst.com/ for more information around it). Omnichannel is, in my opinion, NOT a replacement for USD, though it could play a part in it (one of the reasons it’s not a replacement is because Omnichannel can’t connect to legacy on-premise systems, whereas USD can).

However, I believe that for companies that have a cloud-centric approach, Omnichannel is really the key answer to bringing all of their customer engagements together. Together with the enterprise-grade routing that’s available within it, it can enable and empower organisations like nothing before (well, nothing without having to write a LOT of very custom code, of course).

Being able to effortlessly serve communication across all contact channels, seeing the history of these interactions, and building the customer appreciation and loyalty really is what is key for all businesses now. It’s what will make them stand out from their competition, draw customers in, and put themselves ahead of everyone else

three black escalators

This is where Omnichannel for Dynamics 365 has been positioned, and the value that it will bring to all. It’s an amazing journey, and it’s only getting started!

Andrew D Welch on The Oops Factor

Andrew brings a personal halo to the discussion, where we covered wine, book writing, and his first job involving pulling cabling through ceiling spaces! We may have also discussed fires – watch the episode to find out more!

If you’d like to come appear on the show, please sign up at http://bit.ly/2NqP5PV – I’d love to have you on it!

Click here to take a look at the other videos that are available to watch.

Omnichannel – Data Masking Rules

There are various scenarios in which companies would be quite keen to utilise data masking rules. Examples of these include:

  • Masking credit card details, so that firstly the company isn’t required to comply with credit card handling information requirements, and secondly (and potentially more importantly!) there’s no risk of an agent copying down a credit card number, and using it fraudulently
  • Masking personal information – if a customer mistakenly types in their Social Security Number, UK Tax Reference, etc, then the company is likely to want to avoid having their support agents seeing this sensitive information
  • Socially offensive language – companies will be extremely keen to avoid having their staff exposed to offensive language and behaviour

There are obviously other examples of these as well – you can feel free to let your mind run free as to the possibilities.

Omnichannel for Dynamics includes what are referred to as ‘Data Masking Rules’. Using these, you can create rule/s that will then be used to identify the undesired words (or other types of data) within a conversation, and these will then be automatically masked with the asterisk (*) character. Data masking works for chat and async channels.

Now, a few things to keep in mind. Data masking is done through the use of regular expressions, also know as ‘regex’ (when I heard this, I needed to go and look up what a ‘regular expression’ is, as I had no idea! If you have no idea as well, take a look at https://en.wikipedia.org/wiki/Regular_expression , which has a good summary of things).

Currently, there is a HARD LIMIT of 10 data masking rules. Yes, you read that correctly. You are ONLY able to have 10 rules saved. However if you play cool, there’s a way around it, thanks to the way that regex expressions can work.

So, let’s look at how to set up and configure these data masking rules. As with practically everything else that’s set up in Omnichannel, you’ll need to be in the Omnichannel Administration Hub. Scroll down in the left hand menu, and you’ll find it under the Settings section:

Click on it to open, and you’ll presented with a slightly different looking screen than you’re used to. It’s not a general view/list of records – it’s a static screen, with a grid of rules on the right:

The two settings on the left hand of the screen are really quite important. They are:

  • ‘Mask private agent data from the customer’. What this does is mask data that the agent is sending, for both the agent and the customer (ie the agent won’t be able to see the data either, even though they’re typing it). This applies for both live chat and async channel messages.
  • ‘Mask private customer data from the agent’. This will mask data that the customer is sending to the agent, for both the customer and the agent. This is only masked for live chats for both; when using async channels, it’s only masked for the agent interface (ie the customer will still be able to see the data)

Note: If only the first option is enabled, then if the customer types in data matching the masking rule, it will not be hidden, and vice-versa for the second option. It’s therefore vitally important to consider all of the relevant scenarios for the company, and apply these settings appropriately.

Note: Data masking isn’t just through the chat interfaces – it’s also how the data is stored. So if you open up a transcript, or get to check the data within the database, it’s also masked there, which means that it’ll allow you to be fully compliant with everything! A side effect of this is that the sentiment analysis

There are 3 rules provided for you out of the box (in an inactive state). They are:

  • Credit Card: Masks the credit card number, if provided in a message.
  • Email: Masks the email address, if provided in a message.
  • SSN: Masks the SSN, if provided in a message.

Opening up one of these shows us how Microsoft is implementing these:

There’s the name (which you can put whatever you want to), and a description (which is always helpful and useful!). Then there’s the regular expression (I’m not going to go into details as to how to actually put these together – there are plenty of resources out there. Take a look at https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference as a starting point). The character used for masking can’t be changed (at this point in time – perhaps in the future they’ll allow this to be changed).

The really great thing from my perspective is the testing area on the right hand side of the form. Here you can input your text, and see if it actually matches the conditions for the regex (or not, as the case may be). This will allow tweaking of the regex etc:

Just please be aware that you need to click or tab out of the ‘enter test data’ field in order for the ‘masked test data’ value to update

Once you have a rule in place, save it, and click ‘Activate’! Otherwise the rule will be saved, but won’t actually work!

Now, remember that I mentioned above about the limit of only TEN data masking rules? Well, here’s a great little tip as to how to work around this, as there are many legitimate examples of needing many more than ten!

So how do you go about doing this? Well, it goes something like this:

  1. The ‘Regular Expression’ field is actually of type ‘Text’ (with it being ‘Single line of text’). This means that it can actually hold up to 4000 characters in it (according to https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/customize/types-of-fields )
  2. There’s a cute little character that exists – this is the ‘|’ character (also known as the pipe character)
  3. Using the pipe character, you can separate regex expressions, which will be evaluated separately
  4. Therefore you can ACTUALLY have multiple regex expressions in a single data masking rule!

Let’s see this is set up!

And now to see it through the actual interface:

So with this, though it might take a bit of time and testing (and double-checking, to make sure it’s working absolutely correctly, of course), it’s possible to have quite a lot of regex expressions for you to use!