使用檢查中間件對 Bot 進行偵錯
適用於: SDK v4
本文說明如何使用檢查中間件對 Bot 進行偵錯。 這項功能可讓 Bot Framework 模擬器對進出 Bot 的流量進行偵錯,並查看 Bot 的目前狀態。 您可以使用追蹤訊息將數據傳送至模擬器,然後在對話的任何指定回合中檢查 Bot 的狀態。
我們在建立 Bot 快速入門中使用 Bot Framework v4 在本機建置的 EchoBot,示範如何偵錯和檢查 Bot 的訊息狀態。 您也可以 使用 IDE 或 對 Bot Framework 模擬器進行偵錯,但若要偵錯狀態,您必須將檢查中間件新增至 Bot。 檢查 Bot 範例適用於 C#、 JavaScript、 Java 和 Python。
注意
Bot Framework JavaScript、C# 和 Python SDK 將會繼續受到支援,不過,Java SDK 即將淘汰,最終長期支援將於 2023 年 11 月結束。
使用 Java SDK 建置的現有 Bot 將繼續運作。
針對新的 Bot 建置,請考慮使用 Microsoft Copilot Studio ,並閱讀 選擇正確的 Copilot 解決方案。
如需詳細資訊,請參閱 Bot 建置的未來。
必要條件
- Bot 中間件 和管理 狀態的知識
- 瞭解如何對 SDK 優先 Bot 進行偵錯,以及 使用模擬器測試及偵錯的知識
- Bot Framework 模擬器的安裝
- 安裝 Dev Tunnel (如果您想要偵錯 Azure 中設定為使用其他通道的 Bot)
- C#、JavaScript、Java 或 Python 的檢查 Bot 範例複本
將您的模擬器更新為最新版本
使用 Bot 檢查中間件來偵錯 Bot 之前,請將模擬器更新為 4.15 版或更新版本。 檢查最新版本的更新。
若要檢查模擬器的版本,請選取 [說明],然後在功能表中選取 [關於]。 您會看到目前的模擬器版本。
更新 Bot 程式碼
檢查狀態和檢查中間件是在 Startup.cs 檔案中設定,然後由配接器使用。
Startup.cs
});
services.AddSingleton<ConversationState>();
// Create the Bot Framework Authentication to be used with the Bot Adapter.
AdapterWithInspection.cs
{
public class AdapterWithInspection : CloudAdapter
{
public AdapterWithInspection(BotFrameworkAuthentication auth, IConfiguration configuration, InspectionState inspectionState, UserState userState, ConversationState conversationState, ILogger<IBotFrameworkHttpAdapter> logger)
: base(auth, logger)
{
// Inspection needs credentials because it will be sending the Activities and User and Conversation State to the emulator
var credentials = new MicrosoftAppCredentials(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]);
Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials));
OnTurnError = async (turnContext, exception) =>
{
// Log any leaked exception from the application.
logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");
// Send a message to the user
await turnContext.SendActivityAsync("The bot encountered an error or bug.");
await turnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code.");
// 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");
};
}
更新 EchoBot.cs 檔案中的 Bot 類別。
EchoBot.cs
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var conversationStateProp = _conversationState.CreateProperty<CustomState>("customState");
var convProp = await conversationStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);
var userStateProp = _userState.CreateProperty<CustomState>("customState");
var userProp = await userStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);
await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text} conversation state: {convProp.Value} user state: {userProp.Value}"), cancellationToken);
convProp.Value++;
userProp.Value++;
}
在本機測試 Bot
更新程式代碼之後,您可以在本機執行 Bot,並使用兩個模擬器來測試偵錯功能:一個用來傳送和接收訊息,另一個則用來檢查偵錯模式中的訊息狀態。 若要在本機測試 Bot:
移至終端機中的 Bot 目錄,然後執行下列命令,在本機執行 Bot:
dotnet run
開啟模擬器。 選取 [ 開啟 Bot]。 使用 和 MicrosoftAppId 和 MicrosoftAppPassword 值填入 Bot URL
http://localhost:3978/api/messages
。 如果您有 JavaScript Bot,您可以在 Bot 的 .env 檔案中找到這些值。 如果您有 C# Bot,您可以在 appsettings.json 檔案中找到這些值。 針對 Java Bot,您可以在 application.properties 檔案中找到這些值。 選取 Connect。現在開啟另一個模擬器視窗。 第二個模擬器視窗會以調試程式的形式運作。 依照上一個步驟中所述的指示操作。 核 取 [以偵錯模式 開啟],然後選取 [ 連線]。
此時,您會在偵錯模擬器中看到具有唯一標識碼 (
/INSPECT attach <identifier>
) 的命令。 使用偵錯模擬器中的標識碼複製整個命令,並將它貼到第一個模擬器的聊天方塊中。注意
當您在 Bot 程式代碼中新增檢查中間件之後,每次以偵錯模式啟動模擬器時,都會產生唯一標識符。
現在,您可以在第一個模擬器的聊天方塊中傳送訊息,並在偵錯模擬器中檢查訊息。 若要檢查訊息的狀態,請在偵錯模擬器中選取 [Bot 狀態],並在右側 JSON 視窗中展開值。 您會在偵錯模擬器中看到 Bot 的狀態:
檢查在 Azure 中設定的 Bot 狀態
如果您想要檢查在 Azure 中設定的 Bot 狀態,並連線至頻道(例如 Teams),您必須安裝並執行 Dev Tunnels。
執行 devtunnel
此時,您已將模擬器更新為最新版本,並在 Bot 的程式代碼中新增檢查中間件。 下一個步驟是執行 devtunnel 並設定本機 Bot。 在執行 devtunnel 之前,您必須在本機執行 Bot。
若要在本機執行 Bot:
移至終端機中的 Bot 資料夾,並將 npm 註冊設定為使用 最新的組建
在本機執行 Bot。 您會看到 Bot 公開埠號碼,例如
3978
。開啟另一個命令提示字元,並移至 Bot 的項目資料夾。 執行以下命令:
devtunnel host -a -p 3978
devtunnel 現在已連線到本機執行的 Bot。 複製安全 (HTTPS) 公用 URL。
更新 Bot 資源
既然本機 Bot 已連線到 devtunnel,您可以在 Azure 中設定 Bot 資源以使用 devtunnel URL。
移至 Azure 中的 Bot 資源。 在左側功能表上的 [設定] 底下,選取 [組態]。
將訊息 端點 設定為您複製的 devtunnel URL 位址。 如有必要,請在IP位址後面新增 /api/messages 。 例如:
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages
。選取 [ 啟用串流端點]。
選取 [套用] 以儲存變更。
提示
如果未啟用 [套用],您可以取消核取 [啟用串流端點],然後選取 [套用],然後核取 [啟用串流端點],然後再次選取 [套用]。 您必須確定 已核取 [啟用串流端點 ],並儲存端點的設定。
移至 Bot 的資源群組。
選取 [ 部署],然後選取先前成功部署的 Bot 資源。 從左側功能表中選取 [範本 ], 以取得與 Bot 相關聯之 Web 應用程式的 MicrosoftAppId 和 MicrosoftAppPassword 。
使用 MicrosoftAppId 和 MicrosoftAppPassword 更新 Bot 的組態檔 (appsettings.json for C# 或 .env for JavaScript)。
啟動模擬器,選取 [開啟 Bot],然後在 Bot URL 中輸入
http://localhost:3978/api/messages
。 以您新增至 Bot 組態檔的相同 MicrosoftAppId 和 MicrosoftAppPassword 填入Microsoft應用程式識別碼和Microsoft應用程式密碼。 然後選取 [連線]。您執行中的 Bot 現在已連線到 Azure 中的 Bot 資源。 若要在 網路聊天 中測試 Azure 中的 Bot,請移至您的 Bot 資源,選取 [在 網路聊天 中測試],然後將訊息傳送至 Bot。
啟用偵錯模式
在模擬器中,選取 [偵錯],然後選取 [開始偵錯]。
輸入 Bot URL 的 devtunnel URL (別忘了新增 /api/messages)(例如 ,
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages
。- 針對 [Microsoft應用程式標識符],輸入 Bot 的應用程式識別碼。
- 如需 Microsoft應用程式密碼,請輸入 Bot 的應用程式密碼。
- 也請確定 已核取 [以偵錯模式 開啟]。
- 選取 Connect。
啟用偵錯模式后,模擬器會產生 UUID。 UUID 是每次在模擬器中啟動偵錯模式時所產生的唯一標識碼。
將 UUID 複製並貼到頻道聊天方塊 網路聊天 聊天方塊中的 [測試]。 您會在聊天方塊中看到「附加至會話,所有流量正在復寫以進行檢查」訊息。
您可以在設定的頻道聊天方塊中傳送訊息,開始對 Bot 進行偵錯。 您的本機模擬器會自動更新訊息,其中包含偵錯的所有詳細數據。 若要檢查 Bot 的訊息狀態,請選取 [Bot 狀態 ],然後展開 右側 JSON 視窗中的值 。