Azure Bot框架:处理用户发送多个连续消息的问题

时间:2018-07-23 10:54:54

标签: c# botframework

我的机器人有什么方法可以处理接收来自用户的多条消息?例如,我(机器人)要求用户输入一些信息,而该用户不是只发送一条包含我所需信息的消息,而是以3条多条消息的形式发送该消息。

我的机器人现在的开发方式是,它将第一条消息作为答案,并将下一条消息作为对以下问题的答案。

我希望它起作用的方式是使机器人“等待”用户发送每条消息,也许在每条消息之后等待几秒钟以检查是否收到新消息,然后将它们作为一个消息加入消息并处理。

1 个答案:

答案 0 :(得分:1)

有可能,但我认为这不是开发机器人的推荐做法。

原因是很难跟踪您现在收到的消息, 除了您使用PrivateConversationData

记录

一些伪代码:

await context.PostAsync("please reply 3 message");
context.Wait(ThreeMessageReceivedAsync);


private async Task ThreeMessageReceivedAsync(IDialogContext context,
    IAwaitable<IMessageActivity> result)
{
    context.PrivateConversationData.TryGetValue<string>("FirstMessage", out string firstMessage);
    context.PrivateConversationData.TryGetValue<string>("SecondMessage", out string secondMessage);
    context.PrivateConversationData.TryGetValue<string>("ThirdMessage", out string thirdMessage);

    var message = await result;

    if(string.IsNullOrEmpty(firstMessage))
    {
        context.PrivateConversationData.SetValue<string>("FirstMessage", message.Text);
        context.Wait(ThreeMessageReceivedAsync);
    }
    else if(string.IsNullOrEmpty(secondMessage))
    {
        context.PrivateConversationData.SetValue<string>("SecondMessage", message.Text);
        context.Wait(ThreeMessageReceivedAsync);
    }
    else if(string.IsNullOrEmpty(thirdMessage))
    {
        context.PrivateConversationData.SetValue<string>("ThirdMessage", message.Text);

        // you have got all three message, do your logic to it
        // if you want to join all three message, use variable firstMessage, secondMessage and message.Text for third
    }
}

hope above helps.