在Microsoft Bot Framework中使用Activity.text进行路由

时间:2018-11-13 09:10:39

标签: c# botframework

我知道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;
}

1 个答案:

答案 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