Botframework MS Bot框架-时间问题

Botframework MS Bot框架-时间问题,botframework,Botframework,我很少注意到这一点,但肯定足以成为一个问题。如果你提前输入,预期会出现你知道的问题,机器人有时会无序回答问题。例如,假设您有一个比萨饼订购机器人,它响应“我想订购比萨饼”,第一个问题总是“比萨饼的尺寸是多少?” 假设有一个名为RootDialog和OrderPizzaDialog的对话框。正常流量为: Bot: starts in RootDialog User: "I want to order a pizza" User: "Large" Bot: forwards to OrderPizz

我很少注意到这一点,但肯定足以成为一个问题。如果你提前输入,预期会出现你知道的问题,机器人有时会无序回答问题。例如,假设您有一个比萨饼订购机器人,它响应“我想订购比萨饼”,第一个问题总是“比萨饼的尺寸是多少?”

假设有一个名为RootDialog和OrderPizzaDialog的对话框。正常流量为:

Bot: starts in RootDialog
User: "I want to order a pizza"
User: "Large"
Bot: forwards to OrderPizzaDialog
Bot: "What size pizza?"
Bot: "Ok, one large pizza..."
... bunch of pizza options, pizza is ordered ...
Bot: returns to RootDialog
但有时,当你快速键入“我想点一份比萨饼”,然后立即键入“大号”时,并不总是这样,但可能每15次中就有1次会发生这种情况:

Bot: starts in RootDialog
User: "I want to order a pizza"
User: "large"
Bot: still in RootDialog for some reason "I don't understand 'large'"
Bot: forwards to OrderPizzaDialog
Bot: "What size pizza?"
User: "large" ( had to answer large again because somehow the first large went to RootDialog )
Bot: "Ok, one large pizza..."
... bunch of pizza options, pizza is ordered ...
Bot: returns to RootDialog

我理解异步web.api调用如何实现这一点,但是对于聊天机器人框架,我希望能够进行一些额外的处理,以确保按照用户键入的顺序处理用户输入。正在跟踪并发送到web.api处理程序的输入计数或其他内容,以确保它等待尚未收到的消息。这不是在MS Bot框架中处理的吗?

Bot只是一个web应用程序。如果按照接收的顺序处理所有消息对您的bot很重要,那么您不能将bot横向扩展到多个服务器,除非您在连接器和bot服务器之间还有某种智能消息代理。大多数机器人程序只是以一种方式编写的,即消息顺序无关紧要,或者丢弃并忽略无序消息


也就是说,.NETSDK确实确保bot接收的消息按接收顺序排队和处理。这里有一个名为LocalMutualExclusion的类:它为bot当前处理的每个活动会话都有一个信号量,并且每个会话只允许处理一个活动。

在“”部分中,我们可以发现:
bot框架将尽可能保留消息顺序。但是,一般来说,无法保证消息传递顺序,因为通道最终负责消息传递,并且可能会对消息重新排序。为了降低消息以错误顺序传递的风险,您可以选择在消息之间实施时间延迟。
谢谢。有没有关于推迟的建议?MessageController还是IActivityLogger?这有关系吗?其实,它并不是“仅仅”一个web应用程序。据说这是一个聊天机器人框架。在单服务器场景中处理订单当然是可能的,甚至添加对MessageBroker的支持也是可能的。我认为答案是这个框架还没有实现。谢谢你对锁的洞察。我很好奇你的评论。您是否知道任何现实世界中的聊天机器人场景都不关心以何种顺序处理消息?我的意思是,我想我可以看到,在现实生活中,如果你和一个人交谈,问了一大堆他们不一定会按顺序回答的问题。但这就是我们试图用聊天机器人模仿的行为吗?