Creating a Chat Bot with Microsoft’s QnA Maker and Azure Bot Service


Microsoft has a service in preview, called QnA Maker. It is a free (presently) service, which provides a REST and web-based service that trains AI to respond to questions asked of it. You’ve seen these on other sites, as these have become quite common, and ease the burden on support for SharePoint, or any other service out there. Chat bots can field common questions, freeing up time and energy spent on answering common asks.

They make it very easy to use – you can point it to a URL, type in your questions and answers, or upload a document (.docx, .doc, .pdf, .xlsx, and .tsv). The tricky part, is getting this from loading your knowledge base, to actually having a chat bot on your site. This is what this blog post is for, is to show you how to do it. They do have directions, but not a full walk-through on what to do.

This post assumes that you have at the very least, an Azure Account. If not, you can start one for free.

QnA Maker Setup

First, go to, this is where you will get started. Click on Create New Service


Then sign in with a Microsoft ID, or organizational account like you would into Azure, Office365,, etc.


It will then ask you to provide permissions to QnAMaker, click Accept


Then you must agree to the terms and privacy statement, check the box and hit Continue


Enter in a name for your bot. I am choosing Testbot 9001


You now have 3 options for loading data into your Chat Bot…

  1. From a URL that links to a resource which has a clear Q&A format, like a FAQ
  2. From a file, in Question/Answer format (supported file types are .TSV*, .PDF, .DOC, .DOCX, and .XLSX format)
    *TSV stands for Tab Separated Values. Like a CSV, but, you know, with Tabs. You can do this in Excel.
  3. Enter them in manually

For our Testbot 9001, we will be uploading from Excel. So, let’s create a new Excel file. In the first column, type in the question, or phrase, which the chatbot AI will hit on and use to provide the answer. Use the second column to provide that answer. Here is my example file:


Now, save the file. And go back to the QnA Maker setup, and choose Select file… next to the FILES section


and select the XLSX file from your local computer you just saved


Then scroll to the bottom and select Create


You will then see a dialog window appear while the service scans your file, and imports your Questions and Answers

Once complete, it will take you to the Testbot 9001 Knowledgebase.


Select Test from the side bar, and you can test the functionality with your questions

Cool, huh? The testing also allows you to train the bot as well. Such as choosing the best answer based upon what you had typed

Or providing multiple alternative phrasings, or synonyms


When done, click Save and Retrain to save your changes


You can see back in the main Knowledgebase, that it has been updated by what we asked and what we updated the suggestions and phrasings with


You can also add new Q & A pairs by clicking on Add new QnA pair



When done, Save & Retrain again to save your settings.

Once you are ready… click Publish


It will then show you what will be published… and then when ready, click Publish


The deployment confirmation screen will show you the example HTTP request for using your bot through the REST API. These are also available in the Settings link on the sidebar of the Knowledgebase.


We will need some f this information in a few minutes, so take down the Knowledgebase ID


And the Subscription Key


and put those aside for a few minutes…

Azure Bot Service Setup

Next we’re going to use the Azure Bot Service to setup our bot. To do so, we’ll be following these instructions:

Log into the Azure Portal

Click on New > AI + Cognitive Services > Web App Bot


Now, let’s configure the botimage

  • Name: Testbot9001
    So you can identify the soldiers in your bot army!
  • Subscription: GeoffOps
    Choose your own subscription. This one is mine. You can’t have it.
  • Resource Group: Testbot9001
    Use an existing or create a new one
  • Location: East US
    Select the data center region you would like to use
  • Pricing Tier:  FO (10K Premium Messages)
    This defaults to S1 Standard, change this to F0 Free. Or else you will pay for the service
  • App Name: Testbot9001
  • Bot template:  Question and Answer
  • App service plan/Location: Testbot9001
    You will need to create a new one, or use an existing. For this example, I created a new one also in East US
  • Azure Storage: testbot9001a325
    I am letting Azure create a new one for me. This is a data storage account, like a fileshare. You can use an existing one if you have one as well.
  • Application Insights: Off
    This is not free. So I turned it off.

Then click Create to bring life to your Azure Bot. I twill validate your choices, and then when complete, will begin deployment.


When deployment has completed, you can find the bot and associates Azure resources under the All Resources blade of the left, or, if you have other stuff in Azure, go to the Resource Groups blade, and click on your Resource Group we created in the Bot setup above. In my case, the Resource Group is Testbot9001


Ok. So, we’ve created our bot with QnA Maker, and created a Bot Service in Azure… now what? We need to connect the two.

Select your bot, it’ll be the one which has a TYPE of Web App Bot


On the left hand side, click on APP SERVICE SETTINGS > Application Settings


And then scroll down to App settings. You will see two blank settings called QnAKnowledgebaseId and QnASubscriptionKey

Now, remember those things we copied off earlier? Pate these in there.


And then click Save up top


Now, click on Test in Web Chat on the left side, and test out your new bot!


Pretty neat! But… now what?

Click on Channels on the left side. You will see Web Chat setup and running by default. You can also see, you can extend this out to Teams, Skype, and more pretty easily.


Click on Edit, and copy the Embed Code


And show one of the keys at the top


and replace the YOUR_SECRET_HERE in the embed code


And you can now drop that into a site, web part, whatever you’d like. It’s just an iFrame, so the possibilities are endless.

A simple example – using Embed Code on a SharePoint page:




Would I implement it like this for a client? Likely not… I’d be more apt to have a sliding pop-up window, similar to Facebook chats that can be minimized and maximized as needed. This was just an example to show how to build one of these.




Replacing a Drop-Down List in Nintex Forms 2010 with an Autocompleting Textbox – Fix for Version Update

SharePoint Sig wrote a great post about creating an autocompleting textbox in Nintex Forms 2010 using a Drop-Down list as the source. This was awesome code that did not require much hassle to implement. Until version was released in January of this year.

That is right, this threat that is on every Nintex release finally came to pass:


The changes did indeed require adjustments to custom JavaScript.

We had a client that this functionality broke on, so the SWAT team was called in to figure out a solution. After a few frustrating hours, I was able to figure it out. When configuring your variables that are linked to your textbox and drop-down list, let’s call them simply mylist and mytext for the drop-down list and textbox respectively… the ID for the drop-down list element had changed and added _hid on the end of it. So as an example, the ugly ID for the element:


Now becomes:


So I needed to add in a replace on the string to fix it:

mylist = mylist.replace("_hid","");

That’s the first issue. The second issue is iterating through the options in the dropdown did no longer work. The original code used the following to iterate through:

        $(dropDown1).children().each(function() {

This was no longer working in our implementation, so we did this:

Now, I tried several (well, a lot more than several) options to get ahold of the element, this seemed to be the only one that worked. I built up the element selector in a variable, and then passed it in:

var dropDownOptions = "#" + mylist + " > option";

NWF$(dropDownOptions).each(function() {

The final code ended up being close to this… this was the working prototype, so it can probably be cleaned up a bit more, but, the most important thing is that it worked (changed bits highlighted):


    var textbox = NWF$("#" + mytext);

    mylist = mylist.replace("_hid","");

    var dropDown1 = NWF$("#" + mylist);


        source: function(request, response) {

            var autocompleteVals = [];


            var dropDownOptions = "#" + mylist + " > option";

            NWF$(dropDownOptions).each(function() {

                if (NWF$(this).text() != "(None)" && NWF$(this).text().toLowerCase().indexOf(request.term.toLowerCase()) >= 0) {






        minLength: 1,

        select: function(event, ui) {


            var fieldOption = NWF$("#" + dropDown1Id + " option").filter(function() {

                return NWF$(this).html() == ui.item.value;


            NWF$(fieldOption).attr("selected", true);





Hope this helps someone else out struggling with this issue!

Creating New Service Application Proxy Groups and Associating Services and Sites

Sometimes the need arises to create separate Service Application Proxy groups in SharePoint. Starting with SharePoint 2010, you’ve been able to do this. In SharePoint 2007, you would have created different Shared Service Providers. Your needs might be, that you are exposing web applications to a different group of users, and need separate applications such as Search and the User Profile Service. This also allows you to run those service applications under different accounts, if you needed to for security reasons.

First, let’s create the proxy group we want to use. And lets give it a name.. in the example, I’ll be using "Redacted"… because all my screenshots have had the real service application group identity redacted 🙂 But you can name this anything you’d like. Load up the SharePoint Version Management Console… and call the New-SPServiceApplicationProxyGroup PowerShell cmdlet.

New-SPServiceApplicationProxyGroup "Redacted"

Once you have your new Service Application Proxy Group created, you can then change the web application subscriptions to the proxy groups. To do so, go into Central Administration > Application Management > Web Applications > Manage web applications and select one of your sites. In the ribbon, then select Service Connections under the Management group.


You can always verify this by then going into Central Administration > Application Management > Service Applications > Configure service application associations


Select the Web Applications view, and then you should see your sites, and their associated applications with their Application Proxy Groups.


When you create a new service application, by default, it is going to get tossed into the default group. There is no way in the UI presently to allow you to change associations in the UI once you have created your new proxy group, so, what you need to do is to handle this in PowerShell. The best way to get the IDs for your service applications is to use Get-SPServiceApplication, and then only display the two columns you need, DisplayName (so you know what ones you are looking for), and the Id.

Get-SPServiceApplication | select-object DisplayName,Id


Once you have the ID’s that you need for your Service Applications, you now need to add them as members to the new proxy group you created earlier. You can do this by using the Add-SPServiceApplicationProxyGroupMember PowerShell cmdlet, like so:

Add-SPServiceApplicationProxyGroupMember "Redacted" -Member "f166672c-24b5-4f1a-bd2d-e8436d966abb"

This will add the "Secure Store Service – Redacted" Service Application to my new proxy group Redacted.

If for some reason, one of the service applications do not want to move out of the default group after adding them into the new group, you can remove them with the Remove-SPServiceApplicationProxyGroupMember PowerShell cmdlet. Just an FYI – the default group is referenced as "", so, if you needed to now remove the above service from the default group, you will need to address it as:

Remove-SPServiceApplicationProxyGroupMember "" -Member "f166672c-24b5-4f1a-bd2d-e8436d966abb"

Upgrading to an Enterprise License in SharePoint 20XX

In SharePoint 2010, 2013, and 2016 – you at some point may need to upgrade from a Standard License to an Enterprise license. There are too many reasons to list here…

At first, it seems pretty straight forward… go into Central Administration > Upgrade and Migration > Convert farm license type


You can see your current license… however, both the input box, as well as the OK button are disabled.


Seems like this would be the place to do it, right? Yeah, I don’t get it either. In any event, the proper way to do this, is to click on Enable Enterprise Features under Upgrade and Migration


Click on Enterprise


and enter in your Product Key and click OK.

NOTE: You cannot undo this, so make sure that you want to use an Enterprise key and absorb the associated cost of CALs!

May 2014 #CollabTalk TweetJam On Hybrid SharePoint

Reposted from:

As organizations look to the future of their existing SharePoint environments, questions about hybrid deployments come up again and again. For this month’s #CollabTalk tweetjam, scheduled for May 29th at 9am Pacific / 12pm Eastern we have an all-start panel of experts who will be tackling this topic, CollabTalk May 2014answering questions, and sharing their real-life experiences. Our theme will be “What It Takes to Get Hybrid SharePoint Right,” and we want your questions and feedback during this one-hour online event.

As organizations begin to seriously consider the future of their existing SharePoint infrastructure, some are moving directly to the cloud and Office365, while others are looking to extend their infrastructure investments, protect sensitive data, and/or maintain the level of control they have over line of business (LOB) integrations and other customizations. The long-and-short of it is that hybrid SharePoint deployments will be around for some time, and Microsoft will continue to support on premises deployments for the foreseeable future. In this month’s tweetjam panel, we’ll talk about the business reasoning behind the decisions to go hybrid, while also shedding some light on the roadblocks and realities of keeping one foot on prem and the other foot in the cloud.

If you’re new to the tweetjam model, basically its an hour-long public conversation held on Twitter and using a shared hash tag, which is #CollabTalk. You can use your Twitter platform of choice OR go over to which automatically appends each message with #CollabTalk, and has a nice feature that allows followers to actually slow the dialog down to a readable speed (it can fly by fairly quickly). The questions we will be discussing are listed below:

"What It Takes to Get Hybrid SharePoint Right"

  • As companies transition toward the cloud, how important will hybrid become?
  • What are the most common hybrid SharePoint scenarios?
  • How much of hybrid SharePoint is platform versus services?
  • Is a hybrid search deployment difficult, and if so, what are the pain points?
  • What are the top 3 road blocks for adopting a hybrid SharePoint model?
  • What features/solutions should Microsoft focus on to improve hybrid deployments?
  • What advice would you give to an admin considering a hybrid SharePoint environment?

As always, we will have an extensive all-star panel of experts on hand to participate in the conversation and to interact with you directly – but anyone can jump in and participate. So don’t be shy — share your own perspective and company or customer experiences, or just lurk. It’s all good. But be sure to mark your calendars, tell your colleagues, and get involved!

Our panel this month will include:

  • Dave Coleman (@dcoleman146), SharePoint MVP and director at SharePointEduTech
  • Ben Curry (@curryben), SharePoint MVP, principal architect and managing partner at Summit 7 Systems
  • Bradley Geldenhuys (@bradgcoza), SharePoint Jedi at GTConsult
  • Asif Rehmani (@asifrehmani), consultant, trainer and SharePoint MVP at SharePoint-Videos
  • Tamir Orbach (@tamirorbach), director of product management at Metalogix
  • Naomi Moneypenny (@nmoneypenny), cto at ManyWorlds
  • Dan Holme (@danholme), SharePoint MVP, evangelist, and co-founder of ITUnity
  • Jeffrey Schwartz (@jeffreyschwartz), editor of Redmond Magazine and editor-at-large for Redmond Channel Partner magazine
  • Edin Kapic (@ekapic), SharePoint MVP and architect at Spenta
  • Adis Jugo (@adisjugo), SharePoint MVP, Top 25 SharePoint Influencer 😛 and head of development at deroso Solutions
  • Dan Usher (@binarybrewery), SharePoint MVP, implementation engineer and architect at Booz Allen Hamilton
  • Kanwal Khipple (@kkhipple), SharePoint MVP and director of digital strategy at Envision IT
  • Hans Brender (@hansbrender), SharePoint MVP and ceo of sqtm PSC GmbH
  • Robert Bogue (@robbogue), SharePoint MVP, author and consultant
  • Juan Carlos Gonzalez Martin (@jcgm1978), SharePoint MVP, co-director of the magazine CompartiMOSS, consultant and solution architect at LKS
  • Ivan Sanders (@iasanders), SharePoint MVP, developer and consultant
  • Adam Preston (@_apreston), manager of collaboration and cloud services at TCSC, and president of the Richmond SharePoint Users Group
  • Jason Ruthkoski (@jasonruthkoski), team lead, portals and collaboration at Slalom Consulting
  • Eric Riz (@rizinsights), evp at Concatenate and SharePoint MVP
  • Jeff Fried (@jefffried), cto and vp of engineering at BA Insight
  • Jennifer Mason (@jennifermason), SharePoint MVP and consultant at Rackspace
  • Geoff Varosky (@gvaro), managing consultant at Jornata, president of Boston Area SharePoint Group, and co-founder of Boston Office365 User Group
  • Fabian Williams (@fabianwilliams), SharePoint MVP and senior consultant at Planet Technologies
  • Michael Herman (@mwherman2000), principal architect at Parallelspace
  • Laura Rogers (@wonderlaura),  SharePoint MVP and consultant at Rackspace
  • Jared Shockley (@jshoq), senior systems engineer at Microsoft
  • Alistair Pugin (@alistairpugin), SharePoint MVP and independent consultant
  • Chris Beckett (@teknirvana), founder of obeflow and SharePoint MCM
  • Richard Harbridge (@rharbridge), partner technology advisor and strategist at Microsoft
  • Paul Swider (@pswider), cto at RealActivity and enterprise SharePoint strategist
  • Todd Klindt (@toddklindt), SharePoint MVP and consultant at Rackspace
  • Thomas Carpe (@thomascarpe), principal SharePoint architect at Liquid Mercury Solutions
  • Robert Toro (@SharePointToro), SharePoint practice director at Slalom
  • Warren Marks (@MarksWazza), director at GTconsult
  • and myself as your host and moderator (@buckleyplanet), SharePoint MVP and chief evangelist at Metalogix

I am excited to once again have a lively debate, and look forward to the interaction on #CollabTalk. My plan is to provide a summary of the discussion on the site within the next few days, so watch for an update via my Twitter, Facebook and LinkedIn updates. See you online this Thursday at

Speaking at SharePoint Saturday NYC 2014


I am pleased to announce that I will be once again presenting at SharePoint Saturday NYC on July 26th, 2014.

SharePoint administrators, end users, architects, developers of all kinds, and other professionals that work with Microsoft SharePoint Technologies will meet for the 5th SPS Events New York City event on the last Saturday of July, July 26, 2014 at the new Microsoft office located at 11 Times Square, across the street from the Port Authority Bus Terminal at 8th Ave & 42nd St.
Come see world-class speakers from around the country and the globe present the very same content you’ll see at conferences that cost thousands of dollars to attend, and see it – as always – absolutely free of charge.
Registration to attend will open June 20th; stay tuned here for more information as it becomes available!

I will be presenting “Automating your Enterprise Application Deployments with PowerShell”.

Session Abstract

In enterprise application deployments to SharePoint, there are generally farms, or web applications that host specific applications for specific groups, rather than having just an all-in-one deployment. Often times, you do not have access to these other environments, and will need to pass the deployment baton off to the system administrators of those farms.

This session will walk you through how you can deploy your applications, without needing to have the administrator who will be deploying the application, have to do much more than type a few keys into the SharePoint Administration Console and press enter – and having full configuration and deployment of your custom SharePoint applications to other environments.

I have a Public SharePoint Online site?

Yes. Yes you do. Well, if you have Office 365 and it is part of the license which you purchased. You didn’t have to do anything, you have a public facing (anyone on the internet can hit it just like a normal website) website.

Where is it?

It’s easy to find. Go into the SharePoint Online Admin Center


Select the first link on the left side navigation (the default) site collections


And in the listing on the right side of the page, it will be listed first under Public Website


The default URL will be

And if you go there…You’ll see a nice SharePointy and Cloudy site…



Oh Cool! Now I can create a website like Ferrari in Office 365/SharePoint Online????

No. As of yet, SharePoint Online in Office 365 does not contain all of the super awesome Web Content Management and publishing controls that SharePoint 20XX on-premises does.



Ok, the public website is enough for my needs, can I create more than one?

No. Once you have one created, you cannot create another one. It will appear greyed out when attempting to create a new site collection.




Updated New England SharePoint (and Office 365) Community List

Good morning everyone, just a quick post to let you know that I have updated the New England SharePoint (and Office 365) Community List.

Is your group or event missing, anything need correction? If so, please drop in a comment below and let me know!

New England has a fantastic community around SharePoint and Office 365. Lots of opportunities to learn and network with some great people from around the area.

See you at a SPUG soon!

SharePoint Saturday Boston 2014


Yes folks, it’s that time of year again, when the days get longer, and the temperature slowly starts to rise. That also means that SharePoint Saturday is back in town! On April 12, 2014, we will be hosting the 7th SPS Boston at the Microsoft office at One Cambridge Center (in Cambridge!)

Check out our awesome lineup of world-class speakers and sessions:

Also, our awesome sponsors (there are still some slots left!), who help make this event a reality every year:

This is a FREE (as in a sponsored SharePint beer) event for all, but there is limited space, so please visit the site to register today!

SharePoint Version Feature Comparisons

I wanted to share a link with my readers that shows a very comprehensive matrix of what features are available across different versions of SharePoint; SharePoint 2007, SharePoint 2010 (no FAST search), SharePoint 2013, and last but certainly not least, Office 365.

Richard Harbridge, a Partner Technology Strategist with Microsoft is responsible for this resource, which is a highly valuable one. Please go here to see the comparison chart.

If you are looking for the most up-to-date feature matrix for SharePoint Online across its different plans (as Office 365 changes frequently), can be found here:

%d bloggers like this: