在 Implement global message handlers 有說明如何透過 global message handlers 來處理一些 help, cancel 等等的全域處理。例如在一個對話當中,使用者輸入了取得待批示的指令,這時需要將處理待批示清單的 Dialog 叫出來,並且將目前處理中的對話堆疉清除(this.task.Reset())。
這裡要注意的是 this.task.Reset() 一定要放在最後面,不然會噴錯哦! 例如,
1 | protected override async Task PostAsync(IActivity item, string state, CancellationToken token) |
另外,如果無法在繼承 ScorableBase 的 Class 中去 Reset DialogStack 的話。
在 Dialog 中則可以透過 context.EndConversation 去清 DialogStack (非常感謝同事 Marty 的分享),如下,
1 | context.EndConversation(EndOfConversationCodes.CompletedSuccessfully); |
也可以參考 Terminate all dialogs and exit conversation in MS Bot Framework when the user types “exit”, “quit” etc 的方式,如下,
1 | using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, (IMessageActivity)context.Activity)) |
如果在 Dialog 中直接 call context.Reset(); 可是會噴錯的哦!