簡體   English   中英

有沒有一種方法可以將消息“刷新”到Facebook Messenger中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM