Megosztás a következőn keresztül:


Üdvözlő üzenet küldése a felhasználóknak

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

A robotok létrehozásakor az elsődleges cél a felhasználó bevonása egy tartalmas beszélgetésbe. Ennek a célnak az egyik legjobb módja annak biztosítása, hogy a felhasználó első kapcsolódásától kezdve tisztában legyen a robot fő céljával és képességeivel, a robot létrehozásának okával. Ez a cikk kód példákat tartalmaz, amelyek segítenek a felhasználóknak a robotban való köszöntésében.

Feljegyzés

A Bot Framework JavaScript, C# és Python SDK-k továbbra is támogatottak lesznek, a Java SDK-t azonban 2023 novemberében végső hosszú távú támogatással kivonják.

A Java SDK-val létrehozott meglévő robotok továbbra is működni fognak.

Az új robotépítéshez fontolja meg a Microsoft Copilot Studio használatát, és olvassa el a megfelelő copilot-megoldás kiválasztását.

További információ: A robotépítés jövője.

Előfeltételek

  • A robot alapjainak megismerése.
  • Az üdvözlőfelhasználói minta másolata c# mintában, JS-mintában, Java-mintában vagy Python-mintában. A mintakód az üdvözlő üzenetek küldésének magyarázatára szolgál.

A mintakód ismertetése

Ez a mintakód bemutatja, hogyan észlelheti és üdvözölheti az új felhasználókat, amikor először csatlakoznak a robothoz. Az alábbi ábrán a robot logikai folyamata látható.

A robot két fő eseménye a következő:

  • OnMembersAddedAsync, meghívja, amikor egy új felhasználó csatlakozik a robothoz.
  • OnMessageActivityAsync, akkor hívja meg, amikor a robot új felhasználói bemenetet kap.

Logikai folyamatábra C#-mintához.

Amikor egy új felhasználó csatlakozik, egy , InfoMessageés PatternMessage a robot biztosítja WelcomeMessageőket. Amikor új felhasználói bemenet érkezik, a WelcomeUserState be van jelölve, hogy DidBotWelcomeUser igaz értékre van-e állítva. Ha nem, a rendszer egy kezdeti üdvözlő felhasználói üzenetet ad vissza a felhasználónak.

Felhasználói állapot létrehozása

A felhasználóállapot-objektum az indításkor jön létre, a függőség pedig a robotkonstruktorba lesz injektálva.

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.

Robotok\WelcomeUserBot.cs


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

Tulajdonságkiegészítők létrehozása

Most létrehozunk egy tulajdonságkiegészítőt, amely egy fogópontot WelcomeUserState biztosít a OnMessageActivityAsync metóduson belül. Ezután hívja meg a GetAsync metódust a megfelelő hatókörű kulcs lekéréséhez. Ezután a metódus használatával minden egyes felhasználói bemeneti iteráció után menti a SaveChangesAsync felhasználói állapotadatokat.

Robotok\WelcomeUserState.cs

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

Robotok\WelcomeUserBot.cs

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

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

Újonnan csatlakoztatott felhasználók észlelése és köszöntése

A WelcomeUserBot alkalmazásban egy tevékenységfrissítést keresünk, amelyből OnMembersAddedAsync() megtudhatja, hogy új felhasználó lett-e hozzáadva a beszélgetéshez, majd három kezdeti üdvözlőüzenetet WelcomeMessageküldünk nekik, InfoMessage valamint PatternMessage. Az interakció teljes kódját alább találja.

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

Új felhasználó köszöntése és a kezdeti bemenet elvetése

Azt is fontos figyelembe venni, hogy a felhasználó bemenete ténylegesen tartalmaz-e hasznos információkat, és ez az egyes csatornák esetében eltérő lehet. Annak érdekében, hogy a felhasználó minden lehetséges csatornán megfelelő felhasználói élményben legyen része, ellenőrizzük a didBotWelcomeUser állapotjelzőt, és ha ez "hamis", akkor nem dolgozzuk fel a kezdeti felhasználói bemenetet. Ehelyett egy kezdeti üdvözlő üzenetet küldünk a felhasználónak. A bool welcomedUserProperty ezután "true" (igaz) értékre van állítva, amelyet a UserState tárol, és a kód most feldolgozni fogja ennek a felhasználónak az összes további üzenettevékenységből származó bemenetét.

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

További bemenet feldolgozása

Miután egy új felhasználót üdvözölt, a rendszer kiértékeli a felhasználói bemeneti adatokat minden egyes üzenetfordulónál, és a robot a felhasználói bemenet kontextusa alapján választ ad. Az alábbi kód a válasz létrehozásához használt döntési logikát mutatja be.

Az "intro" vagy a "súgó" bemenete meghívja a függvényt SendIntroCardAsync , hogy egy információs főkártyával mutassa be a felhasználót. Ezt a kódot a cikk következő szakaszában vizsgáljuk meg.

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

A fő képkártya üdvözlőlapjának használata

Ahogy fentebb említettük, egyes felhasználói bemenetek hőskártyát hoznak létre a kérésükre válaszul. A fő képkártyák üdvözléséről itt olvashat bővebben: Intro Card küldése. Az alábbiakban a robot főkártya-válaszának létrehozásához szükséges kód látható.

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

A robot tesztelése

Töltse le és telepítse a legújabb Bot Framework Emulatort

  1. Futtassa a mintát helyileg a számítógépen. Ha útmutatásra van szüksége, tekintse meg a README C# vagy JavaScript-minta fájlát.
  2. Nyissa meg az Emulátort a robot teszteléséhez.
    1. Amikor beszélgetést indít a robottal, az üdvözlő üzenetek sorozatát küldi el Önnek.

    2. Amikor első alkalommal küld "hello" üzenetet, a robot néhány tanácsot ad.

    3. Amikor további "hello" üzeneteket küld, a robot a következővel válaszol: "Hello".

      Képernyőkép a robottal való kezdeti interakciókról az Emulatorban.

    4. Küldjön egy "súgó" üzenetet a robotnak. Egy főkártya küldésével válaszol.

      Képernyőkép a súgóüzenetről és a robot válaszáról az Emulátorban.

További források

További információ a különböző médiaválaszokról a Média hozzáadása üzenetekhez című témakörben.

Következő lépések