有没有办法将邮件“刷新”到Facebook Messenger?

时间:2017-02-27 12:02:44

标签: c# bots botframework facebook-messenger facebook-messenger-bot

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()方法,但它似乎没有帮助它更快地发送消息。

1 个答案:

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

但是,在应用程序已经回复上一个问题之前,用户无法输入任何内容是有道理的。