Ladění robota pomocí middlewaru kontroly
PLATÍ PRO: SDK v4
Tento článek popisuje, jak ladit robota pomocí kontrolního middlewaru. Tato funkce umožňuje bot Framework Emulatoru ladit provoz do robota a z robota a zobrazit aktuální stav robota. Pomocí zprávy trasování můžete odeslat data do emulátoru a pak zkontrolovat stav robota v libovolném časovém rámci konverzace.
Používáme místně sestavený EchoBot pomocí bot Frameworku v4 v rychlém startu Vytvořit robota, abychom ukázali, jak ladit a kontrolovat stav zpráv robota. Robota můžete také ladit pomocí integrovaného vývojového prostředí nebo ladění pomocí bot Framework Emulatoru, ale pokud chcete ladit stav, musíte do robota přidat kontrolní middleware. Ukázky kontrolních robotů jsou k dispozici pro C#, JavaScript, Javu a Python.
Poznámka:
Sady SDK služby Bot Framework JavaScript, C# a Python budou nadále podporovány, ale sada Java SDK se vyřazuje s konečnou dlouhodobou podporou končící v listopadu 2023.
Stávající roboti sestavení pomocí sady Java SDK budou i nadále fungovat.
Při vytváření nových robotů zvažte použití aplikace Microsoft Copilot Studio a přečtěte si o výběru správného řešení copilotu.
Další informace najdete v tématu Budoucnost vytváření robotů.
Požadavky
- Znalost middlewaru robota a správy stavu
- Znalost ladění robota první sady SDK a testování a ladění pomocí emulátoru
- Instalace bot Framework Emulatoru
- Instalace Dev Tunnelu (pokud chcete ladit robota nakonfigurovaného v Azure tak, aby používal jiné kanály)
- Kopie ukázky kontrolního robota pro C#, JavaScript, Javu nebo Python
Aktualizace emulátoru na nejnovější verzi
Před použitím middlewaru kontroly robota k ladění robota aktualizujte emulátor na verzi 4.15 nebo novější. Zkontrolujte nejnovější verzi aktualizací.
Pokud chcete zkontrolovat verzi emulátoru, vyberte Nápověda a potom v nabídce o aplikaci. Zobrazí se aktuální verze emulátoru.
Aktualizace kódu robota
Kontrolní stav a middleware kontroly se konfigurují v Startup.cs souboru a pak ho adaptér používá.
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");
};
}
Aktualizujte třídu robota v souboru EchoBot.cs .
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++;
}
Místní testování robota
Po aktualizaci kódu můžete spustit robota místně a otestovat funkci ladění pomocí dvou emulátorů: jedné pro odesílání a příjem zpráv a druhý pro kontrolu stavu zpráv v režimu ladění. Místní testování robota:
Přejděte do adresáře robota v terminálu a spuštěním následujícího příkazu spusťte robota místně:
dotnet run
Otevřete emulátor. Vyberte Otevřít robota. Do adresy URL robota zadejte
http://localhost:3978/api/messages
hodnoty MicrosoftAppId a MicrosoftAppPassword. Pokud máte javascriptového robota, můžete tyto hodnoty najít v souboru .env vašeho robota. Pokud máte robota v jazyce C#, můžete tyto hodnoty najít v souboru appsettings.json . V případě robota v Javě najdete tyto hodnoty v souboru application.properties . Vyberte Připojit.Teď otevřete další okno emulátoru. Toto druhé okno emulátoru bude fungovat jako ladicí program. Postupujte podle pokynů popsaných v předchozím kroku. Zaškrtněte políčko Otevřít v režimu ladění a pak vyberte Připojit.
V tomto okamžiku uvidíte příkaz s jedinečným identifikátorem (
/INSPECT attach <identifier>
) v emulátoru ladění. Zkopírujte celý příkaz s identifikátorem z emulátoru ladění a vložte ho do chatovacího pole prvního emulátoru.Poznámka:
Jedinečný identifikátor se vygeneruje při každém spuštění emulátoru v režimu ladění po přidání kontrolního middlewaru do kódu robota.
Teď můžete posílat zprávy v chatovacím poli svého prvního emulátoru a kontrolovat zprávy v emulátoru ladění. Pokud chcete zkontrolovat stav zpráv, vyberte stav robota v emulátoru ladění a rozbalte hodnoty v pravém okně JSON . Stav robota uvidíte v emulátoru ladění:
Kontrola stavu robota nakonfigurovaného v Azure
Pokud chcete zkontrolovat stav robota nakonfigurovaného v Azure a připojit se k kanálům (jako je Teams), budete muset nainstalovat a spustit Dev Tunnels.
Spuštění devtunnelu
V tuto chvíli jste aktualizovali emulátor na nejnovější verzi a přidali do kódu robota kontrolní middleware. Dalším krokem je spuštění devtunnelu a konfigurace místního robota. Před spuštěním devtunnelu musíte spustit robota místně.
Místní spuštění robota:
Přejděte do složky robota v terminálu a nastavte registraci npm tak, aby používala nejnovější buildy.
Spusťte robota místně. Uvidíte, že robot zveřejní číslo portu, jako je
3978
.Otevřete další příkazový řádek a přejděte do složky projektu robota. Spusťte následující příkaz:
devtunnel host -a -p 3978
Devtunnel je teď připojený k místně běžícímu robotovi. Zkopírujte veřejnou adresu URL zabezpečeného protokolu (HTTPS).
Aktualizace prostředku robota
Teď, když je místní robot připojený k devtunnelu, můžete prostředek robota v Azure nakonfigurovat tak, aby používal adresu URL devtunnelu.
Přejděte k prostředku robota v Azure. V nabídce vlevo v části Nastavení vyberte Konfigurace.
Nastavte koncový bod zasílání zpráv na adresu URL devtunnelu, kterou jste zkopírovali. V případě potřeby za IP adresu přidejte /api/messages . Například
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages
.Vyberte Povolit koncový bod streamování.
Výběrem možnosti Použít změny uložte.
Tip
Pokud možnost Použít není povolená, můžete zrušit zaškrtnutí políčka Povolit koncový bod streamování a vybrat Použít, pak zaškrtněte políčko Povolit koncový bod streamování a znovu vyberte Použít. Musíte se ujistit, že je zaškrtnuté políčko Povolit koncový bod streamování a že se uloží konfigurace koncového bodu.
Přejděte do skupiny prostředků vašeho robota.
Vyberte Nasazení a pak vyberte prostředek robota, který se dříve úspěšně nasadil. V nabídce vlevo vyberte šablonu a získejte MicrosoftAppId a MicrosoftAppPassword pro webovou aplikaci přidruženou k robotovi.
Aktualizujte konfigurační soubor robota (appsettings.json pro C# nebo .env pro JavaScript) pomocí MicrosoftAppId a MicrosoftAppPassword.
Spusťte emulátor, vyberte Otevřít robota a zadejte
http://localhost:3978/api/messages
adresu URL robota. Vyplňte ID aplikace Microsoft a heslo aplikace Microsoftu stejným kódem MicrosoftAppId a MicrosoftAppPassword , které jste přidali do konfiguračního souboru našeho robota. Pak vyberte Připojit.Spuštěný robot je teď připojený k vašemu prostředku robota v Azure. Pokud chcete robota otestovat v Azure v Webový chat, přejděte k prostředkům robota, vyberte test v Webový chat a odešlete do robota zprávy.
Povolení režimu ladění
V emulátoru vyberte Ladit a spusťte ladění.
Zadejte adresu URL devtunnelu (nezapomeňte přidat /api/messages) pro adresu URL robota (například
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages
).- Jako ID aplikace Microsoftu zadejte ID aplikace vašeho robota.
- Jako heslo aplikace Microsoftu zadejte tajný kód aplikace vašeho robota.
- Zkontrolujte také, že je zaškrtnuté políčko Otevřít v režimu ladění.
- Vyberte Připojit.
Když je režim ladění povolený, emulátor vygeneruje UUID. UUID je jedinečné ID vygenerované při každém spuštění režimu ladění v emulátoru.
Zkopírujte a vložte UUID do pole Test v Webový chat chatu pro chatovací pole kanálu. V chatovacím poli se zobrazí zpráva "Připojeno k relaci, veškerý provoz se replikuje pro kontrolu".
Ladění robota můžete zahájit odesláním zpráv v chatovacím poli nakonfigurovaného kanálu. Místní emulátor automaticky aktualizuje zprávy o všech podrobnostech pro ladění. Pokud chcete zkontrolovat stav zpráv robota, vyberte Stav robota a rozbalte hodnoty v pravém okně JSON.
Další kroky
- Naučte se ladit robota pomocí souborů přepisu.
- Naučte se ladit dovednost nebo příjemce dovedností.