Bagikan melalui


Mengirim pesan selamat datang kepada pengguna

BERLAKU UNTUK: SDK v4

Tujuan utama saat membuat bot apa pun adalah untuk melibatkan pengguna Anda dalam percakapan yang bermakna. Salah satu cara terbaik untuk mencapai tujuan ini adalah memastikan bahwa sejak pertama kali pengguna terhubung, mereka memahami tujuan dan kemampuan utama bot Anda, alasan bot Anda dibuat. Artikel ini menyediakan contoh kode untuk membantu Anda menyambut pengguna ke bot Anda.

Catatan

Bot Framework JavaScript, C#, dan Python SDK akan terus didukung, namun, Java SDK dihentikan dengan dukungan jangka panjang akhir yang berakhir pada November 2023.

Bot yang ada yang dibangun dengan Java SDK akan terus berfungsi.

Untuk pembuatan bot baru, pertimbangkan untuk menggunakan Microsoft Copilot Studio dan baca tentang memilih solusi salinan yang tepat.

Untuk informasi selengkapnya, lihat Masa depan pembuatan bot.

Prasyarat

  • Memahami dasar-dasar bot.
  • Salinan sampel pengguna Selamat Datang di Sampel C#, Sampel JS, Sampel Java, atau Sampel Python. Kode dari sampel digunakan untuk menjelaskan cara mengirim pesan selamat datang.

Tentang kode sampel ini

Kode sampel ini menunjukkan cara mendeteksi dan menyambut pengguna baru saat mereka awalnya tersambung ke bot Anda. Diagram berikut menunjukkan alur logika untuk bot ini.

Dua peristiwa utama yang ditemui oleh bot adalah:

  • OnMembersAddedAsync, dipanggil saat pengguna baru terhubung ke bot Anda.
  • OnMessageActivityAsync, dipanggil saat bot Anda menerima input pengguna baru.

Diagram alur logika untuk sampel C#.

Setiap kali pengguna baru terhubung, mereka disediakan dengan WelcomeMessage, InfoMessage, dan PatternMessage oleh bot. Saat input pengguna baru diterima, WelcomeUserState diperiksa untuk melihat apakah DidBotWelcomeUser diatur ke true. Jika tidak, pesan pengguna selamat datang awal dikembalikan kepada pengguna.

Membuat status pengguna

Objek status pengguna dibuat saat startup dan dependensi disuntikkan ke konstruktor bot.

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.

Bot\WelcomeUserBot.cs


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

Membuat aksesor properti

Kami sekarang membuat aksesor properti yang memberi kami pegangan OnMessageActivityAsync ke WelcomeUserState dalam metode . Kemudian panggil GetAsync metode untuk mendapatkan kunci yang terlingkup dengan benar. Kami kemudian menyimpan data status pengguna setelah setiap perulangan input pengguna menggunakan SaveChangesAsync metode .

Bot\WelcomeUserState.cs

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

Bot\WelcomeUserBot.cs

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

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

Mendeteksi dan menyambut pengguna yang baru tersambung

Di WelcomeUserBot, kami memeriksa pembaruan aktivitas menggunakan OnMembersAddedAsync() untuk melihat apakah pengguna baru telah ditambahkan ke percakapan dan kemudian mengirimi mereka satu set tiga pesan WelcomeMessageselamat datang awal, InfoMessage dan PatternMessage. Kode lengkap untuk interaksi ini ditunjukkan di bawah ini.

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

Selamat datang pengguna baru dan buang input awal

Penting juga untuk dipertimbangkan kapan input pengguna Anda mungkin benar-benar berisi informasi yang berguna, dan ini dapat bervariasi untuk setiap saluran. Untuk memastikan pengguna Anda memiliki pengalaman yang baik di semua saluran yang mungkin, kami memeriksa bendera status didBotWelcomeUser dan jika ini "false", kami tidak memproses input pengguna awal. Sebagai gantinya, kami memberikan pesan selamat datang awal kepada pengguna. Bool welcomedUserProperty kemudian diatur ke "true", disimpan di UserState dan kode kami sekarang akan memproses input pengguna ini dari semua aktivitas pesan tambahan.

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

Proses input tambahan

Setelah pengguna baru disambut, informasi input pengguna dievaluasi untuk setiap giliran pesan, dan bot memberikan respons berdasarkan konteks input pengguna tersebut. Kode berikut menunjukkan logika keputusan yang digunakan untuk menghasilkan respons tersebut.

Input 'intro' atau 'help' memanggil fungsi SendIntroCardAsync untuk menyajikan pengguna dengan kartu hero informasi. Kode tersebut diperiksa di bagian berikutnya dari artikel ini.

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

Menggunakan salam kartu pahlawan

Seperti disebutkan di atas, beberapa input pengguna menghasilkan Kartu Pahlawan sebagai respons terhadap permintaan mereka. Anda dapat mempelajari lebih lanjut tentang salam kartu pahlawan di sini Kirim Kartu Intro. Di bawah ini adalah kode yang diperlukan untuk membuat respons kartu hero bot ini.

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

Menguji bot

Unduh dan instal Emulator Kerangka Kerja Bot terbaru

  1. Jalankan sampel secara lokal di komputer Anda. Jika Anda memerlukan instruksi, lihat README file untuk sampel C# atau sampel JavaScript.
  2. Buka Emulator untuk menguji bot Anda.
    1. Saat Anda memulai percakapan dengan bot Anda, itu akan mengirimi Anda serangkaian pesan selamat datang.

    2. Saat Anda mengirim pesan "halo" untuk pertama kalinya, bot Anda membalas dengan beberapa saran.

    3. Ketika Anda mengirim pesan "halo" berikutnya, bot Anda membalas dengan, "Anda menyapa."

      Cuplikan layar interaksi awal dengan bot Anda di Emulator.

    4. Kirim pesan "bantuan" ke bot Anda. Ini merespons dengan mengirim kartu pahlawan.

      Cuplikan layar pesan bantuan dan respons bot di Emulator.

Sumber Tambahan

Pelajari selengkapnya tentang berbagai respons media di Menambahkan media ke pesan.

Langkah berikutnya