我正在使用多个对话框。有些使用 formbuilder,有些使用 ResultAfter 方法来自定义提示值。我想要一种方法来检查退出词(如停止、退出等)的传入消息。
我认为 StartAsync 函数将是一个好的开始。看到所有对话框都是从我的 RootDialog 转发的,我在 RootDialog 中实现了这个:
public override async Task StartAsync(IDialogContext context)
{
string[] stopStrings = { "quit", "cancel", "exit" };
var msg = context.Activity.AsMessageActivity().Text;
if (stopStrings.Any(msg.Contains))
{
await context.PostAsync("You cancelled.");
context.Done(true);
}
else
{
context.Wait(this.MessageReceived);
}
}
当我要求机器人“停止”时,它成功地告诉我我取消了。但是在我发送的下一条消息中,我收到了这个错误:
Exception thrown: 'System.Collections.Generic.KeyNotFoundException'
在我的 MessageController 中的这一行:
await Conversation.SendAsync(activity, () => new RootDialog());
现在我不确定没有找到什么密钥,以及为什么它会向我发送这个。帮助表示赞赏!