Odeslat uvítací zprávu uživatelům

PLATÍ PRO: SDK v4

Hlavním cílem při vytváření robota je zapojit uživatele do smysluplné konverzace. Jedním z nejlepších způsobů, jak tohoto cíle dosáhnout, je zajistit, aby se od okamžiku, kdy se uživatel poprvé připojí, porozuměl hlavnímu účelu a možnostem robota, důvodu vytvoření robota. Tento článek obsahuje příklady kódu, které vám pomůžou přivítat uživatele robota.

Poznámka:

Sady SDK služby Bot Framework JavaScript, C# a Python budou nadále podporovány, ale sada Java SDK se vyřazuje s konečnou dlouhodobou podporou končící v listopadu 2023.

Stávající roboti sestavení pomocí sady Java SDK budou i nadále fungovat.

Pro nové vytváření robotů zvažte použití Power Virtual Agents a přečtěte si o výběru správného řešení chatovacího robota.

Další informace najdete v tématu Budoucnost vytváření robotů.

Požadavky

O tomto ukázkovém kódu

Tento ukázkový kód ukazuje, jak rozpoznat a přivítat nové uživatele, když jsou původně připojení k robotovi. Následující diagram znázorňuje tok logiky pro tohoto robota.

Mezi dvě hlavní události, se kterými robot narazí, jsou:

  • OnMembersAddedAsynczavolá se, když se k robotovi připojí nový uživatel.
  • OnMessageActivityAsync, volá se, když robot obdrží nový uživatelský vstup.

Diagram toku logiky pro ukázku jazyka C#.

Kdykoli se připojí nový uživatel, bude k dispozici s WelcomeMessageInfoMessageuživatelem a PatternMessage robotem. Při přijetí nového uživatelského vstupu se zkontroluje WelcomeUserState a zjistí, jestli DidBotWelcomeUser je nastavená hodnota true. Pokud ne, vrátí se uživateli počáteční uvítací zpráva uživatele.

Vytvoření stavu uživatele

Objekt stavu uživatele je vytvořen při spuštění a závislost vložen do konstruktoru robota.

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.

Roboti\WelcomeUserBot.cs


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

Vytvoření přístupových objektů vlastností

Teď vytvoříme přístupové objekty vlastností, které nám poskytují popisovač WelcomeUserState uvnitř OnMessageActivityAsync metody. Potom zavolejte metodu GetAsync , aby získal správně vymezený klíč. Potom pomocí metody uložíme data o stavu uživatele po každé iteraci SaveChangesAsync vstupu uživatele.

Roboti\WelcomeUserState.cs

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

Roboti\WelcomeUserBot.cs

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

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

Zjištění a pozdrav nově připojených uživatelů

V aplikaci WelcomeUserBot zkontrolujeme aktualizaci aktivit pomocí funkce OnMembersAddedAsync() Zjistit, jestli byl do konverzace přidán nový uživatel, a pak jim pošleme sadu tří počátečních uvítacích zpráv WelcomeMessageInfoMessage a PatternMessage. Níže je uvedený úplný kód pro tuto interakci.

Roboti\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ítejte nového uživatele a zahoďte počáteční vstup.

Je také důležité zvážit, kdy vstup uživatele může ve skutečnosti obsahovat užitečné informace, a to se může u každého kanálu lišit. Abychom zajistili, že váš uživatel má dobré prostředí ve všech možných kanálech, zkontrolujeme příznak stavu didBotWelcomeUser a pokud se jedná o false, nezpracováváme počáteční uživatelský vstup. Místo toho uživateli poskytneme úvodní uvítací zprávu. Bool vítáUserProperty je pak nastaven na "true", uložený v UserState a náš kód nyní zpracuje vstup tohoto uživatele ze všech dalších aktivit zpráv.

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

Zpracování dalšího vstupu

Jakmile bude nový uživatel vítán, vyhodnocují se informace o vstupu uživatele pro každé otočení zprávy a robot poskytne odpověď na základě kontextu tohoto uživatelského vstupu. Následující kód ukazuje rozhodovací logiku použitou k vygenerování této odpovědi.

Vstup "intro" nebo "help" volá funkci SendIntroCardAsync , aby uživateli představil informační kartu hrdiny. Tento kód je zkoumán v další části tohoto článku.

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

Pozdrav pomocí karty hero

Jak už bylo zmíněno výše, některé uživatelské vstupy vygenerují v reakci na svůj požadavek kartu Hero. Další informace o pozdravech na kartě hrdiny najdete tady : Poslat úvodní kartu. Níže je uvedený kód potřebný k vytvoření odpovědi na kartu hrdiny tohoto robota.

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

Otestování robota

Stažení a instalace nejnovější aplikace Bot Framework Emulator

  1. Spusťte ukázku místně na svém počítači. Pokud potřebujete pokyny, projděte si README soubor ukázky jazyka C# nebo javascriptové ukázky.
  2. Otevřete emulátor a otestujte robota.
    1. Když zahájíte konverzaci s robotem, pošle vám řadu uvítacích zpráv.

    2. Když poprvé pošlete zprávu "hello", robot odpoví některými radami.

    3. Když pošlete další zprávy "hello", robot odpoví textem "Řekl jste dobrý den".

      Snímek obrazovky s počátečními interakcemi s robotem v emulátoru

    4. Pošlete robotovi zprávu "nápověda". Reaguje odesláním karty hrdiny.

      Snímek obrazovky se zprávou nápovědy a odpovědí robota v emulátoru

Další materiály

Přečtěte si další informace o různých mediálních odpovědích v doplňku Přidat multimédia do zpráv.

Další kroky