亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 MessageController 中為自定義事件調用自定義對話框

如何在 MessageController 中為自定義事件調用自定義對話框

C#
MM們 2022-06-19 16:42:38
問題陳述:當自定義事件發送到機器人時,我想從 MessageController 調用對話框。設置:我有一個使用 Microsoft Bot Framework [v3.15.3] 構建的機器人我有一組自定義事件,這些事件從外部系統發送到機器人,以通知機器人并要求它執行操作。[例如,MarkUserAsOfflineInBackEndStore ShowExternalActionCompletedMessageToUser]我的用戶使用具有網絡聊天連接的門戶網站連接到機器人。這還會向機器人發送自定義事件,以通知機器人有關用戶操作[示例UserClickedOnLogoutFromSite,userNavigatedToDifferentPage]對于這些事件,機器人也必須采取一些行動。問題陳述:從我的消息控制器,我必須根據傳入的不同事件重定向到不同的對話框。我當前的設置如下: using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity)) {     if (activity.Type == ActivityTypes.Event)     {         var eventDialog = GetEventDialog(scope, activity);         if (eventDialog != null)         {              await Conversation.SendAsync(activity, () => eventDialog).ConfigureAwait(false);         }     }     else     {          await Conversation.SendAsync(activity, () => scope.Resolve<RootDialog>()).ConfigureAwait(false);     }}我希望用戶能夠與機器人交談而不會出錯,而不管正在發生的事件如何。這意味著如果機器人正在等待使用context.Wait(...)事件的用戶輸入,則不應導致意外行為。我探索了使用調用對話框,context.Call但找不到在 messagecontroller 中獲取上下文引用的推薦方法。在此處尋找有關如何設置代碼的建議。在我的基本場景中,當我一次發送一個消息,一次發送一個事件而無需等待時,它似乎工作正常。但是通過復雜的對話框,我得到“對不起,我的機器人代碼有錯誤”。
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

您的問題似乎是基于MakeRootConversation.SendAsync. 委托不能用于控制將活動發送到哪個對話框。您必須傳遞一個委托而不只是一個對話框的原因是因為在大多數情況下不應該構造新的對話框。背后的想法Conversation.SendAsync是將活動發送到堆棧頂部的任何對話框。從文檔中:

MakeRoot工廠方法僅對新對話調用,因為現有對話在數據中具有對話堆棧和狀態序列化IMessageActivity。

雖然我不知道您嘗試做什么的詳細信息,但我認為您應該能夠以不需要使用對話框的方式響應大多數事件。如果您確定要將這些事件發送到對話框,則需要記住只有一個對話框堆棧并且堆棧頂部只有一個對話框,這意味著您需要確保所有對話框能夠優雅地處理所有可能的事件。請查看文檔以更好地理解對話和對話流程:https ://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-manage-conversation-flow?view =azure-bot-service-3.0


查看完整回答
反對 回復 2022-06-19
  • 1 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號