Partager via


Comprendre la structure d’un echo bot

S'APPLIQUE À : SDK v4

Les modèles et échantillons Bot Framework sont écrits pour ASP.NET (C#), restify (JavaScript) et aiohttp (Python). Toutefois, les caractéristiques du service Web ne sont pas incluses dans le kit de développement logiciel (SDK) Bot Framework, mais font partie du cadre Web que vous choisissez d'utiliser.

Toutes les applications de bot partagent certaines caractéristiques communes.

Fonctionnalité Description
Provisionnement des ressources Le bot en tant qu'application Web doit créer un service Web, un adaptateur et un objet de bot.
Point de terminaison de messagerie L'application Web doit mettre en œuvre un point de terminaison de messagerie sur lequel recevoir des activités et les transférer à l'adaptateur de bot.
Adaptateur de bot L'adaptateur reçoit des activités du point de terminaison de messagerie, les transfère au gestionnaire de tour du bot et intercepte les erreurs ou exceptions que la logique du bot n'intercepte pas.
Objet de bot Les poignées d'objet de bot gèrent le raisonnement ou la logique du bot pour le tour.

Vous pouvez créer un bot d'écho à partir des modèles, comme décrit dans l'onglet Créer un bot, ou copier un projet de bot d'écho à partir du référentiel Microsoft/BotBuilder-Samples.

Les modèles C# et JavaScript prédéfinissent le support de diffusion en continu de connections. Toutefois, cet article ne dispose pas des caractéristiques de diffusion en continu. Pour plus d'informations sur la diffusion en continu de connections, découvrez comment connecter un bot à Direct Line Speech.

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

Modèles de bot

Un bot est une application web, et des modèles sous fournis pour chaque langage.

Bot Framework inclut à la fois des modèles VSIX et .NET.

Les modèles génèrent une application Web ASP.NET MVC centrale. Si vous étudiez les notions de base d’ASP.NET, vous découvrez qu’il existe un code similaire dans les fichiers tels que Program.cs et Startup.cs. Ces fichiers sont requis pour toutes les applications Web et ne sont pas spécifiques à un bot.

Remarque

Vous pouvez installer les modèles à partir de Visual Studio.

  1. Dans le menu, sélectionnez extensions puis Gérer les extensions.
  2. Dans la boîte de dialogue gérer les extensions, recherchez et installez les modèles kit de développement logiciel (SDK) de Bot Framework v4 pour Visual Studio.

Pour plus d'informations sur le déploiement de bots .NET sur Azure, consultez Comment approvisionner et publier un bot.

Le fichier appsettings.json spécifie les informations de configuration de votre bot, notamment son ID d'application et le mot de passe, entre autres. Si vous utilisez certaines technologies ou ce bot en production, vous devrez ajouter vos propres clés ou URL à cette configuration. Toutefois, pour les besoins de ce bot écho, vous n'avez rien à faire à ce stade ; l'ID de l'application et le mot de passe peuvent rester non définis pour l'instant.

Le fichier Maven EchoBot.csproj spécifie les dépendances et leurs versions associées pour votre bot. Toutes ces informations sont configurées par le modèle et par votre système. Des dépendances supplémentaires peuvent être installées à l'aide du gestionnaire de package NuGet ou de la commande dotnet add package.

Provisionnement des ressources

Pour fonctionner en tant qu'application Web, votre bot doit créer un service Web, un adaptateur et un objet de bot.

Pour la plupart des bots, vous créez également des objets de gestion de la couche de stockage et de la mémoire pour le bot. Toutefois, le bot écho n'a pas besoin de conserver l'état entre les tours. Pour certains bots, vous devrez peut-être créer d'autres objets dont l'objet ou l'adaptateur de bot aura besoin.

Dans ASP.NET, vous inscrivez des objets et des méthodes de création d'objets dans le fichier Startup.cs. La méthode ConfigureServices charge les services connectés et leurs clés (le cas échéant) à partir d'appsettings.json, connecte l'état, et ainsi de suite. Ici, l'adaptateur et le bot sont définis pour être disponibles via l'injection de dépendances. Ensuite, la méthode Configure termine la configuration de votre application.

ConfigureServices et Configure sont appelés par le runtime au démarrage de l’application.

Point de terminaison de messagerie

Le modèle mets en œuvre un service Web avec un point de terminaison de messagerie. Lorsqu'il reçoit une demande, le service extrait l'en-tête d'authentification et la charge utile de la demande et les transfère à l'adaptateur.

Les kits de développement logiciel (SDK) C# et JavaScript prennent en charge la diffusion en continu de connections. Bien que le bot écho n'utilise aucune des caractéristiques de diffusion en continu, l'adaptateur dans les modèles C# et JavaScript est conçu pour les prendre en charge.

Chaque requête entrante représente le début d'un nouveau tour.

Controllers\BotController.cs

// This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot
// implementation at runtime. Multiple different IBot implementations running at different endpoints can be
// achieved by specifying a more specific type for the bot constructor argument.
[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{
    private readonly IBotFrameworkHttpAdapter _adapter;
    private readonly IBot _bot;

    public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
    {
        _adapter = adapter;
        _bot = bot;
    }

    [HttpPost, HttpGet]
    public async Task PostAsync()
    {
        // Delegate the processing of the HTTP POST to the adapter.
        // The adapter will invoke the bot.
        await _adapter.ProcessAsync(Request, Response, _bot);
    }
}

Adaptateur de bot

L'adaptateur reçoit des activités du point de terminaison de messagerie, les transfère au gestionnaire de tour du bot et intercepte les erreurs ou exceptions que la logique du bot n'intercepte pas. L'adaptateur transfère également les activités de votre bot vers la chaîne de l'utilisateur.

L'adaptateur vous permet d'ajouter votre propre gestionnaire d'erreurs d'activation.

Startup.cs

Le bot à utiliser est défini dans la méthode ConfigureServices.

// Create the Bot Framework Authentication to be used with the Bot Adapter.
services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();

AdapterWithErrorHandler.cs

public class AdapterWithErrorHandler : CloudAdapter
{
    public AdapterWithErrorHandler(BotFrameworkAuthentication auth, ILogger<IBotFrameworkHttpAdapter> logger)
        : base(auth, logger)
    {
        OnTurnError = async (turnContext, exception) =>
        {
            // Log any leaked exception from the application.
            // NOTE: In production environment, you should consider logging this to
            // Azure Application Insights. Visit https://aka.ms/bottelemetry to see how
            // to add telemetry capture to your bot.
            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");
        };
    }
}

Logique du bot

Le bot echo utilise un gestionnaire d'activités et met en œuvre des gestionnaires pour les types d'activités qu'il reconnaît et réagit, dans le cas échéant, aux activités de mise à jour de conversation et de message.

  • Une activité de mise à jour de conversation comprend des informations sur les personnes qui ont rejoint ou quitté la conversation. Pour les conversations hors groupe, le bot et l'utilisateur rejoignent la conversation au démarrage. Pour les conversations de groupe, une mise à jour de conversation est générée chaque fois qu'une personne rejoint ou quitte la conversation, qu'il s'agisse du bot ou d'un utilisateur.
  • Une activité de message représente un message envoyé par l'utilisateur au bot.

Le bot écho accueille un utilisateur lorsqu'il rejoint la conversation et renvoie tous les messages qu'il envoie au bot.

Startup.cs

Le bot à utiliser est défini dans la méthode ConfigureServices.

// Create the Bot Adapter with error handling enabled.
services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();

Bots\EchoBot.cs

public class EchoBot : ActivityHandler
{
    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }

    protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
    {
        var welcomeText = "Hello and welcome!";
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                await turnContext.SendActivityAsync(MessageFactory.Text(welcomeText, welcomeText), cancellationToken);
            }
        }
    }
}

Étapes suivantes