Partilhar via


Enviar mensagem de boas-vindas aos utilizadores

APLICA-SE A: SDK v4

O objetivo principal ao criar qualquer bot é envolver seu usuário em uma conversa significativa. Uma das melhores maneiras de atingir esse objetivo é garantir que, a partir do momento em que um usuário se conecta pela primeira vez, ele entende o objetivo principal e os recursos do seu bot, a razão pela qual seu bot foi criado. Este artigo fornece exemplos de código para ajudá-lo a receber usuários em seu bot.

Nota

Os SDKs JavaScript, C# e Python do Bot Framework continuarão a ser suportados, no entanto, o Java SDK está sendo desativado com suporte final de longo prazo terminando em novembro de 2023.

Os bots existentes construídos com o Java SDK continuarão a funcionar.

Para a criação de novos bots, considere usar o Microsoft Copilot Studio e leia sobre como escolher a solução de copilot certa.

Para obter mais informações, consulte O futuro da criação de bots.

Pré-requisitos

Sobre este código de exemplo

Este código de exemplo mostra como detetar e receber novos usuários quando eles estão inicialmente conectados ao seu bot. O diagrama a seguir mostra o fluxo lógico para esse bot.

Os dois principais eventos encontrados pelo bot são:

  • OnMembersAddedAsync, chamado quando um novo usuário se conecta ao seu bot.
  • OnMessageActivityAsync, chamado quando o bot recebe uma nova entrada do usuário.

Diagrama de fluxo lógico para amostra de C#.

Sempre que um novo usuário é conectado, ele recebe um WelcomeMessage, InfoMessagee PatternMessage pelo bot. Quando uma nova entrada de usuário é recebida, WelcomeUserState é verificado para ver se DidBotWelcomeUser está definido como true. Caso contrário, uma mensagem inicial de boas-vindas do usuário será retornada ao usuário.

Criar estado do usuário

O objeto de estado do usuário é criado na inicialização e a dependência é injetada no construtor do 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;
}

Criar acessadores de propriedade

Agora criamos um acessador de propriedade que nos fornece um identificador para WelcomeUserState dentro do OnMessageActivityAsync método. Em seguida, chame o GetAsync método para obter a chave com escopo adequado. Em seguida, salvamos os dados de estado do usuário após cada iteração de entrada do usuário usando o SaveChangesAsync método.

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

Detetar e cumprimentar usuários recém-conectados

No WelcomeUserBot, verificamos se há uma atualização de atividade usando OnMembersAddedAsync() para ver se um novo usuário foi adicionado à conversa e, em seguida, enviamos a eles um conjunto de três mensagens WelcomeMessagede boas-vindas iniciais , InfoMessage e PatternMessage. O código completo para esta interação é mostrado abaixo.

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

Dê as boas-vindas ao novo usuário e descarte a entrada inicial

Também é importante considerar quando a entrada do usuário pode realmente conter informações úteis, e isso pode variar para cada canal. Para garantir que seu usuário tenha uma boa experiência em todos os canais possíveis, verificamos a bandeira de status didBotWelcomeUser e, se isso for "falso", não processamos a entrada inicial do usuário. Em vez disso, fornecemos ao usuário uma mensagem inicial de boas-vindas. O bool welcomedUserProperty é então definido como "true", armazenado em UserState e nosso código agora processará a entrada desse usuário de todas as atividades de mensagem adicionais.

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

Entrada adicional do processo

Depois que um novo usuário é bem-vindo, as informações de entrada do usuário são avaliadas para cada turno de mensagem, e o bot fornece uma resposta com base no contexto dessa entrada do usuário. O código a seguir mostra a lógica de decisão usada para gerar essa resposta.

Uma entrada de 'intro' ou 'ajuda' chama a função SendIntroCardAsync para apresentar ao usuário um cartão herói informativo. Esse código é examinado na próxima seção deste artigo.

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

Usando a saudação do cartão de herói

Como mencionado acima, algumas entradas do usuário geram um cartão de herói em resposta à sua solicitação. Você pode saber mais sobre saudações de cartão de herói aqui Envie um cartão de introdução. Abaixo está o código necessário para criar a resposta do cartão herói deste 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);
    }
}

Testar o bot

Baixe e instale o mais recente Bot Framework Emulator

  1. Execute a amostra localmente na sua máquina. Se precisar de instruções, consulte o README arquivo para o exemplo de C# ou JavaScript.
  2. Abra o emulador para testar seu bot.
    1. Quando você inicia uma conversa com seu bot, ele envia uma série de mensagens de boas-vindas.

    2. Quando você envia uma mensagem de "olá" pela primeira vez, seu bot responde com alguns conselhos.

    3. Quando você envia mensagens de "olá" subsequentes, seu bot responde com: "Você disse olá".

      Captura de tela das interações iniciais com seu bot no emulador.

    4. Envie uma mensagem de "ajuda" para o seu bot. Ele responde enviando um cartão de herói.

      Captura de tela da mensagem de ajuda e da resposta do bot no emulador.

Recursos Adicionais

Saiba mais sobre várias respostas de mídia em Adicionar mídia a mensagens.

Próximos passos