Udostępnij za pośrednictwem


Wysyłanie wiadomości powitalnej do użytkowników

DOTYCZY: ZESTAW SDK w wersji 4

Głównym celem tworzenia dowolnego bota jest angażowanie użytkownika w zrozumiałą konwersację. Jednym z najlepszych sposobów osiągnięcia tego celu jest upewnienie się, że od momentu, gdy użytkownik po raz pierwszy nawiązuje połączenie, rozumie główne przeznaczenie i możliwości bota, przyczynę utworzenia bota. Ten artykuł zawiera przykłady kodu ułatwiające powitanie użytkowników bota.

Uwaga

Zestawy SDK języka JavaScript, C# i Python platformy Bot Framework będą nadal obsługiwane, jednak zestaw SDK języka Java jest wycofywany z ostatecznym długoterminowym wsparciem kończącym się w listopadzie 2023 r.

Istniejące boty utworzone za pomocą zestawu JAVA SDK będą nadal działać.

W przypadku tworzenia nowych botów rozważ użycie programu Microsoft Copilot Studio i przeczytaj o wyborze odpowiedniego rozwiązania copilot.

Aby uzyskać więcej informacji, zobacz Przyszłość tworzenia botów.

Wymagania wstępne

Informacje o tym przykładowym kodzie

Ten przykładowy kod pokazuje, jak wykrywać i powitać nowych użytkowników, gdy są oni początkowo połączeni z botem. Na poniższym diagramie przedstawiono przepływ logiki dla tego bota.

Dwa główne zdarzenia napotkane przez bota to:

  • OnMembersAddedAsync, wywoływany, gdy nowy użytkownik nawiązuje połączenie z botem.
  • OnMessageActivityAsync, wywoływany, gdy bot otrzymuje nowe dane wejściowe użytkownika.

Diagram przepływu logiki dla przykładu języka C#.

Za każdym razem, gdy nowy użytkownik jest połączony, otrzymuje element WelcomeMessage, InfoMessagei PatternMessage przez bota. Po odebraniu nowych danych wejściowych użytkownika jest sprawdzana wartość WelcomeUserState, aby sprawdzić, czy DidBotWelcomeUser ustawiono wartość true. W przeciwnym razie do użytkownika zostanie zwrócona początkowa wiadomość powitalna użytkownika.

Tworzenie stanu użytkownika

Obiekt stanu użytkownika jest tworzony podczas uruchamiania i zależność wstrzykiwana do konstruktora bota.

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.

Boty\WelcomeUserBot.cs


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

Tworzenie metod dostępu do właściwości

Teraz utworzymy metodę dostępu do właściwości, która udostępnia nam uchwyt wewnątrz WelcomeUserState OnMessageActivityAsync metody. Następnie wywołaj metodę , GetAsync aby uzyskać prawidłowy klucz o określonym zakresie. Następnie zapisujemy dane stanu użytkownika po każdej iteracji wejściowej SaveChangesAsync użytkownika przy użyciu metody .

Bots\WelcomeUserState.cs

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

Boty\WelcomeUserBot.cs

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

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

Wykrywanie i witanie nowo połączonych użytkowników

W aplikacji WelcomeUserBot sprawdzamy aktualizację działania przy użyciu polecenia OnMembersAddedAsync() , aby sprawdzić, czy nowy użytkownik został dodany do konwersacji, a następnie wysyłamy im zestaw trzech początkowych wiadomości WelcomeMessagepowitalnych i InfoMessage PatternMessage. Poniżej przedstawiono kompletny kod dla tej interakcji.

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

Powitanie nowego użytkownika i odrzucenie początkowych danych wejściowych

Ważne jest również, aby wziąć pod uwagę, kiedy dane wejściowe użytkownika mogą rzeczywiście zawierać przydatne informacje, a to może się różnić w przypadku każdego kanału. Aby upewnić się, że użytkownik ma dobre środowisko we wszystkich możliwych kanałach, sprawdzamy flagę stanu nieBotWelcomeUser , a jeśli jest to "false", nie przetwarzamy początkowych danych wejściowych użytkownika. Zamiast tego udostępniamy użytkownikowi początkową wiadomość powitalną. Wartość logiczna powitanaUserProperty jest następnie ustawiona na wartość "true", przechowywaną w parametrze UserState, a nasz kod będzie teraz przetwarzać dane wejściowe tego użytkownika ze wszystkich dodatkowych działań komunikatów.

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

Przetwarzanie dodatkowych danych wejściowych

Po powitaniu nowego użytkownika informacje wejściowe użytkownika są oceniane dla każdego kolei komunikatu, a bot udostępnia odpowiedź na podstawie kontekstu danych wejściowych tego użytkownika. Poniższy kod przedstawia logikę decyzyjną używaną do generowania tej odpowiedzi.

Dane wejściowe "intro" lub "help" wywołuje funkcję SendIntroCardAsync , aby przedstawić użytkownikowi kartę bohatera informacyjnego. Ten kod jest badany w następnej sekcji tego artykułu.

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

Korzystanie z powitania na karcie hero

Jak wspomniano powyżej, niektóre dane wejściowe użytkownika generują kartę Hero w odpowiedzi na żądanie. Więcej informacji na temat powitań kart bohaterów można znaleźć tutaj : Wyślij kartę wprowadzającą. Poniżej znajduje się kod wymagany do utworzenia odpowiedzi na karty hero tego bota.

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

Testowanie bota

Pobierz i zainstaluj najnowszą wersję emulatora platformy Bot Framework

  1. Uruchom przykład lokalnie na maszynie. Jeśli potrzebujesz instrukcji, zapoznaj się z plikiem README przykładu języka C# lub przykładu języka JavaScript.
  2. Otwórz emulator, aby przetestować bota.
    1. Po rozpoczęciu konwersacji z botem zostanie wysłana seria wiadomości powitalnych.

    2. Po pierwszym wysłaniu komunikatu "hello" bot odpowiada z poradami.

    3. Po wysłaniu kolejnych komunikatów "hello" bot odpowiada: "Powiedziałeś cześć".

      Zrzut ekranu przedstawiający początkowe interakcje z botem w emulatorze.

    4. Wyślij do bota komunikat "pomoc". Odpowiada, wysyłając kartę bohatera.

      Zrzut ekranu przedstawiający komunikat pomocy i odpowiedź bota w emulatorze.

Dodatkowe zasoby

Dowiedz się więcej o różnych odpowiedziach multimedialnych w temacie Dodawanie multimediów do wiadomości.

Następne kroki