Kullanıcılara hoş geldiniz iletisi gönderme

ŞUNLAR IÇIN GEÇERLIDIR: SDK v4

Herhangi bir bot oluştururken birincil hedef, kullanıcınızla anlamlı bir konuşmada etkileşim kurmaktır. Bu hedefe ulaşmanın en iyi yollarından biri, bir kullanıcı ilk kez bağlandığından botunuzun ana amacını ve yeteneklerini, botunuzun oluşturulma nedenini anlamasını sağlamaktır. Bu makalede, kullanıcıları botunuza karşılamanıza yardımcı olacak kod örnekleri sağlanır.

Not

Bot Framework JavaScript, C# ve Python SDK'ları desteklenmeye devam edecektir, ancak Java SDK'sı son uzun vadeli destek Kasım 2023'te sona erecek şekilde kullanımdan kaldırılacaktır.

Java SDK ile oluşturulan mevcut botlar çalışmaya devam edecektir.

Yeni bot derlemesi için Microsoft Copilot Studio'yu kullanmayı göz önünde bulundurun ve doğru copilot çözümünü seçme hakkında bilgi edinin.

Daha fazla bilgi için bkz . Bot oluşturmanın geleceği.

Önkoşullar

  • Botla ilgili temel bilgileri anlama.
  • C# Örneği, JS Örneği, Java Örneği veya Python Örneği'ndeki Hoş Geldiniz kullanıcı örneğinin bir kopyası. Örnekteki kod, hoş geldiniz iletileri göndermeyi açıklamak için kullanılır.

Bu örnek kod hakkında

Bu örnek kod, botunuza başlangıçta bağlı olan yeni kullanıcıları algılamayı ve karşılamayı gösterir. Aşağıdaki diyagramda bu bot için mantıksal akış gösterilmektedir.

Bot tarafından karşılaşılan iki ana olay şunlardır:

  • OnMembersAddedAsync, botunuza yeni bir kullanıcı bağlandığında çağrılır.
  • OnMessageActivityAsync, botunuz yeni kullanıcı girişi aldığında çağrılır.

C# örneği için mantıksal akış diyagramı.

Yeni bir kullanıcı her bağlandığında bot tarafından bir WelcomeMessage, InfoMessageve PatternMessage ile sağlanır. Yeni bir kullanıcı girişi alındığında WelcomeUserState değeri true olarak ayarlandığını DidBotWelcomeUser görmek için denetlendi. Aksi takdirde, kullanıcıya ilk karşılama kullanıcı iletisi döndürülür.

Kullanıcı durumu oluşturma

Kullanıcı durumu nesnesi başlangıçta oluşturulur ve bağımlılık bot oluşturucusuna eklenir.

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.

Botlar\WelcomeUserBot.cs


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

Özellik erişimcileri oluşturma

Şimdi bize yönteminin içinde OnMessageActivityAsync bir tanıtıcı WelcomeUserState sağlayan bir özellik erişimcisi oluşturuyoruz. Ardından, doğru kapsamlı anahtarı almak için yöntemini çağırın GetAsync . Ardından, yöntemini kullanarak her kullanıcı girişi yinelemesinin SaveChangesAsync ardından kullanıcı durumu verilerini kaydederiz.

Botlar\WelcomeUserState.cs

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

Botlar\WelcomeUserBot.cs

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

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

Yeni bağlanan kullanıcıları algılama ve karşılama

WelcomeUserBot'ta, konuşmaya yeni bir kullanıcı eklenip eklenmediğini görmek için kullanarak OnMembersAddedAsync() bir etkinlik güncelleştirmesi olup olmadığını denetler ve sonra onlara üç başlangıç karşılama iletisi InfoMessage WelcomeMessagegöndeririz ve PatternMessage. Bu etkileşim için tam kod aşağıda gösterilmiştir.

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

Yeni kullanıcıyı hoş geldiniz ve ilk girişi at

Ayrıca, kullanıcınızın girişinin gerçekten yararlı bilgiler içerebileceği ve bu durum her kanal için farklılık gösterebileceği durumlarda da göz önünde bulundurmanız önemlidir. Kullanıcınızın tüm olası kanallarda iyi bir deneyime sahip olduğundan emin olmak için didBotWelcomeUser durum bayrağını kontrol ediyoruz ve bu "false" ise ilk kullanıcı girişini işlemeyiz. Bunun yerine kullanıcıya bir ilk karşılama iletisi sağlıyoruz. Bool welcomedUserProperty değeri daha sonra UserState'te depolanan "true" olarak ayarlanır ve kodumuz artık tüm ek ileti etkinliklerinden bu kullanıcının girişini işler.

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

Ek girişi işleme

Yeni bir kullanıcı kabul edildikten sonra, her ileti dönüşü için kullanıcı girişi bilgileri değerlendirilir ve bot bu kullanıcı girişinin bağlamını temel alan bir yanıt sağlar. Aşağıdaki kod, bu yanıtı oluşturmak için kullanılan karar mantığını gösterir.

'intro' veya 'help' girişi, kullanıcıya bilgilendirici bir hero kartı sunmak için işlevini SendIntroCardAsync çağırır. Bu kod, bu makalenin sonraki bölümünde incelendi.

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

Hero kartı karşılamayı kullanma

Yukarıda belirtildiği gibi, bazı kullanıcı girişleri isteklerine yanıt olarak bir Hero Kartı oluşturur. Kahraman kartı karşılamaları hakkında daha fazla bilgi için bkz . Giriş Kartı Gönderme. Bu bota ait hero kart yanıtını oluşturmak için gereken kod aşağıdadır.

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

Botu test edin

En son Bot Framework Öykünücüsü'ni indirme ve yükleme

  1. Örneği makinenizde yerel olarak çalıştırın. Yönergelere ihtiyacınız varsa C# örneği veya JavaScript örneği için dosyaya bakınREADME.
  2. Botunuzu test etmek için Öykünücü'yü açın.
    1. Botunuzla bir konuşma başlattığınızda size bir dizi karşılama iletisi gönderilir.

    2. İlk kez "merhaba" iletisi gönderdiğinizde botunuz bazı önerilerle yanıtlar.

    3. Sonraki "merhaba" iletilerini gönderdiğinizde botunuz "Merhaba dedin" yanıtını verir.

      Öykünücü'de botunuzla ilk etkileşimlerin ekran görüntüsü.

    4. Botunuza bir "yardım" iletisi gönderin. Bir kahraman kartı göndererek yanıt verir.

      Öykünücü'deki yardım iletisinin ve bot yanıtının ekran görüntüsü.

Ek Kaynaklar

İletilere medya ekleme bölümünde çeşitli medya yanıtları hakkında daha fazla bilgi edinin.

Sonraki adımlar