Grundlegendes zur Struktur eines Echobots

GILT FÜR: SDK v4

Die Bot-Framework-Vorlagen und Beispiele werden für ASP.NET (C#), restify (JavaScript) und aiohttp (Python) geschrieben. Die Webdienst-Features sind jedoch nicht Teil des Bot Framework SDK, sondern Teil des Webframeworks, das Sie verwenden möchten.

Alle Bot-Anwendungen teilen einige gemeinsame Features.

Funktion Beschreibung
Ressourcenbereitstellung Der Bot als Web-App muss einen Webdienst, einen Botadapter und ein Botobjekt erstellen.
Endpunkt Messaging Die Web-App muss einen Messaging-Endpunkt implementieren, auf dem Aktivitäten empfangen und Aktivitäten an den Botadapter weitergeleitet werden sollen.
Bot-Adapter Der Adapter empfängt Aktivitäten vom Messaging-Endpunkt, leitet sie an den Turn-Handler des Bots weiter und fängt Fehler oder Ausnahmen ab, die die Logik des Bots nicht abfangen kann.
Bot-Objekt Das Bot-Objekt behandelt die Argumentation oder Logik des Bots für den Turn.

Sie können einen Echo-Bot aus den Vorlagen erstellen, wie unter Erstellen eines Bots beschrieben oder Sie können ein Echo-Bot-Projekt aus dem Repository Microsoft/BotBuilder-Samples kopieren.

Die C#- und JavaScript-Vorlagen verfügen über integrierte Unterstützung für Streaming-Verbindungen. In diesem Artikel werden jedoch keine Streaming-Features behandelt. Informationen zu Streaming-Verbindungen finden Sie unter Verbinden eines Bots mit Direct Line Speech.

Hinweis

Die JavaScript-, C#- und Python-SDKs für Bot Framework werden weiterhin unterstützt, das Java-SDK wird jedoch eingestellt und der langfristige Support endet im November 2023.

Bestehende Bots, die mit dem Java SDK erstellt wurden, werden weiterhin funktionieren.

Wenn Sie einen neuen Bot erstellen möchten, sollten Sie den Einsatz von Power Virtual Agents in Betracht ziehen und sich über die Auswahl der richtigen Chatbot-Lösung informieren.

Weitere Informationen finden Sie unter Die Zukunft des Bot-Design.

Voraussetzungen

Botvorlagen

Ein Bot ist eine Webanwendung. Vorlagen werden für jede Sprache bereitgestellt.

Das Bot Framework enthält sowohl VSIX- als auch .NET-Vorlagen.

Die Vorlage generiert eine in ASP.NET MVC Core erstellte Web-App. Wenn Sie sich die ASP.NET-Grundlagen ansehen, werden Sie ähnlichen Code in Dateien wie Program.cs und Startup.cs sehen. Diese Dateien sind für alle Web-Apps erforderlich und nicht botspezifisch.

Hinweis

Sie können die Vorlagen aus Visual Studio installieren.

  1. Wählen Sie im Menü Erweiterungen die Option Erweiterungen verwalten aus.
  2. Suchen Sie im Dialogfeld Erweiterungen verwalten nach Bot Framework v4 SDK-Vorlagen für Visual Studio und installieren Sie sie.

Informationen zum Bereitstellen von .NET-Bots in Azure finden Sie unter Bereitstellen und Veröffentlichen eines Bots.

Die Datei appsettings.json gibt die Konfigurationsinformationen für Ihren Bot an, beispielsweise die App-ID, das Kennwort und Ähnliches. Wenn Sie bestimmte Technologien verwenden oder diesen Bot in einer Produktionsumgebung einsetzen, müssen Sie der Konfiguration Ihre spezifischen Schlüssel oder Ihre URL hinzufügen. Für diesen Echo-Bot müssen Sie an dieser Stelle jedoch keinerlei Schritte ausführen, d. h. die App-ID und das Passwort müssen hier nicht angegeben werden.

Die Datei EchoBot.csproj gibt Abhängigkeiten und die zugehörigen Versionen für Ihren Bot an. All dies wird durch die Vorlage und Ihr System eingerichtet. Zusätzliche Abhängigkeiten können mithilfe des NuGet-Paket-Managers oder des dotnet add package-Befehls installiert werden.

Ressourcenbereitstellung

Um als Web-App zu funktionieren, muss Ihr Bot einen Webdienst, einen Botadapter und ein Botobjekt erstellen.

Für die meisten Bots würden Sie auch Speicherschicht- und Speicherverwaltungsobjekte für den Bot erstellen. Der Echo-Bot muss jedoch den Zustand zwischen Turns nicht beibehalten. Und für einige Bots müssen Sie möglicherweise andere Objekte erstellen, die vom Bot-Objekt oder Adapter benötigt werden.

In ASP.NET registrieren Sie Objekte und Objekterstellungsmethoden in der Datei Startup.cs. Die ConfigureServices-Methode lädt die verbundenen Dienste und deren Schlüssel (sofern vorhanden) aus appsettings.json, verbindet den Zustand usw. Hier werden der Adapter und der Bot definiert, der über die Abhängigkeitsinjektion verfügbar sein soll. Anschließend beendet die Configure-Methode die Konfiguration Ihrer App.

ConfigureServices und Configure werden von der Runtime aufgerufen, wenn die App gestartet wird.

Endpunkt Messaging

Die Vorlage implementiert einen Webdienst mit einem Messaging-Endpunkt. Wenn er eine Anforderung empfängt, extrahiert der Dienst den Authentifizierungsheader und fordert die Nutzlast an den Adapter weiter.

Die C#- und JavaScript-SDKs unterstützen Streaming-Verbindungen. Während der Echo-Bot keines der Streaming-Features verwendet, ist der Adapter in den C#- und JavaScript-Vorlagen darauf ausgelegt, sie zu unterstützen.

Jede eingehende Anforderung stellt den Beginn eines neuen Turns dar.

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

Der Botadapter

Der Adapter empfängt Aktivitäten vom Messaging-Endpunkt, leitet sie an den Turn-Handler des Bots weiter und fängt Fehler oder Ausnahmen ab, die die Logik des Bots nicht abfangen kann. Der Adapter leitet auch Aktivitäten von Ihrem Bot an den Kanal des Benutzers weiter.

Mit dem Adapter können Sie einen eigenen On-Turn-Error-Handler hinzufügen.

Startup.cs

Der zu verwendende Adapter wird in der ConfigureServices-Methode definiert.

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

Die Bot-Logik

Der Echo-Bot verwendet einen Aktivitätshandler und implementiert Handler für die Aktivitätstypen, die er erkennt und auf die er reagiert, in diesem Fall die Unterhaltungsaktualisierung und Nachrichten-Aktivitäten.

  • Eine Unterhaltungsaktualisierungs-Aktivität enthält Informationen darüber, wer der Unterhaltung beigetreten ist oder die Unterhaltung verlassen hat. Bei Nicht-Gruppen-Chats treten sowohl der Bot als auch der Benutzer der Unterhaltung bei, wenn sie gestartet wird. Bei Gruppen-Chats wird eine Unterhaltungsaktualisierung generiert, wenn jemand der Unterhaltung beitritt oder die Unterhaltung verlässt, unabhängig davon, ob es sich um den Bot oder einen Benutzer handelt.
  • Eine Nachrichtenaktivität stellt eine Nachricht dar, die der Benutzer an den Bot sendet.

Der Echo-Bot begrüßt einen Benutzer, wenn er an der Unterhaltung teilnimmt, und gibt alle Nachrichten zurück, die er an den Bot sendet.

Startup.cs

Der zu verwendende Bot wird in der ConfigureServices-Methode definiert.

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

Nächste Schritte