我知道Microsoft Bot Framework中还有其他链接对话框的方法,但是我试图理解为什么我不能使用活动文本路由到对话框。
请问有人可以这么轻吗?我可能忽略了一些愚蠢的事情,因为此刻我正在服用咖啡因
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
if (activity.Text == "Hello")
{
await Conversation.SendAsync(activity, () => new Dialogs.HelloDialog());
}
else
{
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
}
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
答案 0 :(得分:2)
我将其标记为Bot Framework Dialog Leakage Issue的副本,因为它与相同的基本误解有关。 Conversation.SendAsync
不会将消息转发到您指定的对话框,它只是将消息发送到对话,该对话会自动使用堆栈顶部的任何对话框。这是我对另一个问题的回答的相关内容:
我认为您可能误解了
Conversation.SendAsync()
。 MakeRoot委托不是 功能导航至所需的任何对话框。只有在 对话的开始,它用于创建对话 对话的根对话框。如果对话已经在进行中,Conversation.SendAsync()
将活动发送到任何对话框 堆栈顶部,将忽略MakeRoot委托。你可以阅读 有关对话框和对话流程的更多信息,请参见: https://docs.microsoft.com/en-us/azure/bot-service/bot-service-design-conversation-flow?view=azure-bot-service-3.0如果您想在对话过程中开始对话, 应该从另一个对话框而不是从您的消息中执行 控制器。一种典型的方法是使用
context.Forward()
: https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-manage-conversation-flow?view=azure-bot-service-3.0#invoke-the-new-order-dialog