Condividi tramite


Inviare un messaggio di benvenuto agli utenti

SI APPLICA A: SDK v4

L'obiettivo principale durante la creazione di qualsiasi bot è coinvolgere l'utente in una conversazione significativa. Uno dei modi migliori per realizzare questo obiettivo è garantire che dal primo momento in cui si connette, un utente sia in grado di identificare l'obiettivo principale e le capacità del bot, ovvero il motivo per cui è stato creato. Questo articolo fornisce esempi di codice per fare in modo che il bot visualizzi un messaggio di benvenuto agli utenti.

Nota

Gli SDK JavaScript, C# e Python di Bot Framework continueranno a essere supportati, ma Java SDK verrà ritirato con il supporto finale a lungo termine che termina a novembre 2023.

I bot esistenti creati con Java SDK continueranno a funzionare.

Per la creazione di nuovi bot, è consigliabile usare Microsoft Copilot Studio e leggere le informazioni sulla scelta della soluzione copilota appropriata.

Per altre informazioni, vedere Il futuro della compilazione di bot.

Prerequisiti

Informazioni sul codice di esempio

Questo codice di esempio illustra come rilevare e accogliere i nuovi utenti quando sono inizialmente connessi al bot. Il diagramma seguente illustra il flusso della logica per questo bot.

I due eventi principali rilevati dal bot sono:

  • OnMembersAddedAsync, chiamato quando un nuovo utente si connette al bot.
  • OnMessageActivityAsync, chiamato quando il bot riceve un nuovo input utente.

Diagramma di flusso della logica per l'esempio C#.

Ogni volta che un nuovo utente è connesso, viene fornito con un WelcomeMessage, InfoMessagee PatternMessage dal bot. Quando viene ricevuto nuovo input dell'utente, viene eseguita una verifica su WelcomeUserState per controllare se DidBotWelcomeUser è impostato su true. In caso contrario, all'utente viene visualizzato un messaggio iniziale di benvenuto.

Creare lo stato dell'utente

L'oggetto di stato dell'utente viene creato all'avvio e la dipendenza viene inserita nel costruttore del 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;
}

Creare le funzioni di accesso alle proprietà

Creare ora una funzione di accesso alla proprietà che fornisce un handle a WelcomeUserState all'interno del metodo OnMessageActivityAsync. Chiamare quindi il metodo GetAsync per ottenere la chiave con ambito corretto. Salvare infine i dati sullo stato dell'utente dopo ogni iterazione di input dell'utente usando il metodo 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);
}

Rilevare e salutare i nuovi utenti connessi

In WelcomeUserBot viene verificata la presenza di un aggiornamento dell'attività con OnMembersAddedAsync() per sapere se alla conversazione è stato aggiunto un nuovo utente al quale inviare un set di tre messaggi iniziali di benvenuto, ovvero WelcomeMessage, InfoMessage e PatternMessage. Ecco il codice completo per questa interazione.

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

Salutare il nuovo utente e rimuovere l'input iniziale

È anche importante considerare quando l'input dell'utente potrebbe effettivamente contenere informazioni utili e questo può variare per ogni canale. Per garantire che l'utente abbia un'esperienza ottimale su tutti i canali possibili, controlliamo il flag di stato didBotWelcomeUser e, se questo è "false", non viene elaborato l'input iniziale dell'utente. All'utente viene invece visualizzato un messaggio iniziale di benvenuto. La proprietà booleana welcomedUserProperty viene quindi impostata su "true" e archiviata in UserState. A questo punto il codice elabora l'input dell'utente da tutte le altre attività di messaggio.

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

Elaborare l'input aggiuntivo

Dopo che un nuovo utente è stato accolto, le informazioni di input dell'utente vengono valutate per ogni turno di messaggio e il bot fornisce una risposta in base al contesto dell'input dell'utente. Il codice seguente mostra la logica delle decisioni usata per generare la risposta.

Se l'input è 'intro' o 'help', viene chiamata la funzione SendIntroCardAsync per presentare all'utente una scheda banner informativa. Il codice relativo viene esaminato nella sezione successiva di questo articolo.

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

Uso delle schede banner per i saluti

Come accennato in precedenza, con alcuni input dell'utente viene generata una scheda banner in risposta alla richiesta. Per altre informazioni sulle schede banner per i saluti, vedere Inviare una scheda introduttiva. Ecco il codice necessario per creare la risposta della scheda banner di questo 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);
    }
}

Test del bot

Scaricare e installare l'ultima versione di Bot Framework Emulator

  1. Eseguire l'esempio in locale nel computer. Se sono necessarie istruzioni, vedere il file per l'esempio README C# o JavaScript.
  2. Aprire l'emulatore per testare il bot.
    1. Quando si avvia una conversazione con il bot, verrà inviata una serie di messaggi di benvenuto.

    2. Quando si invia un messaggio "hello" la prima volta, il bot risponde con alcuni consigli.

    3. Quando si inviano messaggi "hello" successivi, il bot risponde con "You said hello".

      Screenshot delle interazioni iniziali con il bot nell'emulatore.

    4. Inviare un messaggio "help" al bot. Risponde inviando una scheda hero.

      Screenshot del messaggio della Guida e della risposta del bot nell'emulatore.

Risorse aggiuntive

Per altre informazioni sulle risposte con diversi file multimediali, vedere Aggiungere file multimediali ai messaggi.

Passaggi successivi