我正在使用Microsoft botbuilder在.NET中创建聊天机器人,并使用网络应用程序bot代码作为模板。 我找不到包含从Qna制造商向Bot发给用户的文本的变量。每次机器人回答用户的问题后,我目前正在创建另一个对话框,但我不希望机器人在发布默认消息时执行此操作。 当我调试时,似乎无法找到qnamaker的答案存储在哪里。
如果有人知道答案存储在哪里以及如何访问答案,这将非常有帮助,或者可以检查对话框中的最新消息。
当前,我的根对话框包含以下代码段:
await context.Forward(new BasicQnAMakerDialog(), AfterAnswerAsync, message, CancellationToken.None);
转发的方法是:
private async Task AfterAnswerAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
context.Call(new PostAnswerDialog(), AfterPost);
}
我想检查机器人是否在context.Call(new PostAnswerDialog(),AfterPost)之前使用默认消息进行响应,以及是否还要执行其他操作。
答案 0 :(得分:1)
您将必须自定义QnAMakerDialog
。 here中提供了源,以了解其工作原理。
例如,您可以覆盖在过程结束时(无论是否匹配)调用的DefaultWaitNextMessageAsync
方法:
// Dialog for QnAMaker GA service
[Serializable]
public class BasicQnAMakerDialog : QnAMakerDialog
{
// Go to https://qnamaker.ai and feed data, train & publish your QnA Knowledgebase.
// Parameters to QnAMakerService are:
// Required: qnaAuthKey, knowledgebaseId, endpointHostName
// Optional: defaultMessage, scoreThreshold[Range 0.0 – 1.0]
public BasicQnAMakerDialog() : base(new QnAMakerService(new QnAMakerAttribute(ConfigurationManager.AppSettings["QnAAuthKey"], ConfigurationManager.AppSettings["QnAKnowledgebaseId"], "No good match in FAQ.", 0.5, 1, ConfigurationManager.AppSettings["QnAEndpointHostName"])))
{
}
protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
{
if (result.Answers.Count > 0)
{
// DO YOUR LOGIC HERE
await context.PostAsync("Case where you have matching results");
}
await base.DefaultWaitNextMessageAsync(context, message, result);
}
}