0

TL;DR:机器人需要 2-9 秒才能向用户发送任何消息,即使我从MessagesController.cs.


我使用 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()方法,但它似乎无助于加快发送消息的速度。

4

1 回答 1

1

我不确定您将消息“刷新”给用户是什么意思,但您的机器人应该立即显示输入指示器,直到您输入消息并且后台有一些进程。为了避免在用户输入消息之前处理信息,您可以像这样使用 ActivityTypes:

        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);
        }
        ...

但是,在应用程序已经对上一个问题给出答案之前,用户不能输入任何内容是有道理的。

于 2017-03-08T22:46:24.400 回答