Sdílet prostřednictvím


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.

Pro nové vytváření robotů zvažte použití Power Virtual Agents a přečtěte si o výběru správného řešení chatovacího robota.

Další informace najdete v tématu Budoucnost vytváření robotů.

Požadavky

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.5 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:

  1. 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
    
  2. 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.

  3. 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řipojení.

  4. 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.

  5. 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í:

    stav robota

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 nástroj ngrok.

Spustit ngrok

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í nástroje ngrok a konfigurace místního robota. Před spuštěním nástroje ngrok musíte spustit robota místně.

Místní spuštění robota:

  1. Přejděte do složky robota v terminálu a nastavte registraci npm tak, aby používala nejnovější buildy.

  2. Spusťte robota místně. Uvidíte, že robot zveřejní číslo portu, jako je 3978.

  3. Otevřete další příkazový řádek a přejděte do složky projektu robota. Spusťte následující příkaz:

    ngrok http 3978
    
  4. ngrok je teď připojený k místně běžícímu robotovi. Zkopírujte zabezpečenou veřejnou IP adresu (HTTPS).

    Úspěch ngroku

Aktualizace prostředku robota

Teď, když je místní robot připojený k nástroji ngrok, můžete prostředek robota v Azure nakonfigurovat tak, aby používal adresu URL nástroje ngrok.

  1. Přejděte k prostředku robota v Azure. V nabídce vlevo v části Nastavení vyberte Konfigurace.

    1. Nastavte koncový bod zasílání zpráv na IP adresu ngrok, kterou jste zkopírovali. V případě potřeby za IP adresu přidejte /api/messages . Například https://e58549b6.ngrok.io/api/messages.

    2. Vyberte Povolit koncový bod streamování.

      Nastavení koncového bodu

    3. 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.

  2. Přejděte do skupiny prostředků vašeho robota.

    1. 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.

      Získání vstupů

    2. Aktualizujte konfigurační soubor robota (appsettings.json pro C# nebo .env pro JavaScript) pomocí MicrosoftAppId a MicrosoftAppPassword.

  3. 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řipojení.

  4. 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í

  1. V emulátoru vyberte Ladit a spusťte ladění.

  2. Zadejte IP adresu ngrok (nezapomeňte přidat /api/messages) pro adresu URL robota (napříkladhttps://e58549b6.ngrok.io/api/messages).

    1. Jako ID aplikace Microsoftu zadejte ID aplikace vašeho robota.
    2. Jako heslo aplikace Microsoftu zadejte tajný kód aplikace vašeho robota.
    3. Zkontrolujte také, že je zaškrtnuté políčko Otevřít v režimu ladění.
    4. Vyberte Připojit.
  3. 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.

  4. 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.

debug-inspection-middleware

Další kroky