Had a strange thing happen at my client yesterday. We were working on an Office365 set-up and had created some AD security groups in order to have reusable permission groups across a bunch of SharePoint site collections. We missed one person in the org due to which she was not able to access a site she was supposed to have permissions to. So we added here, but still she couldn’t access the site… weird…

In previous articles I explained how you can build bots using the Microsoft Bot Framework and the Azure Bot Service. The latter is built on top of Azure Functions, one of my favorite components in Azure. Both the Functions and Bot teams are releasing stuff in a fast pace, but sometimes this leads towards the two not being 100% in sync with each other. This post addresses one of these issues, namely the Bot Service having old-style templates for new instances.

When you create a new Bot Service instance and download the code, you get a solution with .CSX files. These are used in Azure Functions and they still work great. The issue though is that when you load these in Visual Studio and want to debug your code locally, there’s no IntelliSense to go with them. Althought this is on the teams backlog, it’s not there yet and if you’re a VS dev like I am, you probably can’t live without it 🙂

.NET Class library as Function App

Two months ago, Donna Malayeri (who’s doing absolutely awesome work on the Functions team) wrote this post detailing how you can build a web project which uses the local functions runtime to host and debug the code. This brings two great worlds together: it allows you to build code in Visual Studio with all the benefits (Intellisense!) whilst utilizing the func.exe CLI runtime as well.

The post does a very good job at explaining how to set this up, but what if you want this for your Bot Service instances?

Converting a Bot Service

To convert your bot service instance to a Web Project, here’s what you need:

A web project (well duh…).

The CSX files that you want to convert to ‘regular’ C# classes.

The function.json file that defines the endpoint for your bot.

A appsettings file should you have one. This is typically where your Microosft App ID and password are stored.

The project.json file. You don’t really need this, but it’s handy to look up which packages your instance is using.

When creating the classes, create one for your dialog and one for your entry point. You can combine them as well of course, but I personally like to separate them. In the example these are named Dialog.cs and DialogEntryPoint.cs.

DialogEntryPoint.cs will contain the contents from the ‘run.csx’ file. This the entry point that’s being called when the user communicates with your bot. It’s referenced in function.json as follows:

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

{

"disabled":false,

"scriptFile":"..\\bin\\FunctionsLibraryProject.dll",

"entryPoint":"FunctionsLibraryProject.DialogEntryPoint.Run",

"bindings":[

{

"type":"httpTrigger",

"direction":"in",

"webHookType":"genericJson",

"name":"req"

},

{

"type":"http",

"direction":"out",

"name":"res"

}

]

}

Note the scriptFile and entryPoint settings which point to the output DLL and the class/method which handles the incoming message.

Dialog.cs contains your dialog code.

Ensure that you set-up the project to load the correct NuGet packages. Normally you will need Microsoft.Bot.Builder.Azure which will include some dependencies. If you include this, ensure the project is set-up to run .NET framework version 4.6 instead of 4.5.

Lastly, you need to configure the start options of the project. This is detailed in Donna’s post as well, but for your reference, below are the settings I used. Note that the location of func.exe might differ based on the installation type you used.

With everything configured, running the project should now start your bot in the func.exe runtime and hook up VS at the same time for local debugging! Awesome!

Sample @ github

If you’re struggling, I took the liberty of adjusting the sample project from the blog post and making a bot specific one from it. You can use it to see how it has been set-up. Be aware that my sample is based on the LUIS bot service, so it does require a settings file with your specific LUIS keys to actually work. Should you have any questions or remarks; feel free to leave them below!

A while ago I was planning on doing a few posts on bots, but I never really got to that it seems. I did get into the bot building business though, so here’s one about a little bit more advanced use of bots: language understanding. And although I might write “more advanced”, I don’t really mean it. That’s because LUIS makes things so much easier. LUIS? Yeah, that’s short for Language Understanding Intelligence Service. And it’s awesome. Read More

Are you having trouble keeping track of everything that’s going around in Azure? You’re not alone! In an effort to do so myself, I’m starting a monthly series called “News for developers” which is exactly that: a summary of all of the Azure flavored news specifically for software developers. Now this is based on my personal feeds and my personal opinion, so you might miss things or see things which in your opinion do not matter. Feel free to leave and comment below and I’ll see what I can do for the next edition. And honestly, this is more a personal reference than anything else so having actual readers would already be awesome 🙂 Enjoy! Read More

I a quest to optimize the performance of my WordPress powered site, I thought I’d give Redis Cache a go. Redis Cache has become the industry default when it comes to caching in a key-value style. Azure has a Redis Cache offering which you can use to enhance the performance of any app. If you’re not familiar with caching: it’s a mechanism to eliminate timely data retrieval actions. Caching can be implemented several different places: you web browser uses caching so that it does not have to retrieve all files on every load. Redis Cache is usually more targeted towards scenario’s like database connections. Instead of getting items from a database table, which usually is relatively slow, you can get them from the cache instead.

Have you been coding your chat bot using the Microsoft Bot Framework? Good news! One of the long awaited features is finally here: the Skype for Business channel! Using this channel, you can now get your but to communicate with users using Skype for Business. This is especially good news for enterprises where S4B is often the primary communication tool. Bots were already available through Microsoft Teams, but not all companies are ready for that yet. Skype was in there as well, but is mostly used on the consumer side. So great to have Skype for Business joining the club!

I was running into this weird error today. For some reason (you know… it happens) Visual Studio lost it’s license. I was still logged in, but requested to re-enter my credentials. So I tried, but I kept getting errors. I then thought: let’s log out and log in again. So yeah, that didn’t happen…

If you’ve started using Functions in Azure and you’ve got multiple set-up by now, you’ll start to find that managing them becomes a bit cumbersome, especially when you’ve spread them across multiple instances. All of the instances will have a different base URL and you might find it difficult to keep naming and versioning in line with what you planned. So now what? Let’s take a look at the newly released Proxies for Azure Functions! Read More