共用方式為


將追蹤活動新增至 Bot

適用於: SDK v4

追蹤活動是 Bot 可以傳送至 Bot Framework 模擬器的活動。 您可以使用追蹤活動對 Bot 進行互動式偵錯,因為這些活動可讓您檢視 Bot 在本機執行時的資訊。

追蹤活動只會傳送至模擬器,而不是傳送至任何其他用戶端或通道。 模擬器會在記錄中顯示它們,但不會顯示主要聊天面板。

  • 透過回合內容傳送的追蹤活動會透過 在回合內容上註冊的傳送活動處理程式 傳送。
  • 透過回合內容傳送的追蹤活動會藉由套用交談參考來與輸入活動相關聯,如果有的話。 對於主動式訊息,標識碼 的回復 將會是新的 GUID。
  • 不論其傳送方式為何,追蹤活動永遠不會設定響應的旗標。

注意

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

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

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

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

使用追蹤活動

若要在模擬器中查看追蹤活動,您需要 Bot 傳送追蹤活動的案例,例如擲回例外狀況,以及從適配卡的開啟錯誤處理程式傳送追蹤活動。

若要從 Bot 傳送追蹤活動:

  1. 建立新的活動。
    • 將其必要的 類型 屬性設定為 「trace」。
    • 或者,視追蹤情況設定其名稱、標籤、值和實值類型屬性。
  2. 使用回合內容對象的傳送活動方法來傳送追蹤活動。
    • 這個方法會根據傳入活動,為活動的其餘必要屬性新增值。 這些屬性包括 頻道標識碼服務 URL來自收件者 屬性。

若要在模擬器中檢視追蹤活動:

  1. 在本機電腦上執行 Bot。
  2. 使用模擬器進行測試。
    • 與 Bot 互動,並使用案例中的步驟來產生追蹤活動。
    • 當 Bot 發出追蹤活動時,追蹤活動會顯示在模擬器記錄中。

以下是追蹤活動,您可能會看到您是否執行 Core Bot,而不需要先設定 Bot 所依賴的 QnAMaker 知識庫。

模擬器中追蹤活動輸出的螢幕快照。

將追蹤活動新增至適配卡的錯誤處理程式

適配卡 的開啟錯誤 處理程式會攔截在回合期間從 Bot 擲回的任何其他未攔截例外狀況。 錯誤處理程式是追蹤活動的良好位置,因為您可以將易記訊息傳送給使用者,並將例外狀況的偵錯資訊傳送給模擬器。

此範例程式代碼來自 Core Bot 範例。 請參閱 C#、JavaScriptPythonJava 的完整範例。

配接器的 OnTurnError 處理程式會建立追蹤活動,以包含例外狀況資訊,並將其傳送至模擬器。

AdapterWithErrorHandler.cs

    {
        // Log any leaked exception from the application.
        // NOTE: In production environment, you should consider logging this to
        // Azure Application Insights. Visit https://aka.ms/bottelemetry to see how
        // to add telemetry capture to your bot.
        logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");

        // Send a message to the user
        var errorMessageText = "The bot encountered an error or bug.";
        var errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.IgnoringInput);
        await turnContext.SendActivityAsync(errorMessage);

        errorMessageText = "To continue to run this bot, please fix the bot source code.";
        errorMessage = MessageFactory.Text(errorMessageText, errorMessageText, InputHints.ExpectingInput);
        await turnContext.SendActivityAsync(errorMessage);

        if (conversationState != null)
        {
            try
            {
                // Delete the conversationState for the current conversation to prevent the
                // bot from getting stuck in a error-loop caused by being in a bad state.
                // ConversationState should be thought of as similar to "cookie-state" in a Web pages.
                await conversationState.DeleteAsync(turnContext);
            }
            catch (Exception e)
            {
                logger.LogError(e, $"Exception caught on attempting to Delete ConversationState : {e.Message}");
            }
        }

        // Send a trace activity, which will be displayed in the Bot Framework Emulator
        await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
    };
}

下一步