I originally had a different article planned for today, but with the current situation that’s happening over the world, I decided to change what I was going to talk about.
The world has gone crazy, in so many ways. There’s plenty of information out there around what’s happening, and with best advice to people as to how to deal with things, cope, etc. I’m not going to cover that (besides, it’s likely that things will change over time, which means that anything I write could be out of date soon).
Instead, I’m going to address one of the specific issues that I’m seeing again and again. This is the bottleneck that people are facing when trying to contact companies, whether the company is their bank, their utility provider, their health provider, or even travel companies.
Regardless of whether people are trying to cancel an existing holiday & get a refund, speak to their bank to get a mortgage holiday, or get medical advice, they’re facing the same major issue – they’re not the only ones trying to get through. Phone lines are jammed (assuming that they’ve not been stopped due to agents being sick), static forms where you fill in information aren’t liked (as you don’t know what the actual status of things are), and online chat takes an absolute age. I had an online chat session with Amazon two days ago, and it took over an hour for one of their associates to join my session to help me.
Go to any major company website, and you’ll probably see something like the following (this is from British Airways):
I’d like to be clear – companies couldn’t really have forecast all of this happening, if you’d go back several months.
But what companies can, and should have in place, are clear communication protocols that actually enable them to handle a massive scale-up of customers contacting them. It’s not going to be perfect, but can help mitigate the bottleneck to certain degrees.
Having an efficient system can allow a single agent to handle multiple communication streams at the same time. Indeed, it’s not just about handling multiple web-chat sessions concurrently – it’s also about handling communication across different mediums. So agents can handle webchat, Facebook messages, Twitter DM’s, etc.
This is, I believe, where products such as Omnichannel for Dynamics 365 can really come into their own, and shine through. Using it, companies can ensure that their workforce (which is likely to be impacted as well by the situation) can be as best empowered as possible, and assist customers as speedily as they are able to.
Hopefully the current situation will resolve itself as soon as possible, and coming out from it, we should look to carry out any efficiencies that we are able to. This will allow companies to better serve their customers moving forward, and streamline communication channels.
I hope & pray that everyone stays safe & healthy through this crisis, and that we help each other out (to the best of our abilities) to get through it.
Companies want to be able to support their customers, and provide a valuable customer experience. That’s a given, of course! On the other hand (especially if the company isn’t a multi-national), they’ll have hours of operation that they’re open for. When the company isn’t open, they’ll want to ensure that customers will know this, and not be routed to customer support when it’s not available.
There are several different ways of handling this, depending on how exactly the system/s have been implemented. Let’s take a look at some of these
When setting up a chat channel directly from within Omnichannel, we can leverage the inbuilt settings for Operating Hours:
By using this, we’re able to set up different day & time combinations, along with the timezone that’s it’s applicable for (I’d suggest to use appropriate names and/or descriptions to easily identify them, of course!):
It’s not even a blanket setting (ie that you set up one record for this, that governs all communication channels). You’re able to set up multiple Operating Hour records, and can then point each chat instance to a specific one. To do this, go to (or create) the Chat record, open the Design tab within the record, and select the Operating Hour record you’re wanting to associate to the chat:
Now, when this has been applied, the chat widget button will only be displayed on the webpage/s where it’s deployed to during the specified Operating Hours. Great!
Power Virtual Agent
There will be scenarios where you’ll be implementing a Power Virtual Agent in the first instance, rather than using the Omnichannel chat itself. Reasons for this include the ability to have automated responses to issues, allow users to self-service their enquires, and other.
Having taken a look, the configuration for escalating a PVA conversation into an Omnichannel queue is actually quite simple and basic. Unfortunately, there doesn’t (at the time of writing) seem to be any way of picking up the Omnichannel Operating Hours that are set up within the system, nor any method to specify these in any other way for the PVA itself. Hopefully this will change at some point!
Azure Chat Bot
I’ve also taken a look at Azure Chatbots, as these are another way in which companies will enable customers. Once again, there’s no way to have an Azure Chatbot respect/pick-up Omnichannel Operating Hours. I would hope that this will be functionality that comes in the future.
However (unlike Power Virtual Agents), it should be possible to write code within the chatbot (using the Microsoft Bot Framework) to indeed take these into account.
Other channels
There are of course other channels such as Facebook, SMS, and the Wave 1 2020 items (Twitter etc). With all of these, there are likely to be different methods in getting the Operating Hours set up, along with things like auto-responses (eg ‘The office is now closed, please contact us again between 09:00 & 17:30 Monday through Friday to speak with an agent’) to give the best experience.
In general, it’s usually quite useful to be able to see how customers are engaging with your company, and how they’re feeling about things. If customers are disgruntled, annoyed, or complaining, it’s important to be able to understand the root cause/s of their issue/s, and resolve them as soon as possible.
One of the tools available in Omnichannel is Sentiment Analysis. What is this?
Being able to identify how customers see/interact with your brand, accurately, is vitally important. Using people to manually trawl through your data to attempt to identify this has many drawbacks:
Lack of consistent approach
Large amounts of time needed
Many manual touchpoints
As a natural follow-on from this, being able to identify & categorise the sentiment in customer communications through using machine learning can unlock many business use cases that can then result in immense value for your company.
Microsoft provide the ability for this through Azure Cognitive Services. It’s really quite interesting in how this actually works. You can go to https://azure.microsoft.com/en-gb/services/cognitive-services/text-analytics/, put in a sentence, and see what results come back. It can be quite amusing to see what different colours come out as!
As part of the analytics around chat (and by chat, I’m not referring to just a chat bot – anything within Omnichannel can be referred to as ‘chat’, from an agent perspective), sentiment analysis can be used.
This is quite easy to set up. To do so, open the Omnichannel Administration Hub, go to the Settings area in the left-hand menu, open ‘Sentiment Analysis’, and click to enable it. Remember to save it to apply it!
This will then result in the agent interface showing the following:
Now, this isn’t static. The sentiment will update in real time as the conversation continues, and will change based on what the customer is saying.
Now, obviously we’d expect agents to be able to judge the tone of the conversation based on what’s being said (at least I’d personally expect it). So for this, the sentiment that shows within the chat isn’t that helpful.
However, it does come into its own in a slightly different place. This is the Omnichannel Sentiments Analysis Dashboard, which is served through PowerBI.
Through this, supervisors can understand how their company is measuring up to their KPIs & necessary trends. They can also understand the overall support experience that omnichannel is having, along with tracking the sentiment of customer interactions. As a result of having this to hand, better understanding of customers can take place, resulting in improvement of the overall customer experience.
Once the dashboards have been configured within PowerBI (I’m going to do a separate post on this), it’s then possible to surface these within the Omnichannel Customer Service Hub (which users with the Supervisor role will be able to see). This means that supervisors won’t need to open a separate place to see these; it’s all available through the same interface.
There’s also a more detailed view into what’s actually happening, through the ‘Omnichannel Insights – Sentiment Analysis Report’. This displays a lot more information, drilling down & splitting the data up into agents, queues, channels & trends. Here’s an example of this:
With all of this information as the fingertips, it’s now really possible to drill down into the details. Through this, we’re able to carry out full & proper analysis on what’s actually causing customer interactions. From looking into what’s occurring, it’s then possible to review the current state of things, and see what can be improved. This will then result in more positive sentiments shown by customers, and drive their loyalty to the company!
Earlier this week I started to share information around the Productivity Tools that Microsoft provides (as a separate solution, admittedly) for Omnichannel – https://thecrm.ninja/omnichannel-productivity-tools/. With it, I also covered Macros, and some of the benefits that using macros can bring to a company
Now, we all know that the absolute key point in ensuring a consistent & holistic approach is to have a method for getting something done. A ‘script’, in other words. With this, we can set out the steps that we want to be carried out, in the order that they should be performed, with appropriate information against each item. This results in agents (hopefully!) following this, giving the customer the same (and great) experience each and every time they need to interact.
Scripts isn’t just about instructions to be carried out though. It also allows macros to be included, that agents can run as they go through the script.
Here’s an example of something that I’ve been playing around with in my test environments (ninja’s are just SO cool, that I’ve had to rein in my imagination!):
So that’s an example of what you can do. Let’s now see how we set these up. There are several steps to it
In the Omnichannel Administration Hub, you should see the Scripts entry in the left hand bar:
Open it, and click on ‘New’ in the main menu bar. You’ll get the following form appearing:
Type in a name for the script, and a description (personally I find it annoying that I can’t see all of the text in the Description field – perhaps Microsoft may change this at some point). Save the form, and the grid to the right becomes active!
Clicking the ellipse (3 dots) in the Agent Script Steps grid gives several options:
One of the very helpful options here is to add an existing script step. What’s a script step, I hear you ask. Well, each specific item in a script is referred to as a ‘script step’. You set these up as you go through your scrip, as shown below. You don’t need to create a new script step for each script if they’re the same thing – you can just create one, & add it as needed to multiple scripts (just be careful, because if you need to change it at some point, the changed/updated version will display in all scripts that it’s associated with!.
As with any record, you’ll put in a name, and a description. What you’ll also do is give it an order number (this is manual, not auto-generated). The order number is how the system orders the different steps. There’s also the option (which is a required selection) as to whether this is text, macro, or a script:
Text. This will be free text that you enter into the script step, which will then be displayed on the screen for the omnichannel agent to see
Macro. This will give you the option to point to a macro that you’ve already set up. When the agent will click on it during the session, the macro will run
Script. This allows you to reference existing scripts – you can have smaller scripts that you can then use as ‘building blocks’ to create more complex scripts
Once you’ve gotten the script set up, we then need to configure the chat sessions to actually use it. This allows us to set up multiple scripts in our system, and use them as appropriate (eg by using pre-survey questions, it’s possible to direct a customer to a specific queue, and then have the agents use a specific script for this).
To do this, we go to Sessions, and open the session entry that we’re wanting to set the script up for:
Once it’s open, switch to the Agent Script tab. This has a grid that shows all of the script/s that are set up for it. To add script/s, use the drop-down menu on the top of the grid:
The last thing that needs to be done is to enable the Productivity Pane, as otherwise agents won’t be able to see all of this in the first place! Thankfully this is a single setting, and is done as follows:
Go to the Productivity Pane option in the left-hand menu. Click on it
Set the Productivity pane option to ‘Enabled’
Set the Mode option based on your requirements (this is how it appears in the agent interface). By default it’s set to ‘Collapsed’
One of the really great things about Dynamics 365 (and other Microsoft products such as Office 365, PowerBI, etc) is that providers can publish solutions that companies can then look to install into their environment. In fact, not only do 3rd parties do this, Microsoft itself does this too!
These are all published to AppSource (http://appsource.microsoft.com) where you can quickly and easily search for solutions. It’s possible to filter based on category, industry, product, pricing level, and several other options. There are thousands of solutions on it – it’s really quite amazing!
So, what does this have to do with what I’m writing about? Well, there’s a package, created by Microsoft itself, called ‘Productivity Tools for Dynamics 365 apps‘ (hyperlink is correct at the time of writing this article).
According to the description against the solution:
…it provides capabilities that help users to perform day-to-day operations in a faster, efficient, and process compliant manner and deliver value to customers…
OK – sounds good. And it’s free – yes, that’s right. Additional FREE functionality that’s being provided by Microsoft (why they don’t roll it into the general solution, I have NO idea). But where does it come into play, and apply, to the customer centre universe?
Well, that’s actually really simple. See, it’s only able to be installed in an environment that has Omnichannel installed to! It can’t be installed if that’s not present – so it doesn’t work with the ‘regular’ customer service first-party applications.
Now, any contact/customer service centre is expected to handle a large number of customer interactions, along with resolving them as fast as possible. I’ve already previously touched on some of the benefits of Omnichannel for Dynamics 365 helping streamline any company team, in that it’s no longer necessary to have a team handling calls, another team handling web enquires, and a third team handling social media, etc. Instead, it’s now possible to have a single team handling all customer interactions and/or communications holistically across all possible channels.
With this, however, comes various challenges:
There can be many actions to perform manually (I’ve previously covered using slugs in customer conversations to cut down on manually typing things – https://thecrm.ninja/quick-responses-in-omnichannel/, but there can be lots of other actions as well)
Repetitive and/or monotonous tasks – there are scripts that the customer service agents will need to follow for each interaction
Not having real-time insight into the customer, and any other relevant needs based on the context of the interaction.
So, what does the Productivity Tools solution actually contain? At the time of writing, it has 3 components that are part of it:
Macros
Agent Assist
Smart Assist
I’m going to cover these functionalities over a couple of posts, to show how they work and bring benefits to an organisation. I’m not going to go into how to install the solution – it’s pretty straightforward, and the instructions are shown on the AppSource page for it.
One thing to quickly mention though is that there are 2 new security roles that are relevant for Productivity Tools, that should be applied to users as applicable to them:
Macros
Macros should be well known to most people, as they’ve been around for a LONG time! It’s possible to have macros in Word, Excel, even Windows itself (I remember back in high school that we used macros within Word to launch Explorer, as it was locked down – we could then open games and play during lunchtime…)! It’s therefore a natural evolution to have them available within Dynamics 365 as well.
Using macros, customer service agents can carry out repetitive tasks that can span multiple entities. Eg opening forms (model-driven apps), pre-populating data into the form, etc. Through this, not only are there less manual tasks/steps to carry out, there’s now the ability to carry out the same tasks, without worrying about a step being missed, or the wrong data copied in, etc.
As with all other configuration in Omnichannel, you’ll need to go to the Omnichannel Administration Hub to access the Macros section:
Click ‘New’ on the menu bar, and hey voila – you can create a new macro!
Now, I had no idea what to expect – and the interface for this was possibly the last thing that I was thinking would be there! It looks EXACTLY like the process for creating a Power Automate Flow, though just for macros. In fact I’d be quite surprised if underneath it all it was actually using something different to do this – after all, if you can build a ‘process builder’ once, in a really great way, why not use it everywhere that you can!
So, once I’ve set up some steps, my screen now looks like this (the syntax does take a little bit of getting used to FYI):
Now, it’s not just a single step that you can perform. As with Power Automate Flows, you can daisy-chain MULTIPLE steps together to achieve the desired result/s:
This is really great, in my opinion. There’s obviously quite a scope of activities and actions which agents would usually carry out manually, which macros now now address & handle.
Macros themselves are used by agents within the Agent Assist and Smart Assist functionality. I’ll be introducing these in the next post, along with how to use macros within it.
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).
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.
Let’s hope that in the future, this is streamlined and is much more trivial to be able to do!
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)
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.
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.
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
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!
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 sentimentanalysis
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:
There’s a cute little character that exists – this is the ‘|’ character (also known as the pipe character)
Using the pipe character, you can separate regex expressions, which will be evaluated separately
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!
We’ve all had these types of scenarios. You know, when you’re needing to type the same response (or similar ones) time and time and time again to customers. Or alternatively queries can be grouped together under different topics, and you just wish there was a way to quickly and easily answer these, rather than manually answering each customer.
Thankfully, there is indeed such functionality within Omnichannel! No longer do you need to type out general responses (or indeed custom responses) each and every time that a customer requests some information about something, or when helping them out.
In Omnichannel, these are called ‘Quick Responses’, and are really incredibly easy to use.
As a default, the system ships with some quick responses already loaded in, and available to use. This covers usual circumstances such as ‘Hello, how may I assist you?’, ‘Your patience is appreciated. I will be with you shortly’, and also ‘This chat service is permission based. Before a chat begins, no data is collected about you beyond the information which websites usually collect. Once an invitation is accepted, all chats are monitored for quality assurance purposes. Any information gathered is for internal use only.’
In fact, not only are these pre-loaded in English, they’re actually pre-loaded in 23 other languages as well! (at the time of writing, that is – I’m sure there will be more to come)
Now these are all very well and good for generic customer service. What makes this really cool though is that you can create your own ones, and then use them.
Setting them up is really simple and straightforward. Make sure that you’re in the Omnichannel Administration Hub, scroll down in the left side navigation bar to ‘Quick Replies’ (in the ‘Agent Experience’ section), click it, and then click the ‘New’ button on menu ribbon bar:
Give the record a title to identify it by, select a local, and then enter the message that you’re wanting to use:
Now all the agent needs to do in the chat window is use the ‘/q’ command (without the quotation characters, of course). Typing this will bring up the Quick Response window in the chat session.
The agent can then type in a keyword, and the list of available quick replies will be filtered to just those that have the keyword in it:
Note that due to the way in which Omnichannel works, it can sometimes take a little time before the new Quick Reply entries will appear for the agent to use in the chat interface
Clicking on the line that they want to use will then populate the text from that quick reply into the chat window. The agent can modify it if they want to, and then send it to the customer:
This is a really helpful feature, and can assist greatly in speedier responses to customers, as well as cutting down on the time needed for interactions!