Senden einer Begrüßungsnachricht an Benutzer

GILT FÜR: SDK v4

Das Hauptziel bei der Erstellung eines Bots besteht darin, mit dem Benutzer eine aussagekräftige Konversation zu führen. Dieses Ziel erreichen Sie am besten, indem Sie Folgendes sicherstellen: Gleich nach dem ersten Anmelden müssen Benutzer den Hauptzweck und die Funktionen des Bots erkennen können und sich darüber im Klaren sein, aus welchem Grund der Bot erstellt wurde. Dieser Artikel enthält Codebeispiele für die Begrüßung von Benutzern in Ihrem Bot.

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

Informationen zu diesem Beispielcode

Dieser Beispielcode veranschaulicht, wie Sie neue Benutzer erkennen und begrüßen, wenn diese zum ersten Mal eine Verbindung mit Ihrem Bot herstellen. Im folgenden Diagramm ist der Logikfluss für diesen Bot dargestellt.

Die beiden wichtigsten Ereignisse für den Bot sind:

  • OnMembersAddedAsync, die aufgerufen wird, wenn sich ein neuer Benutzer mit Ihrem Bot verbindet.
  • OnMessageActivityAsync, die aufgerufen wird, wenn Ihr Bot neue Benutzereingaben erhält.

Logikflussdiagramm für C#-Beispiel.

Wenn eine Verbindung mit einem neuen Benutzer hergestellt wird, werden vom Bot die Elemente WelcomeMessage, InfoMessage und PatternMessage bereitgestellt. Wenn eine neue Benutzereingabe empfangen wird, wird WelcomeUserState darauf überprüft, ob DidBotWelcomeUser auf true festgelegt ist. Wenn dies nicht der Fall ist, wird für den Benutzer die Nachricht für die erstmalige Begrüßung zurückgegeben.

Erstellen des Benutzerzustands

Das Benutzerzustandsobjekt wird beim Start erstellt, und die Abhängigkeit wird in den Botkonstruktor eingefügt.

Startup.cs


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

// Create the Bot Adapter with error handling enabled.

Bots\WelcomeUserBot.cs


// Initializes a new instance of the "WelcomeUserBot" class.
public WelcomeUserBot(UserState userState)
{
    _userState = userState;
}

Erstellen von Eigenschaftenaccessoren

Jetzt erstellen wir einen Eigenschaftenaccessor, der uns ein Handle für WelcomeUserState innerhalb der OnMessageActivityAsync-Methode bereitstellt. Anschließend rufen wir die GetAsync-Methode auf, um den Schlüssel mit dem korrekten Gültigkeitsbereich zu erhalten. Wir speichern die Daten zum Benutzerzustand dann nach jedem Benutzereingaben-Durchlauf, indem wir die SaveChangesAsync-Methode verwenden.

Bots\WelcomeUserState.cs

// Gets or sets whether the user has been welcomed in the conversation.
public bool DidBotWelcomeUser { get; set; } = false;

Bots\WelcomeUserBot.cs

var didBotWelcomeUser = await welcomeUserStateAccessor.GetAsync(turnContext, () => new WelcomeUserState(), cancellationToken);

    await _userState.SaveChangesAsync(turnContext, cancellationToken: cancellationToken);
}

Erkennen und Begrüßen von erstmals verbundenen Benutzern

In WelcomeUserBot führen wir mit OnMembersAddedAsync() eine Überprüfung auf ein Aktivitätsupdate durch, um zu ermitteln, ob der Konversation ein neuer Benutzer hinzugefügt wurde. An diesen Benutzer senden wir dann die drei anfänglichen Begrüßungsnachrichten WelcomeMessage, InfoMessage und PatternMessage. Der vollständige Code für diese Interaktion ist unten angegeben.

Bots\WelcomeUserBot.cs

public class WelcomeUserBot : ActivityHandler
{
    // Messages sent to the user.
    private const string WelcomeMessage = "This is a simple Welcome Bot sample. This bot will introduce you " +
                                            "to welcoming and greeting users. You can say 'intro' to see the " +
                                            "introduction card. If you are running this bot in the Bot Framework " +
                                            "Emulator, press the 'Start Over' button to simulate user joining " +
                                            "a bot or a channel";

    private const string InfoMessage = "You are seeing this message because the bot received at least one " +
                                        "'ConversationUpdate' event, indicating you (and possibly others) " +
                                        "joined the conversation. If you are using the emulator, pressing " +
                                        "the 'Start Over' button to trigger this event again. The specifics " +
                                        "of the 'ConversationUpdate' event depends on the channel. You can " +
                                        "read more information at: " +
                                        "https://aka.ms/about-botframework-welcome-user";

    private const string LocaleMessage = "You can use the activity's 'GetLocale()' method to welcome the user " +
                                         "using the locale received from the channel. " + 
                                         "If you are using the Emulator, you can set this value in Settings.";
{
    foreach (var member in membersAdded)
    {
        if (member.Id != turnContext.Activity.Recipient.Id)
        {
            await turnContext.SendActivityAsync($"Hi there - {member.Name}. {WelcomeMessage}", cancellationToken: cancellationToken);
            await turnContext.SendActivityAsync(InfoMessage, cancellationToken: cancellationToken);
            await turnContext.SendActivityAsync($"{LocaleMessage} Current locale is '{turnContext.Activity.GetLocale()}'.", cancellationToken: cancellationToken);
            await turnContext.SendActivityAsync(PatternMessage, cancellationToken: cancellationToken);
        }
    }
}

Begrüßen eines neuen Benutzers und Verwerfen der ersten Eingabe

Es ist auch wichtig zu berücksichtigen, wann die Eingabe des Benutzers ggf. nützliche Informationen enthält. Dies kann je nach Kanal variieren. Um eine hohe Benutzerfreundlichkeit über alle möglichen Kanäle hinweg zu gewährleisten, wird das Statusflag didBotWelcomeUser überprüft. Ist das Ergebnis „false“, wird diese erste Benutzereingabe nicht verarbeitet. Stattdessen stellen wir für den Benutzer eine anfängliche Begrüßungsnachricht bereit. Der boolesche Wert welcomedUserProperty wird dann auf „true“ festgelegt und unter UserState gespeichert. In unserem Code wird jetzt die Eingabe dieses Benutzers aus allen zusätzlichen Nachrichtenaktivitäten verarbeitet.

Bots\WelcomeUserBot.cs

{
    var welcomeUserStateAccessor = _userState.CreateProperty<WelcomeUserState>(nameof(WelcomeUserState));
    var didBotWelcomeUser = await welcomeUserStateAccessor.GetAsync(turnContext, () => new WelcomeUserState(), cancellationToken);

    if (didBotWelcomeUser.DidBotWelcomeUser == false)
    {
        didBotWelcomeUser.DidBotWelcomeUser = true;

        // the channel should sends the user name in the 'From' object
        var userName = turnContext.Activity.From.Name;

        await turnContext.SendActivityAsync("You are seeing this message because this was your first message ever to this bot.", cancellationToken: cancellationToken);
        await turnContext.SendActivityAsync($"It is a good practice to welcome the user and provide personal greeting. For example, welcome {userName}.", cancellationToken: cancellationToken);
    }
    else
    await _userState.SaveChangesAsync(turnContext, cancellationToken: cancellationToken);
}

Verarbeiten von zusätzlicher Eingabe

Nachdem ein neuer Benutzer begrüßt wurde, werden Informationen zur Benutzereingabe für jeden Nachrichten-Turn ausgewertet, und der Bot stellt je nach Kontext der Benutzereingabe eine Antwort bereit. Im folgenden Code ist die Entscheidungslogik dargestellt, die zum Generieren dieser Antwort verwendet wird.

Mit der Eingabe „intro“ oder „help“ wird die Funktion SendIntroCardAsync aufgerufen, um für den Benutzer eine Hero Card mit Informationen anzuzeigen. Dieser Code wird im nächsten Abschnitt dieses Artikels beschrieben.

Bots\WelcomeUserBot.cs

    switch (text)
    {
        case "hello":
        case "hi":
            await turnContext.SendActivityAsync($"You said {text}.", cancellationToken: cancellationToken);
            break;
        case "intro":
        case "help":
            await SendIntroCardAsync(turnContext, cancellationToken);
            break;
        default:
            await turnContext.SendActivityAsync(WelcomeMessage, cancellationToken: cancellationToken);
            break;
    }
}

Verwenden der Hero Card-Begrüßung

Wie oben bereits erwähnt, wird bei einigen Benutzereingaben als Reaktion auf die Anforderung eine Hero Card generiert. Weitere Informationen zu Hero Card-Begrüßungen finden Sie unter Hinzufügen von Medien zu Nachrichten. Unten ist der Code angegeben, der zum Erstellen der Hero Card und Antwort dieses Bots erforderlich ist.

Bots\WelcomeUserBot.cs

    {
        var card = new HeroCard
        {
            Title = "Welcome to Bot Framework!",
            Text = @"Welcome to Welcome Users bot sample! This Introduction card
                     is a great way to introduce your Bot to the user and suggest
                     some things to get them started. We use this opportunity to
                     recommend a few next steps for learning more creating and deploying bots.",
            Images = new List<CardImage>() { new CardImage("https://aka.ms/bf-welcome-card-image") },
            Buttons = new List<CardAction>()
            {
                new CardAction(ActionTypes.OpenUrl, "Get an overview", null, "Get an overview", "Get an overview", "https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0"),
                new CardAction(ActionTypes.OpenUrl, "Ask a question", null, "Ask a question", "Ask a question", "https://stackoverflow.com/questions/tagged/botframework"),
                new CardAction(ActionTypes.OpenUrl, "Learn how to deploy", null, "Learn how to deploy", "Learn how to deploy", "https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0"),
            }
        };

        var response = MessageFactory.Attachment(card.ToAttachment());
        await turnContext.SendActivityAsync(response, cancellationToken);
    }
}

Testen des Bots

Laden Sie die aktuelle Version von Bot Framework Emulator herunter, und installieren Sie sie.

  1. Führen Sie das Beispiel lokal auf Ihrem Computer aus. Wenn Sie eine Anleitung benötigen, lesen Sie die README-Datei für das C#-Beispiel oder JavaScript-Beispiel.
  2. Öffnen des Emulators zum Testen des Bots.
    1. Wenn Sie eine Unterhaltung mit Ihrem Bot beginnen, sendet er Ihnen eine Reihe von Willkommensnachrichten.

    2. Wenn Sie zum ersten Mal eine „Hallo“-Nachricht senden, antwortet Ihr Bot mit einem gewissen Rat.

    3. Wenn Sie nachfolgende „Hallo“-Nachrichten senden, antwortet Ihr Bot mit „Sie haben Hallo gesagt“.

      Screenshot der ersten Interaktionen mit Ihrem Bot im Emulator.

    4. Senden Sie eine „Hilfe“-Nachricht an den Bot. Er antwortet mit dem Versand einer Hero-Karte.

      Screenshot der Hilfenachricht und der Botantwort im Emulator.

Weitere Ressourcen

Weitere Informationen zu verschiedenen Medienantworten finden Sie unter Hinzufügen von Medien zu Nachrichten.

Nächste Schritte