iOS Outlook Add-ins is now available!

Last week I posted my gotcha around Dynamics 365 Outlook App. This weekend I noticed a notification on my phone to update the Outlook app to the latest version.

What surprises me is the availability of the long waiting add-ins feature that has been demoed in the Dynamics 365 launching. The following article mentioned about the Dynamics 365 add-ins: https://www.macrumors.com/2017/02/02/microsoft-outlook-for-ios-add-ins/.

So, I wait for no further to update it straight away and viola! I can now get my Outlook add-ins available on my Outlook app on my phone!

IMG_0101.PNG

There is a functionality to open the record. Since I have Dynamics 365 mobile app installed as well, the Outlook app is opening the record detail in the Dynamics 365 mobile app.

HTH!

Gotchas on Dynamics 365 Outlook App Deployment

Microsoft Dynamics 365 has a shiny new Outlook App. In this post, I won’t discuss the functionality of this Outlook App (for the information about functionality, please use the following article: https://www.microsoft.com/en-us/dynamics/crm-customer-center/dynamics-365-app-for-outlook-user-s-guide.aspx)

One of the first pre-requisite of the new Dynamics 365 Outlook App is to enable the server-side sync (https://technet.microsoft.com/en-us/library/dn531109.aspx). Once the server-side sync for the user’s mailbox completed, the user will be displayed under Dynamics 365 App for Outlook as Eligible User:

Add Outlook App.png

Click the “ADD APP TO OUTLOOK” button to let the provisioning service adding the Outlook App. This might take up to 15 minutes to finish the provisioning. For more information about the security requirements, supportability, compatibility and more details of the deployment, please refer to the following TechNet article: https://technet.microsoft.com/en-us/library/dn946901.aspx

Once you’ve got it provisioned, it will be available on your desktop-based Outlook:

Outlook App.png

As well as on OWA client: OWA.png

 

Gotcha #1 – Outlook App Doesn’t Like Multiple Dynamics 365 Instances

Now, as I’m happy with the App, I would like to make it available in other Dynamics 365 instances (Typical IT project lifecycle we will have multiple environments to be used for their purpose, such as: DEV/TEST/UAT/PROD).

So, what I have done was made the same configuration at the other environment, let say in UAT environment. And add progressing to add the app to Outlook. However, I’ve got the following error:

Issue.png

“Issue when adding to Outlook” – with detail: “CRM : IncomingEmailRejected”.

So I click the link “Help me resolve this issue” that takes me to the following KB Article: https://support.microsoft.com/en-gb/help/3211627/incomingemailrejected-error-when-attempting-to-install-dynamics-365-app-for-outlook

The article mentioned the cause of the problem: “This error can occur if the Mailbox record has not been approved.”

Well, I’ve approved the mailbox. Otherwise, how come I could get a success message from the testing result:

Mailbox_tested_and_approved.png

To resolve this issue. I need to update the Mailbox synchronisation to the current organisation only. Which means, I can only sync and use the Outlook App for an instance at a time (which makes sense).

MailboxSync.png

Once I ticked this option, I can add the Outlook App successfully for the new instance.

So, the feature of the traditional Outlook Client that is able to keep the configuration of multiple instances and switching on which one that becomes the syncing org, seems to be not available for the Outlook App.

 

Gotcha #2 – How to Remove or Disable the Dynamics 365 Outlook App?

Now, in some situations, it could be a business decision whether they would like to use the new Dynamics 365 Outlook App or the Traditional Outlook client. One thing that I noticed, once I enabled the Dynamics 365 Outlook App for the user, I can’t find anywhere in CRM UI to remove it:

Nowhere to remove.png

It can only add, but not remove… Okay, this is not the end of the world. The Dynamics 365 Outlook App is technically an “Add-in” for Outlook. So, to remove it, simply navigate to File > Info > Manage Add-ins from Outlook desktop.

Manage Add-ins.png

That practically will redirect you to Outlook OWA: https://outlook.office365.com/owa/?path=/options/manageapps

Manage Add-ins OWA.png

Now in here, we can see the list of Outlook add-ins that have been installed for us. Click Dynamics 365, in there we also can see which Dynamics 365 instance that the App is currently connected to.

To disable: simply untick “Turned on” checkbox.

To remove: select the add-ins and click the minus (-) button.

 

For now, these are the lessons learned that I’ve got from the Dynamics 365 App.

HTH!

Editing Sitemap in Dynamics 365

Prior to the release of Dynamics 365, we are helped a lot by XrmToolbox to edit the sitemap without the need of editing the sitemap XML manually. However, with the release of Dynamics 365, it seems the plugin for XrmToolbox doesn’t support the editing of Dynamics 365 sitemap (given now it is possible for a Dynamics 365 deployment to have multiple Apps and each App can have their own sitemap).

XrmToolbox-Sitemap.png

So, what should we do now? There are 2 options to configure the Sitemap in Dynamics 365.

Option #1: Creating a new App

With the ability to create App in Dynamics 365, we can create a sitemap that is associated to the App. Following the guide from Microsoft on how to configure/design the app: https://www.microsoft.com/en-us/dynamics/crm-customer-center/design-custom-business-apps-by-using-the-app-designer.aspx

Option #2: Editing the Default Sitemap

Editing default sitemap is similar to what we used to do with XrmToolbox. However, with the unavailability of XrmToolbox to achieve this, we need to use the Dynamics 365 Sitemap Editor to do this.

How to get there? Here are the steps to update the Default Sitemap:

  1. Open the Solution that you would like to use to contain the sitemap.
  2. Under Components. Select Client Extensions > Add Existing > Select “Site Map”Sitemap.png
  3. Once it’s added to the solution, click on the Edit buttonEdit.png
  4. It will then open up the Dynamics 365 Sitemap Editor. Conceptually it’s the same as the way we configure Sitemap using the XrmToolbox, but with different user experience and layout.D365Sitemapeditor.png
  5. Once you are happy with the layout, click Save and then Publish.

 

Extra Tips: Change the Default “Dynamics 365 – custom” App name

By default, each Dynamics 365 instance will get a default App. To change this App name:

  1. Navigate to Settings > Administration > System Settings
  2. Under “General” tab scroll down to the last optionsDefaultAppName.png

HTH!

 

Dynamics 365 (On-Premises) Is Released

It seems the wait is over for CRM On-Premise customers to get the latest update of Dynamics 365 (Re-branding seems to cause confusions to some of us).

Download link: https://www.microsoft.com/en-us/download/details.aspx?id=54515

This version is 8.2, which is the same base version to the current version on the cloud version. The following components are now available for download:

Dynamics_365_On-Prem.png

Note the filename is still using “CRM2016”. As a rule of thumb in avoiding confusion, please refer to the version number 🙂

Looking forward to upgrade one of my VMs in Christmas break!

When Case Routing is not Working, Check the Team Security Role

Recently I worked on a demo to showcase Dynamics 365 Service (case management) capability. One of the feature that I would like to show is the case routing functionality.

I’ve created a simple rule, let say IF the case type = product enquiry, assign the owner to Product team.

So, I tried the rule by clicking save & route button on the case form, but it doesn’t do what I expect it to do…

Routing_Rules.png

Later I found out that the team that the case routing rule has been configured with, doesn’t have enough privilege to own a case (in my case this was a brand new team, without security role assigned).

After I assigned the appropriate security role, now the routing works as expected.

I hope this help anyone who might encounter the same issue.

Note: I’ve submitted an idea (link below) to allow preemptive message to let us know if the rule doesn’t have enough privilege. Please vote it up if you think this will be helpful.

https://crmideas.dynamics.com/ideas/dynamics-crm/ID0000653 

 

CRM Chat Bot: Part 4 – Deployment & Action!

In the previous part of this series, we have seen the sample implementation and how the code is running against a CRM Online instance. In this post I will show on how to deploy the chat bot to the supported channels.

channels.png

As illustrated above, the built bot has the capability to be deployed to multiple channels leveraging the built-in capability of Bot Connector library.

Bot Registration

To deploy the bot, first we need to sign up to register the bot: https://dev.botframework.com/bots/new (this requires a Windows Live ID to sign up). Once signed-up, you will be able to register the new Bot:

BotRegistration.png

You will then be asked to setup the App ID and password. Please take note of this App ID and password, as this will be the one that we will use in the Web.Config.

BotRegistration_appid&password.png

Then update your web.config of the bot with the generated App Id and Password.

BotWebConfig.png

Now we are ready to deploy to Azure App Service. You need to make sure that your Visual Studio has the latest Azure SDK. To publish it, right click the bot project and click on Publish.

BotPublish.png

This will prompt the details for the Azure App Service deployment.BotAppService1.png

Continue to create, once the App Service has been created, it will show below screen:

BotPublish2.png

Note: Take note the destination URL, this will be the bot endpoint. You will need this base URL  and  the API path”/api/messages” to be configured on the bot registration site.

BotConfigEndpoint.png

Once the endpoint has been setup properly, you could verify and test the connectivity:

BotConnection.png

Channels Configuration

Congratulations, we are nearly there. The next step is to configure the channels. Skype and Web Chat are automatically configured by default. To add other channel it is really simple. Just follow the guide provided by Microsoft is sufficient.

BotChannelFb.png

Once it’s configured with the details, now here is the bot in action:

FBDeployed.gif

As I’ve configured it on different channels, the same Bot is working on different platforms, such as Slack and Skype.

Example on Slack:

SlackDeployed.gif

Example on Skype:

SkypeDeployed.gif

Conclusion

Microsoft Bot Framework is relatively new for the community, however it has produced a great framework to built multi-channels conversational bot. Where the developers only need to developed the bot once and it can be deployed in many different channels rapidly.

BotFrameworkArchitecture.jpg

The diagram above depicts the high level on how the bot application is deployed and work together as a solution.

I hope this post helps you to gain the understanding on the Bot Framework and how it can be integrated with Dynamics CRM and other Microsoft platforms.

This post is the end of the CRM Chat Bot series. There will be a spin-off post on a topic related to Luis Model that was used in this example. So, stay tuned 🙂

 

 

CRM Chat Bot: Part 3 – Development Deep Dive + Integration To Dynamics CRM

In the part 2 of the series, we have discussed on the concept of how the Bot Framework library is used to assist us building conversational bot. As promised in the previous post, I’m going to share the source code on how the bot framework can be integrated with Dynamics CRM.

The Story

Now, to build a conversational bot, it will begin with the use case of the bot. In my example, I’m going to use an imaginary  car dealer with this simple “User Story” from Scrum principle: “As a customer, I want to be able chat and let the company know that I want to test drive a car, so that I can make an informed decision when I’m buying the car”.

The Implementation

In the previous post, we have discussed the concept of Dialog, Form Flow and Luis Dialog. Now in this post, I will show on how these concept can be applied.

In general I’m creating the TestDriveDetail class to contain the test drive request detail:

Notice that all classes that will be used in Bot Framework will need to be decorated with [Serializable].

And a simple helper class to create the record to CRM.

Now, I’ll give the example of the simple implementation with the 3 different techniques (Dialog, Form Flow and Luis Dialog).

Sample #1: Simple Dialog

DialogBot.gif

The sample dialog is a series of prompt and at the end of the process it the store the information in CRM Online. Below is sample code of the Dialog, how the chain of prompts are created and at the end it is storing the record in CRM.

Sample #2: Form Flow

FormFlowBot.gif

As you can see at the above screen, the form flow is automatically generate the questions with the pre-defined options. Below is the source code of Form Flow implementation:

To initiate the Form Flow from message controller:

Sample #3: Luis Dialog

Now, we have seen how Dialog and Form Flow is getting the simple conversation started. However, if you might notice, the bot can only understand predefined keywords or options. (In Dialog, it is hard-coded to find “Test Drive” and in FormFlow it is directly asking the detail).

To overcome this, Microsoft has come up with a really cool Language Understanding Intelligent Service, a.k.a LUIS. In this post, I’m not going to describe in detail on how to setup LUIS model (will do next time), but I would like to introducing its capability that is able to predict/interpret the intent of the user. For this sample, I’ve prepared the following LUIS model:

luismodel

This model is configured to be able to interpret the intent of the user (Greeting, Test Drive, Ending Conversation, Brochure Request, None).

LuisBot.gif

Now, below is the source code on how the Luis Dialog is built.

That’s all for the sample codes! I hope this helps. For the code repository, feel free to have a look at github repo: https://github.com/andz88/CrmChatBot.

Stay tuned for the next part of this series: Deployment.