共用方式為


處理用戶中斷

適用於: SDK v4

處理中斷是強健機器人的重要層面。 使用者不會總是遵循您定義的對話流程逐步進行。 他們可能會嘗試在過程中提出問題,或者只是想取消這個過程,而不是完成它。 本文說明處理 Bot 中用戶中斷的一些常見方式。

注意

Bot Framework JavaScript、C# 和 Python SDK 將會繼續受到支援,不過,Java SDK 即將淘汰,最終長期支援將於 2023 年 11 月結束。

使用 Java SDK 建置的現有 Bot 將繼續運作。

針對新的 Bot 建置,請考慮使用 Microsoft Copilot Studio ,並閱讀 選擇正確的 Copilot 解決方案

如需詳細資訊,請參閱 Bot 建置的未來。

必要條件

核心 Bot 範例會使用 Language Understanding (LUIS) 來識別用戶意圖;不過,識別使用者意圖並不是本文的重點。 如需識別使用者意圖的相關信息,請參閱 自然語言理解將自然語言理解新增至 Bot

注意

Language Understanding (LUIS) 將於 2025 年 10 月 1 日淘汰。 從 2023 年 4 月 1 日起,您將無法建立新的 LUIS 資源。 新版的語言理解現在已提供作為 Azure AI 語言的一部分。

對話式語言理解(CLU)是 Azure AI 語言的一項功能,是 LUIS 的更新版本。 如需 Bot Framework SDK 中語言理解支援的詳細資訊,請參閱 自然語言理解

關於此範例

本文中使用的範例會建立航班預約 Bot 的模型,該 Bot 會使用對話從使用者取得航班資訊。 在與 Bot 交談期間,用戶隨時都可以發出 說明取消 命令,以造成中斷。 有兩種類型的中斷處理:

  • 回合層級:略過回合層級的處理,但保留在堆疊上的對話及已提供的資訊。 在下一個回合中,從對話中斷的地方繼續。
  • 對話框層級:完全取消處理,讓 Bot 可以重新開始。

定義及實作中斷邏輯

首先,定義並實作 helpcancel 中斷。

若要使用對話框,請安裝 Microsoft.Bot.Builder.Dialogs NuGet 套件。

Dialogs\CancelAndHelpDialog.cs

實作 類別 CancelAndHelpDialog 來處理用戶中斷。 可取消的對話框, BookingDialogDateResolverDialog 衍生自這個類別。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

CancelAndHelpDialog 類別中,OnContinueDialogAsync 方法會呼叫 InterruptAsync 方法,以檢查使用者是否已中斷正常流程。 如果流程中斷,則會呼叫基類方法;否則,會返回 InterruptAsync 的返回值。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

如果使用者輸入「說明」,則 InterruptAsync 方法會傳送訊息,然後呼叫 DialogTurnResult (DialogTurnStatus.Waiting) 以指出頂端的對話正在等候用戶的回應。 如此一來,交談流程只會中斷一個回合,而下一個回合會從交談離開的地方繼續進行。

如果使用者輸入 「cancel」,它會在其內部對話內容上呼叫 CancelAllDialogsAsync ,這會清除其對話堆棧,並導致其結束狀態為已取消,且沒有結果值。 對於稍後顯示的 MainDialog,會顯示預約對話框已結束並返回空值,這類似於使用者選擇不確認其預約的情況。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

在每回合中檢查是否有中斷

實作中斷處理類別之後,請檢閱當此 Bot 收到來自使用者的新訊息時會發生什麼情況。

Dialogs\MainDialog.cs

當新的訊息活動送達時,Bot 會執行 MainDialogMainDialog 會提示使用者它可以提供什麼協助。 然後它會在MainDialog.ActStepAsync的方法中啟動BookingDialog,並呼叫BeginDialogAsync,如下所示。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

接下來,在MainDialog類別的FinalStepAsync方法中,預約對話框已結束,並將預約視為完成或取消。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

中的 BookingDialog 程式代碼不會在此顯示,因為它與中斷處理不直接相關。 它用來提示使用者輸入預約詳細數據。 您可以在 Dialogs\BookingDialogs.cs 中找到該程式代碼。

處理非預期的錯誤

配接器的錯誤處理程式會處理 Bot 中未攔截的任何例外狀況。

AdapterWithErrorHandler.cs

在範例中,配接器處理程式 OnTurnError 會收到 Bot 回合邏輯擲回的任何例外狀況。 如果發生例外狀況,處理程式會刪除目前對話的狀態,以防止 Bot 因為進入錯誤狀態而陷入錯誤迴圈。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

註冊服務

Startup.cs

最後,在 Startup.cs 中,Bot 被建立為暫時性的,並且在每一回合中都會建立 Bot 的一個新實例。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

如需參考,以下是呼叫中用來建立上述 Bot 的類別定義。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

警告

您要尋找的範例看起來已經移動! 放心,我們正在努力解決這個問題。

測試聊天機器人

  1. 如果您尚未這麼做,請安裝 Bot Framework 模擬器
  2. 在本機電腦上執行範例。
  3. 啟動模擬器、連線至 Bot,並傳送訊息,如下所示。

其他資訊

  • C#JavaScriptPythonJava 中的 24.bot-authentication-msgraph 範例會示範如何處理註銷要求。 它會使用類似此處所示的模式來處理中斷。

  • 您應該傳送預設回應,而不是不執行任何動作,讓使用者想知道發生了什麼事。 默認回應應該告訴使用者 Bot 瞭解哪些命令,讓使用者可以回到正軌。

  • 在回合內容的任何時間點,回合內容的 響應 屬性會指出 Bot 是否已在此回合傳送訊息給使用者。 回合結束之前,您的 Bot 應該傳送一些訊息給使用者,即使是對其輸入的簡單確認。