[Azure] Building a Cortana based skilled bot

In my previous post I discussed how to build a bot using a Web Project and deploying it as a DLL to an Azure Function. The Azure Function would then function as the endpoint for your bot which you can make available through channels which include Facebook, Skype (for Business) and many more. Starting at //BUILD this year, Cortana was also included in that list of channels. Cortana of course is a bit of a special channel, since we’ll then be using voice to communicate with our bot. But if you think of it, voice translates to text and text is the input of choice for the bot that we build. So it should be that difficult, right? It’s not!

 

Cortana Skills

The Cortana SDK or development framework or whatever you’d like to call it calls this skills. Basically you’re learning Cortana new skills as you would learn a pet or child something new. The set-up on the Cortana side is simpler than you might think. You simply enable the Cortana channel for your bot, fill in some fields and you’re good to go.

cortana-skillOne of these fields is the invocation name. That’s how Cortana will understand she needs to route a message to our bot. For my home automation sample, I’ll be using “The House” as invocation name, so a command might be “Hey Cortana, tell The House to turn on the lights in the kitchen”. If you haven’t read it yet, take 5 minutes to read Cortana kills + LUIS pre-built domains on how to effortlessly teach you bot these kinds of intents.

Another cool thing you can configure is which data Cortana will supply your bot with. Since Cortana is the digital assistant of the user you will be communicating with, she knows things about this user. These things you can request for so that you can make use of the data in your bot code.

cortana-userprofile

Be aware though: the user does need to consent to Cortana sending this information to the bot before she actually does so.

cortana_permission

Developer mode

Another handy thing is to put Cortana herself into Developer Mode. You can do this by heading over to the Cortana Dashboard (the link is displayed with the Cortana channel itself). Here, under the Debug section there’s the option to enable Developer Mode by simply clicking a checkbox.

 

cortana-debug

After which invoking a command will show you debug info:

cortana-debugon

 

Debugging the bot

For testing and debugging your bot, you get all of the options you normally have for bots (and for Azure Functions by the way). Of course you cannot get the online version of Cortana to call a local instance of your bot, but you can simply pass in the text of the intent you want to test via the bot framework emulator. One feature gap at this moment is the fact that the bot emulator does not allow us to pass in the additional channel data that Cortana can supply (context / user info). What you could do is attach your debugger to an Azure hosted instance of your bot and then debug that specific part.

 

That’s it for now, in my next post I’ll be going in a bit deeper into how this all comes together.

 

azure-icon-250x250

[Azure] News for Developers, June 2017

This entry is part 1 of 2 in the series Azure news for Developers

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!

 

App Services updates

The app services team announced a couple of new updates in their monthly blog post. These include:

  • Azure CDN now supports https on custom domains, something that you could previously only do with one of the external CDN services (link).
  • New App Service Overview Blade
    The new overview blade should perform faster making is easier to switch between apps. The charts can be pinned to custom dashboards which might improve the performance of those as well (a little bit).
  • Integrated experience for Windows and Linux based apps
    When creating a new app service instance, you can now pick which OS the instance needs to host your app.
  • App Service Advisor recommendation history
    The app service advisor will provide proactive recommendations on how to solve problems within your application. It now features the ability to view past recommendations.

Blog post: https://blogs.msdn.microsoft.com/appserviceteam/2017/06/30/june-2017-app-service-update/

Visual Studio (Team Services)

From the world of Visual Studio team services:

  • Visual Studio 15.3 preview has been released. You can install and check it out today! (link) It features:
    • Azure Continous Delivery support for .NET Core and ASP.NET Core apps.
    • Increased visibility on extension impact on performance. For some reason it recently advised me to close the Errors pane. That’s right, just ignore them!
  • The Visual Studio Team Services updates for this month include:
    • Sharing fields across processes, making it easier to query across team projects that use different processes.
    • Support for custom work item icons and a library to pick them from.
    • Filtering a pull request tree by file name. Same goes for the tree view in Code views.
    • Web view for Git Tags. This view allows to view, delete and filter based on tags. Managing tags can be set-up with separate permissions.
    • Import and Export on Build Defintions. This was one of the top-voted items on UserVoice!
    • Hosted agent pools for building your code are changing. No longer are there agents that support multiple versions of Visual Studio; you need to pick the correct pool now.
    • Comprehensive updates have been made to the NuGet, npmMaven and dotnet task manager tasks, fixing a lot of bugs.
    • Streamlined user management including bulk remove, optionally add new users to projects and easily view subscriptions.

Check out https://www.visualstudio.com/en-us/articles/news/2017/jun-22-team-services for the complete overview.

 

Other

Here’s all the stuff that didn’t fit into one of the above categories:

  • Manage ACS, Cosmos DB, Active Directory Graph and more with release 1.1 of the Azure management libraries for .NET (link).
  • Text Analytics API now supports sentiment analysis in 16 languages (including Dutch, HOERA!) (link).
  • Azure SQL Data Sync was refreshed, bringing portal support and a REST API (link).
  • Azure Traffic manager got two new features: fast failover and TCP probing (link). The failover options include:
    • Endpoint checking interval can now be set to 10 seconds instead of the default 30
    • Configure the number of tolerated failures (0 – 9)
    • Configure the time-out interval for each probe attempt
    • TTL can be down to 0

    The TCP probing enables probing of resources that might not be able to return a HTTP response.

  • The Cognitive Toolkit v2.0 is fully released. This toolkit allows developers to incorporate self-created and trained neural networks into their applications. (link)

That’s it for this month, see you next month for another round of Azure news.

[Azure] Building a bot using DLL / WebProject

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.

And here’s the steps:

  • Follow Donna’s post to set-up a new web project.
  • 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:

    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.

botasweb

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!

funcrunning

 

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!

Check out the code: https://github.com/jsiegmund/BotAsWebProject

azure-icon-250x250

[Azure] News for developers, May 2017

This entry is part 2 of 2 in the series Azure news for Developers

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! (more…)

[Azure] WordPress and Azure Redis Cache

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.

 

(more…)

[O365] Adding your chatbot to Skype for Business

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!

(more…)

[NL] Global Azure Bootcamp @ mStack!

Afgelopen jaar begon ik aan een nieuwe baan. Na 4 jaar werken voor Atos vond ik het tijd voor wat anders. Destijds verruilde ik een werkgever met ongeveer 75 collega’s voor eentje met 75.000 collega’s in 4 jaar tijd groeide dat bedrijf uit naar 100.000 man. Leuke tijd gehad, veel kunnen leren en de mogelijkheid gehad om te werken voor een aantal interessante (en vooral grote) bedrijven zoals DAF, Philips en het ministerie van Buitenlandse Zaken. Toch vond ik het tijd om wat meer focus aan te brengen op technologie die wat mij betreft nog jarenlang een zeer interessante markt zal zijn: Microsoft Azure. En rondom Azure organiseren wij op 22 april (zaterdag) het Global Azure Bootcamp. Gratis!

(more…)

[Azure] Using Azure Functions Proxies

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! (more…)

[Azure] Using precompiled DLL’s for your Functions

One of the cool things about Azure Functions is that they are very easy to get started. You create a new function, type some code and you’re off. This is very nice from a getting started point of view, but once you’re considering to use them for more than just playing around, other things come into play. For instance, you might want to actually test what you’re doing. You might want to reference projects, you might want to reuse some of the code you (or your company) already has. Now there’s all kinds of ways of doing this, but just recently the Function teams introduced another very interesting possibility: the use of precompiled DLL’s. (more…)

[Azure] From Function to SharePoint List Item

This article describes how to insert an item into a SharePoint list using an Azure Function written in C#. Might seem like a trivial task, but there are some caveats you might want to take notice of before you start.

(more…)