Déboguer un bot avec un intergiciel d’inspection
S'APPLIQUE À : SDK v4
Cet article explique comment déboguer un bot à l’aide d’un intergiciel d’inspection. Cette fonctionnalité permet à l’émulateur Bot Framework Emulator de déboguer le trafic transitant par le bot, et d’inspecter l’état actuel du bot. Vous pouvez utiliser un message de suivi pour envoyer des données à Emulator, puis inspecter l’état de votre bot dans n’importe quel tour de la conversation.
Nous utilisons un EchoBot généré localement à l’aide de Bot Framework v4 dans l’Aide au démarrage Créer un bot pour montrer comment déboguer et inspecter l’état du message du bot. Vous pouvez aussi Déboguer un bot à l’aide de l’IDE ou le Déboguer avec Bot Framework Emulator, mais pour déboguer l’état, vous devez ajouter l’intergiciel d’inspection à votre bot. Les exemples de bot d’inspection sont disponibles pour C#, JavaScript, Java et Python.
Remarque
Les kits SDK JavaScript, C# et Python Bot Framework continueront d’être pris en charge. Toutefois, le kit de développement logiciel (SDK) Java est mis hors service avec une prise en charge finale à long terme se terminant en novembre 2023.
Les bots existants créés avec le kit de développement logiciel (SDK) Java continueront de fonctionner.
Pour la nouvelle génération de bots, envisagez d’utiliser Microsoft Copilot Studio et lisez-en plus sur le choix de la solution copilote appropriée.
Pour plus d’informations, consultez Les futures versions de bot.
Prérequis
- Connaissance des intergiciels de bots et de la gestion de l’état
- Connaissance de la façon de déboguer un bot de kit de développement logiciel et tester et déboguer avec Emulator
- Une installation de Bot Framework Emulator
- Installation de Dev Tunnel (si vous souhaitez déboguer un bot configuré dans Azure pour utiliser d’autres canaux)
- Une copie de l'échantillon d’inspection du bot pour C#, JavaScript, Java ou Python
Mettre à jour Emulator vers la dernière version
Avant d’utiliser l’intergiciel d’inspection du bot pour déboguer votre bot, mettez à jour votre émulateur vers la version 4.15 ou ultérieure. Vérifiez la dernière version des mises à jour.
Pour vérifier la version de votre Emulator, sélectionnez Aide, puis À propos de dans le menu. La version actuelle de votre Emulator s’affiche alors.
Mettre à jour le code de votre bot
L’état d’inspection et l’intergiciel d’inspection sont configurés dans le fichier Startup.cs puis utilisés par l’adaptateur.
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");
};
}
Mettez à jour la classe de bot dans le fichier 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++;
}
Tester votre bot localement
Après la mise à jour du code, vous pouvez exécuter votre bot localement et tester la fonctionnalité de débogage à l’aide de deux émulateurs : un pour envoyer et recevoir des messages et l’autre pour inspecter l’état des messages en mode débogage. Tester votre bot localement :
Accédez au répertoire de votre bot dans un terminal et exécutez la commande suivante pour exécuter votre bot localement :
dotnet run
Ouvrez votre Emulator. Sélectionnez Ouvrir le bot. Renseignez l’URL du bot avec
http://localhost:3978/api/messages
et les valeurs MicrosoftAppId et MicrosoftAppPassword. Si vous avez un bot JavaScript, vous pouvez trouver ces valeurs dans le fichier .env de votre bot. Si vous avez un bot C#, vous pouvez trouver ces valeurs dans le fichier appSettings.json. Pour un bot Java, vous pouvez trouver ces valeurs dans le fichier application.properties. Sélectionnez Connecter.Ouvrez maintenant une autre fenêtre Emulator. Cette deuxième fenêtre Emulator fonctionnera comme un débogueur. Suivez les instructions décrites à l’étape précédente. Cochez Ouvrir en mode débogage et cliquez sur Se connecter.
À ce stade, vous allez voir une commande avec un identificateur unique (
/INSPECT attach <identifier>
) dans votre Emulator de débogage. Copiez la commande entière avec l’identificateur depuis l’émulateur de débogage et collez-la dans la zone de conversation du premier émulateur.Remarque
Un identificateur unique est généré chaque fois qu’Emulator est lancé en mode débogage après l’ajout de l’intergiciel d’inspection dans le code de votre bot.
Vous pouvez désormais envoyer des messages dans la zone de discussion de votre premier Emulator et inspecter les messages dans Emulator de débogage. Pour inspecter l’état des messages, cliquez sur État du bot dans l’Emulator de débogage et dépliez les valeurs dans la fenêtre JSON appropriée. Vous allez voir l’état de votre bot dans l’Emulator de débogage :
Inspecter l’état d’un bot configuré dans Azure
Si vous souhaitez inspecter l’état de votre bot configuré dans Azure et connecté aux canaux (comme Teams), vous devez installer et exécuter Dev Tunnels.
Exécuter devtunnel
À ce stade, vous avez mis à jour votre Emulator vers la dernière version et ajouté l’intergiciel d’inspection dans le code de votre bot. L’étape suivante consiste à exécuter devtunnel et à configurer votre bot local. Avant d’exécuter devtunnel, vous devez exécuter votre bot localement.
Pour exécuter votre bot localement :
Accédez au dossier de votre bot dans un terminal et définissez votre inscription npm pour utiliser les builds les plus récents
Exécutez votre bot en local. Vous verrez que votre bot expose un numéro de port comme
3978
.Ouvrez une autre invite de commandes et accédez au dossier du projet de votre bot. Exécutez la commande suivante :
devtunnel host -a -p 3978
devtunnel est maintenant connecté à votre bot en cours d’exécution localement. Copiez l’URL publique sécurisée (HTTPS).
Mettez à jour votre ressource de bot
Maintenant que votre bot local est connecté à devtunnel, vous pouvez configurer votre ressource de bot dans Azure pour utiliser l’URL devtunnel.
Accédez à votre ressource de bot dans Azure. Dans le menu de gauche, sélectionnez Configuration sous Paramètres.
Définissez le point de terminaison de messagerie sur l’adresse URL devtunnel que vous avez copiée. Si nécessaire, ajoutez /api/messages à la suite de votre adresse IP. Par exemple :
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages
.Sélectionnez Activer le point de terminaison de streaming.
Sélectionnez Appliquer pour enregistrer vos modifications.
Conseil
Si Appliquer n’est pas coché, vous pouvez décocher Activer le point de terminaison de streaming et sélectionner Appliquer, puis cocher Activer le point de terminaison de streaming et sélectionner Appliquer à nouveau. Vous devez vérifier que l’option Activer le point de terminaison de streaming est cochée et que la configuration du point de terminaison est enregistrée.
Accédez à votre groupe de ressources de bot.
Sélectionnez Déploiement, puis sélectionnez la ressource de bot qui a été déployée précédemment. Sélectionnez Modèle dans le menu de gauche pour obtenir le MicrosoftAppId et le MicrosoftAppPassword pour l’application Web associée à votre bot.
Mettez à jour le fichier de configuration de votre bot (appsettings.json pour C#, ou .env pour JavaScript) avec le MicrosoftAppId et le MicrosoftAppPassword.
Démarrez votre Emulator, cliquez sur Ouvrir le bot, puis placez
http://localhost:3978/api/messages
dans l’URL du bot. Remplissez l’ID d’application Microsoft et le mot de passe de l’application Microsoft avec les mêmes MicrosoftAppId et MicrosoftAppPassword que vous avez ajoutés au fichier de configuration de notre bot. Sélectionnez Connecter.Votre bot en cours d’exécution est maintenant connecté à votre ressource de bot dans Azure. Pour tester votre bot dans Azure dans Chat Web, accédez à vos ressources de bot, sélectionnez Tester dans Chat Web et envoyez des messages à votre bot.
Activer le mode débogage
Dans votre Emulator, sélectionnez Déboguer, puis Démarrer le débogage.
Entrez l’URL devtunnel (n’oubliez pas d’ajouter /api/messages) pour l’URL du bot (par exemple).
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages
- Pour l’ID d’application Microsoft, saisissez l’ID d’application de votre bot.
- Pour le mot de passe de l’application Microsoft, saisissez le secret d’application de votre bot.
- Assurez-vous que la case Ouvrir en mode débogage est également cochée.
- Sélectionnez Connecter.
Une fois le mode débogage activé, Emulator génère un UUID. Un UUID est un ID unique généré chaque fois que vous démarrez le mode débogage dans votre Emulator.
Copiez et collez l’UUID dans la zone de discussion Tester dans Chat Web pour la zone de discussion de votre canal. Le message « joint à la session, tout le trafic est répliqué pour inspection » s’affiche dans la zone de discussion.
Vous pouvez démarrer le débogage de votre bot en envoyant des messages dans la zone de discussion du canal configuré. Votre Emulator local met automatiquement à jour les messages avec tous les détails pour le débogage. Pour inspecter l’état des messages de votre bot, cliquez sur Bot State (État du bot) et déroulez les valeurs dans la fenêtre JSON appropriée.
Étapes suivantes
- Comment déboguer votre bot à l’aide de fichiers de transcription.
- Comment déboguer une compétence ou un consommateur de compétences.