Dela via


Felsöka en robot med kontrollmellanprogram

GÄLLER FÖR: SDK v4

Den här artikeln beskriver hur du felsöker en robot med hjälp av kontrollmellanprogram. Med den här funktionen kan Bot Framework-emulatorn felsöka trafik till och från roboten och se robotens aktuella tillstånd. Du kan använda ett spårningsmeddelande för att skicka data till emulatorn och sedan inspektera robotens tillstånd i en viss konversation.

Vi använder en EchoBot som skapats lokalt med hjälp av Bot Framework v4 i snabbstarten Skapa en robot för att visa hur du felsöker och inspekterar robotens meddelandetillstånd. Du kan också felsöka en robot med hjälp av IDE eller Felsöka med Bot Framework-emulatorn, men för att felsöka tillstånd måste du lägga till kontrollmellanprogram i roboten. Exempel på inspektionsrobotar är tillgängliga för C#, JavaScript, Java och Python.

Kommentar

Bot Framework JavaScript-, C#- och Python-SDK:erna fortsätter att stödjas, men Java SDK dras tillbaka med slutligt långsiktigt stöd som slutar i november 2023.

Befintliga robotar som skapats med Java SDK fortsätter att fungera.

Om du vill skapa en ny robot kan du använda Microsoft Copilot Studio och läsa om hur du väljer rätt copilot-lösning.

Mer information finns i Framtiden för robotbygge.

Förutsättningar

Uppdatera emulatorn till den senaste versionen

Innan du använder mellanprogrammet för robotgranskning för att felsöka roboten uppdaterar du emulatorn till version 4.5 eller senare. Kontrollera den senaste versionen för uppdateringar.

Om du vill kontrollera versionen av emulatorn väljer du Hjälp och sedan Om på menyn. Du ser den aktuella versionen av emulatorn.

Uppdatera robotkoden

Kontrolltillståndet och kontrollmellanprogrammet konfigureras i filen Startup.cs och används sedan av adaptern.

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

Uppdatera robotklassen i filen 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++;
}

Testa roboten lokalt

När du har uppdaterat koden kan du köra roboten lokalt och testa felsökningsfunktionen med hjälp av två emulatorer: en för att skicka och ta emot meddelanden och den andra för att inspektera tillståndet för meddelanden i felsökningsläge. Så här testar du roboten lokalt:

  1. Gå till robotens katalog i en terminal och kör följande kommando för att köra roboten lokalt:

    dotnet run
    
  2. Öppna emulatorn. Välj Öppna robot. Fyll i bot-URL :en med http://localhost:3978/api/messages och värdena MicrosoftAppId och MicrosoftAppPassword . Om du har en JavaScript-robot kan du hitta dessa värden i robotens .env-fil . Om du har en C#-robot kan du hitta dessa värden i filen appsettings.json . För en Java-robot hittar du dessa värden i filen application.properties . Välj Anslut.

  3. Öppna nu ett nytt emulatorfönster. Det andra emulatorfönstret fungerar som ett felsökningsprogram. Följ anvisningarna enligt beskrivningen i föregående steg. Kontrollera Öppna i felsökningsläge och välj sedan Anslut.

  4. Nu visas ett kommando med en unik identifierare (/INSPECT attach <identifier>) i felsökningsemulatorn. Kopiera hela kommandot med identifieraren från felsökningsemulatorn och klistra in den i chattrutan i den första emulatorn.

    Kommentar

    En unik identifierare genereras varje gång emulatorn startas i felsökningsläge när du har lagt till kontrollmellanprogrammet i robotens kod.

  5. Nu kan du skicka meddelanden i chattrutan i din första emulator och inspektera meddelandena i felsökningsemulatorn. Om du vill kontrollera statusen för meddelandena väljer du Robottillstånd i felsökningsemulatorn och utvecklar värden i det högra JSON-fönstret . Du ser tillståndet för roboten i felsökningsemulatorn:

    robottillstånd

Kontrollera tillståndet för en robot som konfigurerats i Azure

Om du vill kontrollera tillståndet för din robot som konfigurerats i Azure och är ansluten till kanaler (till exempel Teams) måste du installera och köra ngrok.

Kör ngrok

Nu har du uppdaterat emulatorn till den senaste versionen och lagt till kontrollmellanprogrammet i robotens kod. Nästa steg är att köra ngrok och konfigurera din lokala robot. Innan du kör ngrok måste du köra roboten lokalt.

Så här kör du roboten lokalt:

  1. Gå till robotens mapp i en terminal och ställ in npm-registreringen så att den använder de senaste versionerna

  2. Kör roboten lokalt. Du ser din robot exponera ett portnummer som 3978.

  3. Öppna en annan kommandotolk och gå till robotens projektmapp. Kör följande kommando:

    ngrok http 3978
    
  4. ngrok är nu ansluten till din lokalt aktiva robot. Kopiera den säkra offentliga IP-adressen (HTTPS).

    ngrok framgång

Uppdatera robotresursen

Nu när din lokala robot är ansluten till ngrok kan du konfigurera robotresursen i Azure så att den använder ngrok-URL:en.

  1. Gå till robotresursen i Azure. Välj Konfiguration under Inställningar på den vänstra menyn.

    1. Ange meddelandeslutpunkten till den ngrok-IP-adress som du kopierade. Lägg vid behov till /api/messages efter IP-adressen. Exempel: https://e58549b6.ngrok.io/api/messages

    2. Välj Aktivera slutpunkt för direktuppspelning.

      Ange slutpunkt

    3. Tryck på Apply (Verkställ) för att spara ändringarna.

      Dricks

      Om Använd inte är aktiverat kan du avmarkera Aktivera slutpunkt för direktuppspelning och välja Tillämpa. Markera sedan Aktivera slutpunkt för direktuppspelning och välj Tillämpa igen. Du måste se till att Aktivera slutpunkt för direktuppspelning är markerat och att konfigurationen av slutpunkten sparas.

  2. Gå till robotens resursgrupp.

    1. Välj Distribution och välj sedan robotresursen som tidigare har distribuerats. Välj Mall på den vänstra menyn för att hämta MicrosoftAppId och MicrosoftAppPassword för webbappen som är associerad med din robot.

      Hämta indata

    2. Uppdatera robotens konfigurationsfil (appsettings.json för C# eller .env för JavaScript) med MicrosoftAppId och MicrosoftAppPassword.

  3. Starta emulatorn, välj Öppna robot och ange http://localhost:3978/api/messages i robot-URL:en. Fyll i Microsoft App-ID och Microsoft App-lösenord med samma MicrosoftAppId och MicrosoftAppPassword som du lade till i robotens konfigurationsfil. Välj sedan Anslut.

  4. Din robot som körs är nu ansluten till robotresursen i Azure. Om du vill testa din robot i Azure i webbchatt går du till dina robotresurser, väljer Testa i webbchatt och skickar meddelanden till din robot.

Aktivera felsökningsläge

  1. I emulatorn väljer du Felsök och sedan Starta felsökning.

  2. Ange ngrok-IP-adressen (glöm inte att lägga till /api/messages) för robot-URL :en (till exempel https://e58549b6.ngrok.io/api/messages).

    1. För Microsoft App-ID anger du robotens app-ID.
    2. Ange robotens apphemlighet för Microsoft App-lösenord.
    3. Kontrollera att Även Öppna i felsökningsläge är markerat.
    4. Välj Anslut.
  3. När felsökningsläget är aktiverat genererar emulatorn ett UUID. Ett UUID är ett unikt ID som genereras varje gång du startar felsökningsläget i emulatorn.

  4. Kopiera och klistra in UUID i chattrutan Testa i webbchatt för kanalens chattruta. Meddelandet "Ansluten till session, all trafik replikeras för inspektion" visas i chattrutan.

Du kan börja felsöka roboten genom att skicka meddelanden i den konfigurerade kanalens chattruta. Din lokala emulator uppdaterar automatiskt meddelandena med all information för felsökning. Om du vill kontrollera robotens status för meddelanden väljer du Robottillstånd och utvecklar värdena i rätt JSON-fönster.

debug-inspection-middleware

Nästa steg