[英]Is there a way to “flush” the messages into Facebook Messenger?
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()
方法,但似乎並沒有幫助它更快地發送消息。
我不確定“刷新”給用戶的消息是什么意思,但是您的漫游器應立即顯示鍵入指示符,直到您鍵入消息並且后台有某些過程為止。 為了避免在用戶鍵入消息之前處理信息,可以使用如下的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);
}
...
但是,在應用程序已經給出對上一個問題的答案之前,用戶無法鍵入任何內容是有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.