Implementing the QnA maker with the Bot framework.
1.qnamaker.ai - subscription and knowledge base id
2.Develop a knowledge base
3.Install the nugget (Install-Package QnAMakerDialog)
Code:
MessagesController:
internal static IDialog<object> MakeRoot()
{
return Chain.From(() => new Dialogs.QnADialog());
}
/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
await Conversation.SendAsync(activity,MakeRoot);
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
QnADialog:
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
using QnAMakerDialog;
using System;
using System.Threading.Tasks;
namespace FastTrack_Bot.Dialogs
{
[Serializable]
[QnAMakerService("-----------------------------", "------------------------")]
public class QnADialog : QnAMakerDialog<object>
{
public override async Task NoMatchHandler(IDialogContext context, string originalQueryText)
{
await context.PostAsync($"Sorry, I couldn't find an answer for '{originalQueryText}'.");
context.Wait(MessageReceived);
}
/// <summary>
/// This is the default handler used if no specific applicable score handlers are found
/// </summary>
public override async Task DefaultMatchHandler(IDialogContext context, string originalQueryText, QnAMakerResult result)
{
// ProcessResultAndCreateMessageActivity will remove any attachment markup from the results answer
// and add any attachments to a new message activity with the message activity text set by default
// to the answer property from the result
var messageActivity = ProcessResultAndCreateMessageActivity(context, ref result);
messageActivity.Text = $"I found an answer that might help...{result.Answer}.";
await context.PostAsync(messageActivity);
context.Wait(MessageReceived);
}
/// <summary>
/// Handler to respond when QnAMakerResult score is a maximum of 50
/// </summary>
[QnAMakerResponseHandler(50)]
public async Task LowScoreHandler(IDialogContext context, string originalQueryText, QnAMakerResult result)
{
var messageActivity = ProcessResultAndCreateMessageActivity(context, ref result);
messageActivity.Text = $"I found an answer that might help...{result.Answer}.";
await context.PostAsync(messageActivity);
context.Wait(MessageReceived);
}
}
}
Comments
Post a Comment