Envoyer un message de bienvenue aux utilisateurs

S'APPLIQUE À : SDK v4

L’objectif principal lors de la création d’un bot est d’impliquer votre utilisateur dans une conversation utile. Pour atteindre cet objectif, l’une des meilleures méthodes consiste à s’assurer qu’à partir du moment où un utilisateur se connecte pour la première fois, il comprenne les fonctionnalités et l’utilité principales de votre bot, c’est-à-dire la raison pour laquelle il a été créé. Cet article fournit des exemples de code qui vous permettent d’accueillir les utilisateurs sur votre bot.

Remarque

Les kits de développement logiciel (SDK) JavaScript, C# et Python bot Framework continueront d'être pris en charge. Toutefois, le kit de développement logiciel (SDK) Java est mis hors service avec une prise en charge finale à long terme se terminant en novembre 2023. Seuls les correctifs de sécurité critiques et de bogues dans ce référentiel seront appliqués.

Les bots existants créés avec le kit de développement logiciel (SDK) Java continueront à fonctionner.

Pour la nouvelle version de bot, envisagez d'utiliser Power Virtual Agents et découvrez comment choisir la solution de bot conversationnel appropriée.

Pour plus d'informations, consultez Les futures versions de bot.

Prérequis

  • Comprendre les concepts de base des bots.
  • Une copie de l'échantillon du mot de bienvenue à l'utilisateur en C#, JS, Java ou Python. Le code de l’exemple est utilisé pour expliquer comment envoyer des messages de bienvenue.

À propos de cet exemple de code

Cet exemple de code montre comment détecter et accueillir de nouveaux utilisateurs quand ils sont initialement connectés à votre bot. Le diagramme suivant montre le flux logique pour ce bot.

Les deux principaux événements rencontrés par le bot sont :

  • OnMembersAddedAsync, appel émis, lorsqu'un nouvel utilisateur se connecte à votre bot.
  • OnMessageActivityAsync, appel émis, lorsque votre bot reçoit une nouvelle entrée utilisateur.

Logic flow diagram for C# sample.

Chaque fois qu'un nouvel utilisateur est connecté, le bot lui fournit un WelcomeMessage, un InfoMessage et un PatternMessage. Quand une nouvelle entrée utilisateur est reçue, WelcomeUserState est vérifié pour voir si DidBotWelcomeUser a la valeur true. Si ce n’est pas le cas, un premier message de bienvenue est retourné à l’utilisateur.

Créer l’état utilisateur

L’objet d’état utilisateur est créé au démarrage et la dépendance est injectée dans le constructeur de 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.

Bots\WelcomeUserBot.cs


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

Créer des accesseurs de propriété

Nous créons maintenant un accesseur de propriété pour fournir un descripteur à WelcomeUserState au sein de la méthode OnMessageActivityAsync. Ensuite, nous appelons la méthode GetAsync pour obtenir la clé incluse dans l’étendue appropriée. Nous enregistrons alors les données d’état utilisateur après chaque itération d’entrée utilisateur à l’aide de la méthode SaveChangesAsync.

Bots\WelcomeUserState.cs

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

Bots\WelcomeUserBot.cs

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

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

Détecter et accueillir les utilisateurs nouvellement connectés

Dans WelcomeUserBot, nous recherchons une mise à jour de l’activité à l’aide de OnMembersAddedAsync() pour voir si un nouvel utilisateur a été ajouté à la conversation, puis nous lui envoyons un ensemble de trois premiers messages de bienvenue WelcomeMessage, InfoMessage et PatternMessage. Le code complet de cette interaction est affiché ci-dessous.

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

Accueillir un nouvel utilisateur et ignorer l’entrée initiale

Il est également important de déterminer si l'entrée de votre utilisateur contient des informations utiles, ce qui peut varier en fonction de chaque canal. Pour vérifier que votre utilisateur bénéficie d'une bonne expérience sur tous les canaux possibles, nous examinons l'indicateur d'état didBotWelcomeUser. Si la valeur est « false », nous ne traitons pas l'entrée utilisateur initiale. Au lieu de cela, nous fournissons à l’utilisateur un premier message de bienvenue. La valeur booléenne welcomedUserProperty est ensuite définie sur « true » et stockée dans UserState. Notre code traitera désormais l’entrée de cet utilisateur à partir de toutes les activités de message supplémentaires.

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

Traiter une entrée supplémentaire

Une fois qu'un nouvel utilisateur a été accueilli, les informations d'entrée utilisateur sont évaluées pour chaque tour de message, et le bot fournit une réponse en fonction du contexte de cette entrée utilisateur. Le code suivant illustre la logique de décision utilisée pour générer cette réponse.

Une entrée 'intro' ou 'help' appelle la fonction SendIntroCardAsync pour présenter à l’utilisateur une bannière d’informations. Ce code est examiné dans la section suivante de cet article.

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

Utilisation d’un message de bienvenue sous forme de bannière

Comme indiqué ci-dessus, certaines entrées utilisateur génèrent une bannière en réponse à leur demande. Vous pouvez en apprendre plus sur les messages de bienvenue sous forme de bannière, consultez Envoyer une carte d’introduction. Vous trouverez ci-dessous le code nécessaire pour créer cette réponse sous forme de bannière du bot.

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

Tester le bot

Téléchargez et installez la dernière version de Bot Framework Emulator.

  1. Exécutez l’exemple en local sur votre machine. Si vous avez besoin d'instructions, reportez-vous au fichier README de l'échantillon C# ou de l'échantillon JavaScript.
  2. Ouvrez l'émulateur pour tester votre bot
    1. Lorsque vous démarrez une conversation avec votre bot, il vous enverra une série de messages de bienvenue.

    2. Lorsque vous envoyez un message « hello » la première fois, votre bot répond avec quelques conseils.

    3. Lorsque vous envoyez des messages « hello » suivants, votre bot répond avec « Vous avez dit bonjour ».

      Screenshot of initial interactions with your bot in the Emulator.

    4. Envoyez un message « d'aide » à votre bot. Il répond en envoyant une carte de bannière.

      Screenshot of the help message and the bot response in the Emulator.

Ressources complémentaires

Découvrez-en plus sur les réponses de différents médias dans Ajouter des actifs multimédias aux messages.

Étapes suivantes