0

TL; DR:即使我从MessagesController.cs的第一行发送消息,bot也需要2-9秒才能向用户发送任何消息。有没有办法将消息“刷新”到Facebook Messenger中?


我已经使用Bot框架为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); 

第二机器人确实没有更多的工作(调用各种网络的API),但由于这些行是第一个在控制器中,我希望打字指示要立即发送给用户,在此之后,机器人可以继续工作。

但是,似乎这些消息(包括打字指示符)在机器人完成其工作之前不会发送。

有没有办法将消息“刷新”给用户以立即发送打字指示符,还是遇到其他问题?


更新:我已经试过ConnectorClient.Dispose()方法,但它似乎并没有帮助它得更快发送消息。

回答

3

我不确定你的意思是将这些消息“冲洗”给用户,但是你的机器人应该立即显示输入指示符,直到你键入一条消息并且在后台有一些进程。为了避免处理信息,直到用户键入一个消息,你可以使用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); 
     } 
     ... 

然而,它是有道理的,直到应用程序已经给出答案回到前面的问题,用户可以不输入任何内容。

相关问题