Skicka välkomstmeddelande till användare

GÄLLER FÖR: SDK v4

Det främsta målet när du skapar en robot är att engagera användaren i en meningsfull konversation. Ett av de bästa sätten att uppnå det här målet är att se till att från det ögonblick en användare först ansluter förstår de robotens huvudsakliga syfte och funktioner, anledningen till att roboten skapades. Den här artikeln innehåller kodexempel som hjälper dig att välkomna användare till din robot.

Kommentar

Bot Framework JavaScript-, C#- och Python-SDK:erna fortsätter att stödjas, men Java SDK dras tillbaka med slutligt långsiktigt stöd som slutar i november 2023.

Befintliga robotar som skapats med Java SDK fortsätter att fungera.

Om du vill skapa en ny robot bör du överväga att använda Power Virtual Agents och läsa om hur du väljer rätt chattrobotlösning.

Mer information finns i Framtiden för robotbygge.

Förutsättningar

Om den här exempelkoden

Den här exempelkoden visar hur du identifierar och välkomnar nya användare när de först är anslutna till din robot. Följande diagram visar logikflödet för den här roboten.

De två viktigaste händelserna som roboten påträffar är:

  • OnMembersAddedAsync, anropas när en ny användare ansluter till din robot.
  • OnMessageActivityAsync, anropas när din robot tar emot nya användarindata.

Logikflödesdiagram för C#-exempel.

När en ny användare är ansluten får de en WelcomeMessage, InfoMessageoch PatternMessage av roboten. När en ny användarindata tas emot kontrolleras WelcomeUserState för att se om DidBotWelcomeUser är inställt på sant. Annars returneras ett första välkomstanvändarmeddelande till användaren.

Skapa användartillstånd

Användartillståndsobjektet skapas vid start och beroendet matas in i robotkonstruktorn.

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.

Robotar\WelcomeUserBot.cs


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

Skapa egenskapsåtkomster

Nu skapar vi en egenskapsåtkomstor som ger oss ett handtag i WelcomeUserStateOnMessageActivityAsync metoden. Anropa GetAsync sedan metoden för att hämta rätt omfångsnyckel. Sedan sparar vi användartillståndsdata efter att varje användare har angett iteration med hjälp av SaveChangesAsync metoden .

Robotar\WelcomeUserState.cs

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

Robotar\WelcomeUserBot.cs

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

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

Identifiera och hälsa på nyligen anslutna användare

I WelcomeUserBot söker vi efter en aktivitetsuppdatering med OnMembersAddedAsync() för att se om en ny användare har lagts till i konversationen och skickar sedan en uppsättning med tre inledande välkomstmeddelanden WelcomeMessage, InfoMessage och PatternMessage. Fullständig kod för den här interaktionen visas nedan.

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

Välkommen till ny användare och ignorera inledande indata

Det är också viktigt att tänka på när användarens indata faktiskt kan innehålla användbar information, och detta kan variera för varje kanal. För att säkerställa att användaren har en bra upplevelse i alla möjliga kanaler kontrollerar vi statusflaggan didBotWelcomeUser och om detta är "falskt" bearbetar vi inte de första användarindata. I stället ger vi användaren ett första välkomstmeddelande. Bool welcomedUserProperty är sedan inställd på "true", lagrad i UserState och vår kod bearbetar nu användarens indata från alla ytterligare meddelandeaktiviteter.

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

Bearbeta ytterligare indata

När en ny användare har välkomnats utvärderas information om användarindata för varje meddelandesväng och roboten ger ett svar baserat på kontexten för användarens indata. Följande kod visar beslutslogik som används för att generera svaret.

Indata från "intro" eller "help" anropar funktionen SendIntroCardAsync för att presentera användaren med ett informationshjältekort. Koden granskas i nästa avsnitt i den här artikeln.

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

Använda hero card-hälsning

Som nämnts ovan genererar vissa användarindata ett Hero-kort som svar på deras begäran. Du kan läsa mer om hero-korthälsningar här Skicka ett introduktionskort. Nedan visas den kod som krävs för att skapa robotens hero card-svar.

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

Testa roboten

Ladda ned och installera den senaste Bot Framework-emulatorn

  1. Kör exemplet lokalt på datorn. Om du behöver instruktioner kan du läsa README filen för C#-exemplet eller JavaScript-exemplet.
  2. Öppna emulatorn för att testa roboten.
    1. När du startar en konversation med din robot skickas en serie välkomstmeddelanden till dig.

    2. När du skickar ett "hello"-meddelande första gången svarar roboten med några råd.

    3. När du skickar efterföljande "hello"-meddelanden svarar roboten med "Du sa hej".

      Skärmbild av inledande interaktioner med roboten i emulatorn.

    4. Skicka ett "hjälp"-meddelande till din robot. Den svarar genom att skicka ett hjältekort.

      Skärmbild av hjälpmeddelandet och robotsvaret i emulatorn.

Ytterligare resurser

Läs mer om olika mediesvar i Lägg till media i meddelanden.

Nästa steg