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 Microsoft Copilot Studio gebruiken en lezen over het kiezen van de juiste copilot-oplossing.
Zie De toekomst van botbouw voor meer informatie.
Vereisten
- Kennis van bot Middleware en beheerstatus
- Kennis van het opsporen van fouten in een SDK-eerste bot en testen en fouten opsporen met de emulator
- Een installatie van de Bot Framework Emulator
- Een installatie van Dev Tunnel (als u fouten wilt opsporen in een bot die is geconfigureerd in Azure om andere kanalen te gebruiken)
- Een kopie van het voorbeeld van de inspectiebot voor C#, JavaScript, Java of Python
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.15 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:
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
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.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.
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.
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:
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 Dev Tunnels installeren en uitvoeren.
Devtunnel 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 is het uitvoeren van devtunnel en het configureren van uw lokale bot. Voordat u devtunnel uitvoert, moet u uw bot lokaal uitvoeren.
Uw bot lokaal uitvoeren:
Ga naar de map van uw bot in een terminal en stel uw NPM-registratie in om de meest recente builds te gebruiken
Voer uw bot lokaal uit. U ziet dat uw bot een poortnummer beschikbaar maakt, zoals
3978
.Open een andere opdrachtprompt en ga naar de projectmap van uw bot. Voer de volgende opdracht uit:
devtunnel host -a -p 3978
devtunnel is nu verbonden met uw lokaal actieve bot. Kopieer de openbare URL van secure (HTTPS).
Uw botresource bijwerken
Nu uw lokale bot is verbonden met devtunnel, kunt u uw botresource in Azure configureren om de devtunnel-URL te gebruiken.
Ga naar uw botresource in Azure. Selecteer Configuratie in het linkermenu onder Instellingen.
Stel het berichteindpunt in op het url-adres van devtunnel dat u hebt gekopieerd. Voeg indien nodig /api/messages toe na het IP-adres. Bijvoorbeeld:
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages
.Selecteer Streaming-eindpunt inschakelen.
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.
Ga naar de resourcegroep van uw bot.
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.
Werk het configuratiebestand van uw bot (appsettings.json voor C# of .env voor JavaScript) bij met de MicrosoftAppId en MicrosoftAppPassword.
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.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
Selecteer Fouten opsporen in uw emulator en start vervolgens Foutopsporing.
Voer de devtunnel-URL in (vergeet niet om /api/messages toe te voegen) voor de Bot-URL (bijvoorbeeld
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages
).- Voer voor Microsoft App ID de app-id van uw bot in.
- Voer voor het wachtwoord van de Microsoft-app het app-geheim van uw bot in.
- Zorg ervoor dat Openen in de foutopsporingsmodus ook is ingeschakeld.
- Selecteer Verbinding maken.
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.
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.