c# - 如何在 Microsoft botbuilder 对话框中检查 Bot 发布的消息?
问题描述
我正在使用 Microsoft botbuilder 在 .NET 中创建一个聊天机器人,并将 Web 应用程序机器人代码用作我的模板。我找不到包含从机器人发布给 qna 制造商的用户的文本的变量。我目前正在每次机器人回答用户问题后创建另一个对话框,但我不希望机器人在发布默认消息时执行此操作。当我调试时,我似乎无法找到 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) 之前用默认消息响应,如果它已经做了其他事情。
解决方案
您将不得不自定义您的QnAMakerDialog
. 可在此处获取资源以了解其工作原理。
例如,您可以覆盖在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);
}
}
推荐阅读
- javascript - 如何在jvectormap中添加路径作为参数?
- angular - 如何使用 Angular HttpClient 获取 CSV 数据:JSON.parse 中 JSON 中的意外令牌
- apache-spark - Spark Executor OOM 问题
- ios - Expo.Notifications.addListener() 未触发(iOS 独立应用程序)
- sqlite - 有没有办法知道在当前的 sqlite 数据库会话中是否有任何提交
- npm - "appium &" 不会在 mac 中启动 appium 服务器
- python-3.x - 如何减少深度强化学习算法的内存使用量?
- javascript - 如何在节点js的同一模块文件中使用模块
- android - 调用 Fragment 时活动被销毁
- spring-boot - ElasticSearchRepository 空查询不起作用