Share via


Fouten opsporen in een bot met inspectie-middleware

VAN TOEPASSING OP: SDK v4

In dit artikel wordt beschreven hoe u fouten kunt opsporen in een bot met behulp van inspectie-middleware. Met deze functie kan de Bot Framework Emulator fouten opsporen in verkeer naar en uit de bot en de huidige status van de bot bekijken. U kunt een traceringsbericht gebruiken om gegevens naar de emulator te verzenden en vervolgens de status van uw bot te inspecteren op een gegeven beurt van het gesprek.

We gebruiken een EchoBot die lokaal is gebouwd met bot framework v4 in de quickstart Een bot maken om te laten zien hoe u fouten kunt opsporen en de status van de bot kunt inspecteren. U kunt ook fouten opsporen in een bot met behulp van IDE of Fouten opsporen met de Bot Framework Emulator, maar als u de foutopsporingsstatus wilt oplossen, moet u inspectie-middleware toevoegen aan uw bot. De voorbeelden van de inspectiebot zijn beschikbaar voor C#, JavaScript, Java en Python.

Notitie

De Sdk's voor Bot Framework JavaScript, C# en Python blijven ondersteund, maar de Java SDK wordt buiten gebruik gesteld met definitieve langetermijnondersteuning die eindigt op november 2023.

Bestaande bots die zijn gebouwd met de Java SDK blijven functioneren.

Voor het bouwen van nieuwe bots kunt u Power Virtual Agents gebruiken en lezen over het kiezen van de juiste chatbotoplossing.

Zie De toekomst van botbouw voor meer informatie.

Vereisten

Uw emulator bijwerken naar de nieuwste versie

Voordat u botinspectie-middleware gebruikt om fouten in uw bot op te sporen, moet u de emulator bijwerken naar versie 4.5 of hoger. Controleer de nieuwste versie op updates.

Als u de versie van uw emulator wilt controleren, selecteert u Help en vervolgens Over in het menu. U ziet de huidige versie van uw emulator.

Uw botcode bijwerken

De inspectiestatus en inspectie-middleware worden geconfigureerd in het Startup.cs-bestand en vervolgens gebruikt door de adapter.

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");
            };
        }

Werk de botklasse bij in het EchoBot.cs-bestand .

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++;
}

Uw bot lokaal testen

Nadat u de code hebt bijgewerkt, kunt u uw bot lokaal uitvoeren en de foutopsporingsfunctie testen met behulp van twee emulators: één om berichten te verzenden en te ontvangen, en de andere om de status van berichten in de foutopsporingsmodus te controleren. Uw bot lokaal testen:

  1. Ga naar de map van uw bot in een terminal en voer de volgende opdracht uit om uw bot lokaal uit te voeren:

    dotnet run
    
  2. Open uw emulator. Selecteer Bot openen. Vul de BOT-URL in met http://localhost:3978/api/messages de waarden MicrosoftAppId en MicrosoftAppPassword . Als u een JavaScript-bot hebt, kunt u deze waarden vinden in het .env-bestand van uw bot. Als u een C#-bot hebt, kunt u deze waarden vinden in het bestand appsettings.json . Voor een Java-bot vindt u deze waarden in het bestand application.properties . Selecteer Verbinding maken.

  3. Open nu een ander emulatorvenster. Dit tweede emulatorvenster werkt als een foutopsporingsprogramma. Volg de instructies zoals beschreven in de vorige stap. Schakel Open in de foutopsporingsmodus in en selecteer vervolgens Verbinding maken.

  4. Op dit moment ziet u een opdracht met een unieke id (/INSPECT attach <identifier>) in uw foutopsporingsemulator. Kopieer de hele opdracht met de id uit de foutopsporingsemulator en plak deze in het chatvak van de eerste emulator.

    Notitie

    Er wordt een unieke id gegenereerd wanneer de emulator wordt gestart in de foutopsporingsmodus nadat u de inspectie-middleware in de code van uw bot hebt toegevoegd.

  5. U kunt nu berichten verzenden in het chatvak van uw eerste emulator en de berichten controleren in de foutopsporingsemulator. Als u de status van de berichten wilt controleren, selecteert u BotStatus in de foutopsporingsemulator en ontvouwt u waarden in het rechter JSON-venster . U ziet de status van uw bot in de foutopsporingsemulator:

    botstatus

De status controleren van een bot die is geconfigureerd in Azure

Als u de status van uw bot wilt inspecteren die is geconfigureerd in Azure en verbonden met kanalen (zoals Teams), moet u ngrok installeren en uitvoeren.

ngrok uitvoeren

Op dit moment hebt u uw emulator bijgewerkt naar de nieuwste versie en de inspectie-middleware toegevoegd aan de code van uw bot. De volgende stap bestaat uit het uitvoeren van ngrok en het configureren van uw lokale bot. Voordat u ngrok uitvoert, moet u uw bot lokaal uitvoeren.

Uw bot lokaal uitvoeren:

  1. Ga naar de map van uw bot in een terminal en stel uw NPM-registratie in om de meest recente builds te gebruiken

  2. Voer uw bot lokaal uit. U ziet dat uw bot een poortnummer beschikbaar maakt, zoals 3978.

  3. Open een andere opdrachtprompt en ga naar de projectmap van uw bot. Voer de volgende opdracht uit:

    ngrok http 3978
    
  4. ngrok is nu verbonden met uw lokaal actieve bot. Kopieer het openbare IP-adres van het beveiligde (HTTPS).

    ngrok succes

Uw botresource bijwerken

Nu uw lokale bot is verbonden met ngrok, kunt u uw botresource in Azure configureren om de ngrok-URL te gebruiken.

  1. Ga naar uw botresource in Azure. Selecteer Configuratie in het linkermenu onder Instellingen.

    1. Stel het berichteindpunt in op het IP-adres van ngrok dat u hebt gekopieerd. Voeg indien nodig /api/messages toe na het IP-adres. Bijvoorbeeld: https://e58549b6.ngrok.io/api/messages.

    2. Selecteer Streaming-eindpunt inschakelen.

      Eindpunt instellen

    3. Selecteer Toepassen om uw wijzigingen op te slaan.

      Tip

      Als Apply niet is ingeschakeld, kunt u het selectievakje Streaming-eindpunt inschakelen uitschakelen en Toepassen selecteren. Schakel vervolgens Streaming-eindpunt inschakelen in en selecteer Opnieuw toepassen. U moet ervoor zorgen dat streaming-eindpunt inschakelen is ingeschakeld en dat de configuratie van het eindpunt wordt opgeslagen.

  2. Ga naar de resourcegroep van uw bot.

    1. Selecteer Implementatie en selecteer vervolgens de botresource die eerder is geïmplementeerd. Selecteer Sjabloon in het linkermenu om de MicrosoftAppId en MicrosoftAppPassword op te halen voor de web-app die is gekoppeld aan uw bot.

      Invoer ophalen

    2. Werk het configuratiebestand van uw bot (appsettings.json voor C# of .env voor JavaScript) bij met de MicrosoftAppId en MicrosoftAppPassword.

  3. Start uw emulator, selecteer Bot openen en voer http://localhost:3978/api/messages de BOT-URL in. Vul microsoft-app-id en Microsoft App-wachtwoord in met dezelfde MicrosoftAppId en MicrosoftAppPassword die u hebt toegevoegd aan het configuratiebestand van onze bot. Selecteer vervolgens Connect.

  4. Uw actieve bot is nu verbonden met uw botresource in Azure. Als u uw bot in Azure in Webchat wilt testen, gaat u naar uw botbronnen, selecteert u Testen in Webchat en verzendt u berichten naar uw bot.

Foutopsporingsmodus inschakelen

  1. Selecteer Fouten opsporen in uw emulator en start vervolgens Foutopsporing.

  2. Voer het IP-adres van ngrok in (vergeet niet om /api/messages toe te voegen) voor de Bot-URL (bijvoorbeeldhttps://e58549b6.ngrok.io/api/messages).

    1. Voer voor Microsoft App ID de app-id van uw bot in.
    2. Voer voor het wachtwoord van de Microsoft-app het app-geheim van uw bot in.
    3. Zorg ervoor dat Openen in de foutopsporingsmodus ook is ingeschakeld.
    4. Selecteer Verbinding maken.
  3. Als de foutopsporingsmodus is ingeschakeld, genereert de emulator een UUID. Een UUID is een unieke id die wordt gegenereerd telkens wanneer u de foutopsporingsmodus in uw emulator start.

  4. Kopieer en plak de UUID in de test in Webchat chatvak voor het chatvak van uw kanaal. U ziet het bericht 'Gekoppeld aan sessie, al het verkeer wordt gerepliceerd voor inspectie' in het chatvak.

U kunt beginnen met het opsporen van fouten in uw bot door berichten te verzenden in het chatvak van het geconfigureerde kanaal. De lokale emulator werkt de berichten automatisch bij met alle details voor foutopsporing. Als u de status van uw bot van berichten wilt controleren, selecteert u BotStatus en vouwt u de waarden uit in het rechter JSON-venster.

foutopsporing-inspectie-middleware

Volgende stappen