使用Fiddler,我可以看到当查询传递给我的机器人应用程序时,LUIS会返回正确的JSON对象。它甚至包含了正确的实体和意图列表。然而,由于我的类设置可能有误,每次调用时我都会收到InvalidIntentHandlerException,这阻止了我向用户发送消息。我的意图名称与我在LUIS中看到的一致,所以我不知道什么被认为是无效的。
以下是结构:
namespace BotApplication1.Dialogs{ [LuisModel("value...", "value...",)] //已移除,但在代码中有效,因为Fiddler显示这会导致正确的端点 [Serializable] public class MyDialog : LuisDialog<object> //也尝试了LuisDialog<string> { [LuisIntent("None")] public async Task None(IDialogContext context, LuisServiceResult result) //我还尝试了LuisResult而不是LuisServiceResult,结果没有变化。 { await context.PostAsync("我不明白。"); await Task.Delay(1000); await context.PostAsync("你在说什么?"); } [LuisIntent("MessageDelete")] public async Task MessageDelete(IDialogContext context, LuisServiceResult result) { await context.PostAsync($"消息已删除!"); } }}
调试输出:
Exception thrown: 'Microsoft.Bot.Builder.Dialogs.InvalidIntentHandlerException' in mscorlib.dll错误: None //由LuisDialog类返回给MessageController的错误。即使我可以看到LUIS返回了一个有效的意图而不是"None",它仍然显示"None"
编辑:另外,我在输出中看到了这个,但我不确定这是否重要:Service url localhost:6986 is not trusted and JwtToken cannot be sent to it.
这与应用程序连接的端口不同。
回答:
当我将所有对LuisServiceResult的引用替换为LuisResult时,错误消失了,我的意图方法开始生效。我仍然希望能够使用LuisServiceResult,因为它包含更多信息;然而,这是作业的一部分,所以这满足了我的immediate需要。