Get Started Series | Build QnAMaker Azure Bot With Bot Framework SDK V4

In this tutorial, we will learn how to integrate QnA Maker AI Services with Azure Bot Service using Bot Framework SDK V4

QnA Maker service is used to create a knowledge base to add question-and-answer support to your Azure Bot. When you create your knowledge base, you seed it with questions and answers.
 
In this tutorial, you will learn the following.
  1. Create a QnA Maker service and knowledge base.
  2. Train and Publish knowledge base information.
  3. Add QnA Maker Knowledge Bas information to your Bot
  4. Update your bot to query the knowledge base
  5. Test you bot locally
  6. Publish your bot to Azure Bot Service
  7. Test your bot using Web Chat Client
Below are the prerequisites,
  1. The bot created in the previous article. We will add a question-and-answer feature to the bot.
  2. QnA Maker portal is used to create, train, and publish the knowledge base to use with the bot.
Step 1 - Create a QnA Maker service and knowledge base
  • Sign into to the QnA Maker portal with your Azure credentials.
  • Click "Create a knowledge base".
  • Click “Create a QnA Services".
Build QnAMaker Azure Bot with Bot Framework SDK V4
  • It will navigate to Azure Portal. Once there, fill all the below details to proceed

    • Name
    • Subscription
    • Pricing Tier
    • Resource Group
    • Search Location
    • App Name
    • Website Location
Build QnAMaker Azure Bot with Bot Framework SDK V4
  • Once it is created, connect your QnA Services with your knowledge base.
  • Select Microsoft Azure Directory ID.
  • Select Azure Subscription Name.
  • Select available Azure QnA Service.
  • Name your knowledge base.
Build QnAMaker Azure Bot with Bot Framework SDK V4 
  •  Provide the URL from where the data needs to be extracted.
Build QnAMaker Azure Bot with Bot Framework SDK V4 
  • Click “Create your KB” to build a knowledge base.
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Step 2 - Train and Publish knowledge base information
  • Once the knowledge base is created, click “Save and Train” followed by Publish button to publish the knowledge base.
 Build QnAMaker Azure Bot with Bot Framework SDK V4
  • You can click "Create Bot" using this screen or integrate the QnA Maker Services with an existing solution.
 Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Step 3 - Add QnA Maker Knowledge information to your Bot
 
To continue with the below steps, kindly visit my previous article and download the source code.
 
Browse the solution and navigate to the app.settings file.
  1. {  
  2.   "MicrosoftAppId""",  
  3.   "MicrosoftAppPassword""",  
  4.   "ScmType""None",  
  5.     
  6.   "QnAKnowledgebaseId""knowledge-base-id",  
  7.   "QnAAuthKey""qna-maker-resource-key",  
  8.   "QnAEndpointHostName""your-hostname"   
  9. }  
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Field
Value
QnAKnowledgebaseId
The knowledge base ID that the QnA Maker portal generated for you.
QnAAuthKey
The endpoint key that the QnA Maker portal generated for you.
QnAEndpointHostName
The host URL that the QnA Maker portal generated. Use the complete URL, starting with https:// and ending with /qnamaker. The full URL string will look like "look like "https://< >.azure.net/qnamaker".
 
Step 4 - Update your bot to query the knowledge base
  • Add NuGet Package to your project Microsoft.Bot.Builder.AI.QnA
  • Right-click dependencies and select Manage Nuget Package
  • Select Browse Option
  • Type NuGet package “Microsoft.Bot.Builder.AI.QnA”
  • Select the Nuget Package
  • Check the version and click install and accept the prompt.
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Similarly, add Nuget Package Microsoft.Extensions.Configuration 
 
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Navigate to Startup.cs file, add these namespace references.
  1. using Microsoft.Bot.Builder.AI.QnA;  
  2. using Microsoft.Extensions.Configuration;  
And, modify the ConfigureServices method create a QnAMakerEndpoint that connects to the knowledge base defined in the appsettings.json file in Startup.cs.
  1. services.AddSingleton(new QnAMakerEndpoint    
  2. {    
  3.    KnowledgeBaseId = Configuration.GetValue<string>($"QnAKnowledgebaseId"),    
  4.    EndpointKey = Configuration.GetValue<string>($"QnAAuthKey"),    
  5.    Host = Configuration.GetValue<string>($"QnAEndpointHostName")    
  6.  });    
In your EchoBot.cs file, add these namespace references.
  1. using System.Linq;  
  2. using Microsoft.Bot.Builder.AI.QnA;  
 Add a EchoBotQnA connector and initialize it in the bot's constructor to EchoBot.cs.
  1. public QnAMaker EchoBotQnA { get; private set; }  
  2. public EchoBot(QnAMakerEndpoint endpoint)  
  3. {  
  4.    EchoBotQnA = new QnAMaker(endpoint);  
  5. }  
Below the OnMembersAddedAsync( ) method, create the method AccessQnAMaker( ) by adding the following code.
  1. private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)  
  2. {  
  3.    var results = await EchoBotQnA.GetAnswersAsync(turnContext);  
  4.    if (results.Any())  
  5.    {  
  6.       await turnContext.SendActivityAsync(MessageFactory.Text(" results.First().Answer), cancellationToken);  
  7.    }  
  8.    else  
  9.    {  
  10.       await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the Q and A system."), cancellationToken);  
  11.    }  
  12. }  
Now, within OnMessageActivityAsync( ), call your new method AccessQnAMaker( ) by adding the following code.
  1. protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)  
  2. {  
  3.    // First send the user input to your QnA Maker knowledge base  
  4.    await AccessQnAMaker(turnContext, cancellationToken);  
  5.    ...  
  6. }  
Step 5 - Test your bot locally
  • Press F5, Browse the bot emulator and connect with localhost and port number
  • At this point, your bot should be able to answer some questions. Run the bot locally and open it in the Emulator.
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Step 6 - Publish your bot to Azure Bot Service
  • Right-click the solution.
  • Select the Publish option.
  • Select the publish profile (refer to the previous article) and click Publish to proceed. 
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
Step 7 - Test your bot using Web Chat Client
  • Browse the WebApp Bot using Azure Portal
  • Select the Test in WebChat under Bot Management
Build QnAMaker Azure Bot with Bot Framework SDK V4
 
I hope you have enjoyed and learned something new in this article. Thanks for reading and stay tuned for the next article.