Delen via


Welkomstbericht verzenden naar gebruikers

VAN TOEPASSING OP: SDK v4

Het belangrijkste doel bij het maken van een bot is om uw gebruiker in een zinvol gesprek te betrekken. Een van de beste manieren om dit doel te bereiken, is ervoor te zorgen dat vanaf het moment dat een gebruiker voor het eerst verbinding maakt, inzicht krijgt in het belangrijkste doel en de mogelijkheden van uw bot, de reden waarom uw bot is gemaakt. Dit artikel bevat codevoorbeelden om u te helpen gebruikers welkom te verwelkomen bij uw bot.

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

Over deze voorbeeldcode

Deze voorbeeldcode laat zien hoe u nieuwe gebruikers kunt detecteren en verwelkomen wanneer ze in eerste instantie zijn verbonden met uw bot. In het volgende diagram ziet u de logische stroom voor deze bot.

De twee belangrijkste gebeurtenissen die door de bot worden aangetroffen, zijn:

  • OnMembersAddedAsync, aangeroepen wanneer een nieuwe gebruiker verbinding maakt met uw bot.
  • OnMessageActivityAsync, aangeroepen wanneer uw bot nieuwe gebruikersinvoer ontvangt.

Logische stroomdiagram voor C#-voorbeeld.

Wanneer een nieuwe gebruiker is verbonden, worden deze geleverd met een WelcomeMessage, InfoMessageen PatternMessage door de bot. Wanneer er een nieuwe gebruikersinvoer wordt ontvangen, wordt WelcomeUserState gecontroleerd om te zien of DidBotWelcomeUser deze is ingesteld op waar. Zo niet, dan wordt er een eerste welkomstbericht van de gebruiker geretourneerd.

Gebruikersstatus maken

Het gebruikersstatusobject wordt gemaakt bij het opstarten en de afhankelijkheid die is geïnjecteerd in de botconstructor.

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

Eigenschapstoegangsors maken

We maken nu een eigenschapstoegangsor die ons een ingang biedt binnen WelcomeUserState de OnMessageActivityAsync methode. Roep vervolgens de GetAsync methode aan om de juiste bereiksleutel op te halen. Vervolgens slaan we gebruikersstatusgegevens op na elke iteratie van gebruikersinvoer met behulp van de SaveChangesAsync methode.

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

Nieuw verbonden gebruikers detecteren en begroeten

In WelcomeUserBot controleren we op een activiteitsupdate om OnMembersAddedAsync() te zien of er een nieuwe gebruiker is toegevoegd aan het gesprek en vervolgens een set van drie eerste welkomstberichten WelcomeMessagete verzenden, InfoMessage en PatternMessage. Volledige code voor deze interactie wordt hieronder weergegeven.

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

Nieuwe gebruiker verwelkomen en initiële invoer negeren

Het is ook belangrijk om te overwegen wanneer de invoer van uw gebruiker nuttige informatie kan bevatten. Dit kan per kanaal variëren. Om ervoor te zorgen dat uw gebruiker een goede ervaring heeft met alle mogelijke kanalen, controleren we de statusvlag didBotWelcomeUser en als dit onwaar is, verwerken we de initiële gebruikersinvoer niet. In plaats daarvan geven we de gebruiker een eerste welkomstbericht. De bool welcomedUserProperty wordt vervolgens ingesteld op 'true', opgeslagen in UserState en onze code verwerkt nu de invoer van deze gebruiker van alle aanvullende berichtactiviteiten.

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

Aanvullende invoer verwerken

Zodra een nieuwe gebruiker is verwelkomd, wordt gebruikersinvoergegevens geëvalueerd voor elke berichtwisseling en geeft de bot een antwoord op basis van de context van die gebruikersinvoer. De volgende code toont de beslissingslogica die wordt gebruikt om dat antwoord te genereren.

Een invoer van 'intro' of 'help' roept de functie SendIntroCardAsync aan om de gebruiker te presenteren met een informatieve hero-kaart. Deze code wordt onderzocht in de volgende sectie van dit artikel.

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

Een begroeting voor herokaarten gebruiken

Zoals hierboven vermeld, genereren sommige gebruikersinvoer een Hero-kaart als reactie op hun aanvraag. Hier vindt u meer informatie over heldkaartwensen : Een inleidingskaart verzenden. Hieronder vindt u de code die nodig is om het antwoord op de herokaart van deze bot te maken.

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

De bot testen

De nieuwste Bot Framework Emulator downloaden en installeren

  1. Voer het voorbeeld lokaal uit op uw computer. Als u instructies nodig hebt, raadpleegt u het bestand voor het README C#-voorbeeld of JavaScript-voorbeeld.
  2. Open de emulator om uw bot te testen.
    1. Wanneer u een gesprek met uw bot start, ontvangt u een reeks welkomstberichten.

    2. Wanneer u de eerste keer een 'hallo'-bericht verzendt, reageert uw bot met advies.

    3. Wanneer u volgende 'hallo'-berichten verzendt, antwoordt uw bot met 'U zei hallo'.

      Schermopname van de eerste interacties met uw bot in de emulator.

    4. Verzend een help-bericht naar uw bot. Het reageert door een herokaart te verzenden.

      Schermopname van het Help-bericht en het antwoord van de bot in de emulator.

Aanvullende resources

Meer informatie over verschillende mediareacties in Media toevoegen aan berichten.

Volgende stappen