有没有办法让我的机器人处理从用户接收多条消息?例如,我(机器人)要求用户输入一些信息,而该用户不是只发送一条包含我需要的信息的消息,而是在3条多条消息中发送。
按照我现在开发的机器人的方式,它将第一条消息作为答案处理,并将下一条消息作为以下问题的答案进行处理。
我希望它的工作方式是让机器人“等待”用户发送每条消息,可能在每条消息后等待几秒钟以检查没有收到新的消息,然后将它们作为一条消息加入并处理。
发布于 2018-07-24 10:19:52
这是可能的,但我不认为这是开发机器人时推荐的做法。
原因是很难跟踪您现在正在接收的是哪条消息,除非您使用PrivateConversationData记录它
一些psuedo代码:
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.https://stackoverflow.com/questions/51477146
复制相似问题