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
- Kunskap om robotmellanprogram och hantera tillstånd
- Kunskap om hur du felsöker en SDK-första robot och testa och felsöka med emulatorn
- En installation av Bot Framework-emulatorn
- En installera ngrok (om du vill felsöka en robot som konfigurerats i Azure för att använda andra kanaler)
- En kopia av kontrollrobotexemplet för C#, JavaScript, Java eller Python
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:
Gå till robotens katalog i en terminal och kör följande kommando för att köra roboten lokalt:
dotnet run
Ö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.Ö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.
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.
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:
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:
Gå till robotens mapp i en terminal och ställ in npm-registreringen så att den använder de senaste versionerna
Kör roboten lokalt. Du ser din robot exponera ett portnummer som
3978
.Öppna en annan kommandotolk och gå till robotens projektmapp. Kör följande kommando:
ngrok http 3978
ngrok är nu ansluten till din lokalt aktiva robot. Kopiera den säkra offentliga IP-adressen (HTTPS).
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.
Gå till robotresursen i Azure. Välj Konfiguration under Inställningar på den vänstra menyn.
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
Välj Aktivera slutpunkt för direktuppspelning.
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.
Gå till robotens resursgrupp.
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.
Uppdatera robotens konfigurationsfil (appsettings.json för C# eller .env för JavaScript) med MicrosoftAppId och MicrosoftAppPassword.
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.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
I emulatorn väljer du Felsök och sedan Starta felsökning.
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
).- För Microsoft App-ID anger du robotens app-ID.
- Ange robotens apphemlighet för Microsoft App-lösenord.
- Kontrollera att Även Öppna i felsökningsläge är markerat.
- Välj Anslut.
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.
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.
Nästa steg
- Lär dig hur du felsöker din robot med hjälp av transkriptionsfiler.
- Lär dig hur du felsöker en kunskaps- eller kunskapskonsument.