Bot Builder Community Project: An OSS Marvel

Today, we’re excited to announce a global opensource project for Bot Builder Community which is not just limited to .NET Stack but it’s open for Python, Java or Node developers.

History

It was an ordinary evening when I was waiting for my wife and our 18 months old to get ready for some outdoor chores; I logged into my PC and started reading out all the highlights of the day. I noticed my friend’s James Mann’s tweet about Bot Builder common extensions & middleware project. I went through it and thought to contribute some of my ideas there as well.

I, along with other SMEs (read: MVPs) have been producing the useful content for Bot Builder since the BotFramework SDK V3. However, as soon as I contributed to the James’ repository for extensions and published the library to NuGet, Gary Pretty came up with an awesome idea of coming up with the Community Project for Bot Builder (SDK V4) to combine all the goodness developers have been writing about on different repositories or blogs. Therefore, within just 4-5 days of time with the dedication and clear direction of Gary Pretty and James Mann, we’re up and running with all the dialogs, middleware and recognizers for Bot Builder V4.

Image by Adam Marczack

Motivation

As our focus was .NET SDK during our development so all the packages are currently available for the same. Nonetheless, if you’re good at Python, Java or Node and you want to be a part of our team by contributing your ideas for the community then please contact us either on twitter or on our GitHub page.

What’s in Community Project right now? 

As I mentioned earlier, we already have a few of our dialogs, middleware and recognizers up and running on NuGet. Here are the details about each of them;

Dialogs

  • Bot Builder v4 Location Dialog – An implemention for v4 of the Bot Build .NET SDK of the Microsoft.Bot.Builder.Location dialog project built for Bot Builder v3. An open-source location picker control for Microsoft Bot Framework powered by Azure or Bing Maps REST services. This control will allow a user to search for a location, with the ability to specify required fields and also store locations as favorites for the user.

Middleware

  • Handle Activity Type Middleware – Middleware component which allows you to respond to different types of incoming activities, e.g. send a greeting, or even filter out activities you do not care about altogether.
  • Best Match Middleware – A middleware implementation of the popular open source BestMatchDialog for v3 of the SDK. This piece of middleware will allow you to match a message receieved from a bot user against a list of strings and then carry out an appropriate action. Matching does not have to be exact and you can set the threshold as to how closely the message should match with an item in the list.
  • Azure Active Directory Authentication Middleware – This middleware will allow your bot to authenticate with Azure AD. It was created to support integration with Microsoft Graph but it will work with any application that uses the OAuth 2.0 authorization code flow.
  • Sentiment Analysis Middleware –  This middleware uses Cognitive Services Sentiment Analysis to identify the sentiment of each inbound message and make it available for your bot or other middleware component.
  • Spell Check Middleware – This middleware uses Cognitive Services Check to automatically correct inbound message text.
  • Typing Middleware – This middleware will show a ‘typing’ event whenever a long running operation is occurring in your bot or other middeware components in the pipeline, providing a visual cue to the user that your bot is doing something.

Recognizers

  • Fuzzy Match Recognizer – A recognizer that allows you to use fuzzy matching to compare strings. Useful in situations such as when a user make a spelling mistake etc. When the recognizer is used a list of matches, along with confidence scores, are returned.

You can reach out to me in case you need any help with the above or you want to know more about our project.

Happy coding!