Botframework Microsoft.Bot.Builder.CognitiveServices.QnAMaker.QnAMakerDialog如何覆盖找不到的内容?

Botframework Microsoft.Bot.Builder.CognitiveServices.QnAMaker.QnAMakerDialog如何覆盖找不到的内容?,botframework,microsoft-cognitive,qnamaker,Botframework,Microsoft Cognitive,Qnamaker,我正在使用QnAMakerDialog,不知道如何覆盖未找到的。我可以重写RespondFromQnAMakerResultAsync,但在找不到答案时不会调用它。我尝试将默认消息设置为null或空字符串,但QnAMakerDialog自动响应未找到匹配项!当它找不到匹配的时候 我不希望在找不到匹配项时收到消息,因为我只是将消息转发到LuisDialog。如何停止此消息 旁注:我知道一些Gary的家伙有一个不同版本的QnAMakerDialog可以做到这一点,但我真的很想使用微软的标准版本。这可

我正在使用QnAMakerDialog,不知道如何覆盖未找到的。我可以重写RespondFromQnAMakerResultAsync,但在找不到答案时不会调用它。我尝试将默认消息设置为null或空字符串,但QnAMakerDialog自动响应未找到匹配项!当它找不到匹配的时候

我不希望在找不到匹配项时收到消息,因为我只是将消息转发到LuisDialog。如何停止此消息


旁注:我知道一些Gary的家伙有一个不同版本的QnAMakerDialog可以做到这一点,但我真的很想使用微软的标准版本。这可能吗?

那个盖瑞是盖瑞,很漂亮。他在QnAMaker上做得很好,特别是几天前,他通过一个包提供了对QnAMaker API v3的访问,与QnAMakerDialog相比,该包提供了许多新特性

对于每个来到您的问题并寻求类似答案的用户,您一定要看看他的软件包:

它是开源的!诸如此类

关于努吉

有了他的软件包,你可以直接覆盖NoMatchHandler,你就完成了

对于那些不愿意使用第三方软件包的人,即使你有代码,官方QnAMakerDialog也来自Microsoft.Bot.Builder.CognitiveServices软件包,其来源是。。。还有

因此,如果您查看QnAMakerDialog.cs,您将看到所需的一切都在MessageReceivedAsync方法中,特别是消息通过以下方式发送:

如您所见:

MessageReceivedAsync无法轻松重写

即使使用new隐藏此方法并复制粘贴除行之外的所有方法,您也会遇到一些问题,例如serviceCfg等内部属性无法在您自己的命名空间中使用

所以最后一个选项是从MicrosoftGithub的项目中复制所有QnA类,只是为了删除这一行

编辑:

正如您在上所看到的,围绕此问题有几个悬而未决的问题:


我希望软件包中很快会有一个集成,因为已经提供了几个Pull请求

是的,在覆盖了Microsoft.Bot.Builder.CognitiveServices.QnAMakerDialog中的每个虚拟方法之后,我得出了与您相同的结论。这不是我想做的事情。我安装了Gary的代码,效果很好。这并不是说我反对第三方代码或开源,我只是想确定我是否下载了不必要的东西,我实际上可以轻松地完成,而不需要。谢谢你,非常感谢加里·佩蒂。
await context.PostAsync(qnaMakerResults.ServiceCfg.DefaultMessage);