TL; DR :即使我从MessagesController.cs
的第一行发送消息,机器人也需要2-9秒才能向用户发送任何消息。
我使用Bot Framework为Facebook Messenger创建了几个机器人,我注意到其中一个比另一个慢得多。
两个机器人都将下面的代码作为MessagesController.cs
中的第一行。这应该将打字指示器发送给用户。
一个僵尸程序一直需要2秒才能在Facebook上向用户显示此输入指示,而另一个需要9秒。
Activity typing = activity.CreateReply(null);
typing.ServiceUrl = activity.ServiceUrl;
typing.Type = ActivityTypes.Typing;
ConnectorClient connector = new ConnectorClient(new Uri(typing.ServiceUrl));
await connector.Conversations.SendToConversationAsync(typing);
第二个机器人确实做了很多工作(调用各种Web API),但由于这些行是控制器中的第一个,我希望打字指示器立即发送给用户,之后机器人可以继续做这是工作。
但是,在机器人完成其工作之前,似乎不会发送消息(包括输入指示符)。
有没有办法将消息“刷新”给用户以立即发送打字指示,或者我是否遇到其他问题?
更新:我尝试了ConnectorClient.Dispose()
方法,但它似乎没有帮助它更快地发送消息。
答案 0 :(得分:1)
我不确定你向用户“刷新”消息是什么意思,但你的机器人应该立即显示打字指示器,直到你输入消息并且后台有一些进程。为避免在用户键入消息之前处理信息,您可以使用如下所示的ActivityType:
if (activity.Type == ActivityTypes.Message)
{
Activity typing = activity.CreateReply(null);
typing.ServiceUrl = activity.ServiceUrl;
typing.Type = ActivityTypes.Typing;
ConnectorClient connector = new ConnectorClient(new Uri(typing.ServiceUrl));
await connector.Conversations.SendToConversationAsync(typing);
}
else
{
HandleSystemMessage(activity);
}
...
但是,在应用程序已经回复上一个问题之前,用户无法输入任何内容是有道理的。