Guida introduttiva: Aggiungere un bot all'app di chat
Informazioni su come creare esperienze di intelligenza artificiale conversazionale in un'applicazione di chat usando il canale di messaggistica chat Servizi di comunicazione di Azure disponibile in Azure servizio Bot. In questa guida introduttiva si crea un bot usando BotFramework SDK. Si integra quindi il bot in un'applicazione di chat creata usando Communication Services Chat SDK.
In questa guida introduttiva si apprende come:
- Creare e distribuire un bot in Azure
- Ottenere una risorsa di Servizi di comunicazione
- Abilitare il canale chat di Servizi di comunicazione per il bot
- Creare un'app di chat e aggiungere il bot come partecipante
- Esplorare altre funzionalità per il bot
Prerequisiti
- Un account Azure e una sottoscrizione attiva. Creare un account gratuitamente.
- Visual Studio 2019 o versione successiva.
- Versione più recente di .NET Core. In questa guida introduttiva si usa .NET Core 3.1. Assicurarsi di installare la versione corrispondente all'istanza di Visual Studio, a 32 bit o a 64 bit.
- Bot Framework SDK
Creare e distribuire un bot in Azure
Per usare Servizi di comunicazione di Azure chat come canale in Azure servizio Bot, distribuire prima un bot. Per distribuire un bot, seguire questa procedura:
- Creare una risorsa di Azure servizio Bot
- Ottenere l'ID e la password dell'app del bot
- Creare un'app Web per contenere la logica del bot
- Creare un endpoint di messaggistica per il bot
Creare una risorsa di Azure servizio Bot
Usare prima di tutto il portale di Azure per creare una risorsa di Azure servizio Bot. Il canale chat di Servizi di comunicazione supporta bot a tenant singolo, bot di identità gestiti e bot multi-tenant. Ai fini di questa guida introduttiva si userà un bot multi-tenant .
Per configurare un bot di identità a tenant singolo o gestito, vedere Informazioni sull'identità del bot.
Per un bot di identità gestita, potrebbe essere necessario aggiornare l'identità del servizio bot.
Ottenere l'ID app e la password dell'app del bot
Ottenere quindi l'ID e la password dell'app Microsoft assegnati al bot al momento della distribuzione. Questi valori vengono usati per le configurazioni successive.
Creare un'app Web per contenere la logica del bot
Per creare un'app Web per il bot, è possibile rivedere gli esempi di Bot Builder per lo scenario o usare Bot Builder SDK per creare un'app Web. Uno degli esempi più semplici è Echo Bot.
Azure servizio Bot in genere prevede che bot Application Web App Controller esponga un endpoint nel formato /api/messages
. L'endpoint gestisce tutti i messaggi inviati al bot.
Per creare l'app bot, usare l'interfaccia della riga di comando di Azure per creare una risorsa del servizio app Azure o creare l'app nel portale di Azure.
Per creare un'app Web bot usando il portale di Azure:
Nel portale selezionare Crea una risorsa. Nella casella di ricerca immettere l'app Web. Selezionare il riquadro App Web.
In Crea app Web selezionare o immettere i dettagli per l'app, inclusa l'area in cui si vuole distribuire l'app.
Selezionare Rivedi e crea per convalidare la distribuzione ed esaminare i dettagli della distribuzione. Selezionare Crea.
Quando viene creata la risorsa dell'app Web, copiare l'URL del nome host visualizzato nei dettagli della risorsa. L'URL fa parte dell'endpoint creato per l'app Web.
Creare un endpoint di messaggistica per il bot
Successivamente, nella risorsa bot creare un endpoint di messaggistica dell'app Web:
Nella portale di Azure passare alla risorsa azure Bot. Nel menu della risorsa selezionare Configurazione.
In Configurazione, per endpoint di messaggistica, incollare l'URL del nome host dell'app Web copiata nella sezione precedente. Aggiungere l'URL con
/api/messages
.Seleziona Salva.
Distribuire l'app Web
Il passaggio finale per creare un bot consiste nel distribuire l'app Web. Per questa guida introduttiva, usare l'esempio Echo Bot. La funzionalità Echo Bot è limitata all'eco dell'input dell'utente. Ecco come distribuirlo nell'app Web in Azure:
Usare Git per clonare questo repository GitHub:
git clone https://github.com/Microsoft/BotBuilder-Samples.git cd BotBuilder-Samples
In Visual Studio aprire il progetto Echo Bot.
Nel progetto di Visual Studio aprire il file Appsettings.json . Incollare l'ID app Microsoft e la password dell'app copiati in precedenza:
{ "MicrosoftAppId": "<App-registration-ID>", "MicrosoftAppPassword": "<App-password>" }
Usare quindi Visual Studio per i bot C# per distribuire il bot.
È anche possibile usare una finestra del prompt dei comandi per distribuire un bot di Azure.
In Visual Studio, in Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto EchoBot e scegliere Pubblica:
Selezionare Nuovo per creare un nuovo profilo di pubblicazione. Per Destinazione selezionare Azure:
Per la destinazione specifica, selezionare app Azure Servizio:
Nella configurazione della distribuzione selezionare l'app Web nei risultati visualizzati dopo l'accesso all'account Azure. Per completare il profilo, selezionare Fine e quindi selezionare Pubblica per avviare la distribuzione.
Ottenere una risorsa di Servizi di comunicazione
Dopo aver creato e distribuito il bot, creare una risorsa di Servizi di comunicazione da usare per configurare un canale di Servizi di comunicazione:
Completare i passaggi per creare una risorsa di Servizi di comunicazione.
Creare un utente di Servizi di comunicazione e rilasciare un token di accesso utente. Assicurarsi di impostare l'ambito per la chat. Copiare la stringa del token e la stringa ID utente.
Abilitare il canale Chat di Servizi di comunicazione
Quando si dispone di una risorsa di Servizi di comunicazione, è possibile configurare un canale di Servizi di comunicazione nella risorsa bot. In questo processo viene generato un ID utente per il bot.
Nella portale di Azure passare alla risorsa azure Bot. Nel menu della risorsa selezionare Canali. Nell'elenco dei canali disponibili selezionare Servizi di comunicazione di Azure - Chat.
Selezionare Connessione per visualizzare un elenco delle risorse di Servizi di comunicazione disponibili nella sottoscrizione.
Nel riquadro Nuovo Connessione ion selezionare la risorsa chat di Servizi di comunicazione e quindi selezionare Applica.
Quando vengono verificati i dettagli della risorsa, nella colonna Bot Servizi di comunicazione di Azure ID viene visualizzato un ID bot. È possibile usare l'ID bot per rappresentare il bot in un thread di chat usando l'API AddParticipant di Chat di Servizi di comunicazione. Dopo aver aggiunto il bot a una chat come partecipante, il bot inizia a ricevere attività correlate alla chat e può rispondere nel thread di chat.
Creare un'app di chat e aggiungere il bot come partecipante
Ora che si ha l'ID servizi di comunicazione del bot, è possibile creare un thread di chat con il bot come partecipante.
Creare una nuova applicazione C#
Eseguire il comando seguente per creare un'applicazione C#:
dotnet new console -o ChatQuickstart
Passare alla nuova cartella dell'app e usare il comando per compilare l'applicazione
dotnet build
:cd ChatQuickstart dotnet build
Installare il pacchetto
Installare Communication Services Chat SDK per .NET:
dotnet add package Azure.Communication.Chat
Creare un client di chat
Per creare un client di chat, usare l'endpoint di Servizi di comunicazione e il token di accesso utente generato in precedenza. Usare la CommunicationIdentityClient
classe di Identity SDK per creare un utente ed emettere un token da passare al client di chat. I token di accesso possono essere generati nel portale seguendo le istruzioni seguenti.
Copiare il codice seguente e incollarlo nel file di origine Program.cs :
using Azure;
using Azure.Communication;
using Azure.Communication.Chat;
using System;
namespace ChatQuickstart
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
// Your unique Communication Services endpoint
Uri endpoint = new Uri("https://<RESOURCE_NAME>.communication.azure.com");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
}
}
}
Avviare un thread di chat con il bot
Usare il createChatThread
metodo su chatClient
per creare un thread di chat. Sostituire l'ID con l'ID servizi di comunicazione del bot.
var chatParticipant = new ChatParticipant(identifier: new CommunicationUserIdentifier(id: "<BOT_ID>"))
{
DisplayName = "BotDisplayName"
};
CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic: "Hello Bot!", participants: new[] { chatParticipant });
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: createChatThreadResult.ChatThread.Id);
string threadId = chatThreadClient.Id;
Ottenere un client di thread di chat
Il GetChatThreadClient
metodo restituisce un client thread per un thread già esistente:
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Inviare un messaggio a un thread di chat
Per usare SendMessage
per inviare un messaggio a un thread:
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
Content = "Hello World",
MessageType = ChatMessageType.Text
};
SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);
string messageId = sendChatMessageResult.Id;
Ricevere messaggi di chat da un thread di chat
È possibile ottenere messaggi di chat eseguendo il polling del GetMessages
metodo nel client thread di chat a intervalli impostati:
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
Controllare l'elenco dei messaggi per la risposta echo del bot a "Hello World".
È possibile usare JavaScript o gli SDK per dispositivi mobili di Azure per sottoscrivere le notifiche dei messaggi in arrivo:
// Open notifications channel
await chatClient.startRealtimeNotifications();
// Subscribe to new notifications
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// Your code here
});
Pulire il thread di chat
Al termine dell'uso del thread di chat, eliminare il thread:
chatClient.DeleteChatThread(threadId);
Distribuire l'applicazione chat C#
Per distribuire l'applicazione chat:
In Visual Studio aprire il progetto di chat.
Fare clic con il pulsante destro del mouse sul progetto ChatQuickstart e scegliere Pubblica:
Dopo aver pubblicato la soluzione, eseguirla e verificare se Echobot restituisce il messaggio dell'utente al prompt dei comandi. Ora che è disponibile la soluzione, è possibile procedere con le varie attività necessarie per gli scenari aziendali che è necessario risolvere.
Altre operazioni che è possibile eseguire con un bot
Un bot può ricevere più di un messaggio di testo normale da un utente in un canale chat di Servizi comunicazioni. Alcune delle attività che un bot può ricevere da un utente includono:
- Aggiornamento della conversazione
- Aggiornamento dei messaggi
- Eliminazione del messaggio
- Indicatore di digitazione
- Attività evento
- Vari allegati, incluse le schede adattive
- Dati del canale bot
Le sezioni successive illustrano alcuni esempi per illustrare queste funzionalità.
Inviare un messaggio di benvenuto quando un nuovo utente viene aggiunto al thread
La logica echo bot corrente accetta l'input dell'utente e la ripete. Se si vuole aggiungere più logica, ad esempio rispondere a un evento di Servizi di comunicazione aggiunto al partecipante, copiare il codice seguente e incollarlo nel file di origine EchoBot.cs :
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
namespace Microsoft.BotBuilderSamples.Bots
{
public class EchoBot : ActivityHandler
{
public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
if (turnContext.Activity.Type == ActivityTypes.Message)
{
var replyText = $"Echo: {turnContext.Activity.Text}";
await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
}
else if (ActivityTypes.ConversationUpdate.Equals(turnContext.Activity.Type))
{
if (turnContext.Activity.MembersAdded != null)
{
foreach (var member in turnContext.Activity.MembersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync(MessageFactory.Text("Hello and welcome to chat with EchoBot!"), cancellationToken);
}
}
}
}
}
}
}
Inviare una scheda adattiva
Nota
Le schede adattive sono supportate solo all'interno di Servizi di comunicazione di Azure casi d'uso in cui tutti i partecipanti alla chat sono Servizi di comunicazione di Azure utenti e non per i casi d'uso di interoperabilità di Teams.
È possibile inviare una scheda adattiva al thread di chat per aumentare l'engagement e l'efficienza. Una scheda adattiva consente anche di comunicare con gli utenti in vari modi. È possibile inviare una scheda adattiva da un bot aggiungendo la scheda come allegato di attività del bot.
Ecco un esempio di come inviare una scheda adattiva:
var reply = Activity.CreateMessageActivity();
var adaptiveCard = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = {/* the adaptive card */}
};
reply.Attachments.Add(adaptiveCard);
await turnContext.SendActivityAsync(reply, cancellationToken);
Ottenere payload di esempio per le schede adattive in Esempi e modelli.
Per un utente di chat, il canale chat di Servizi di comunicazione aggiunge un campo ai metadati del messaggio che indica che il messaggio ha un allegato. Nei metadati la microsoft.azure.communication.chat.bot.contenttype
proprietà è impostata su azurebotservice.adaptivecard
.
Di seguito è riportato un esempio di messaggio di chat con una scheda adattiva collegata:
{
"content": "{\"attachments\":[{\"contentType\":\"application/vnd.microsoft.card.adaptive\",\"content\":{/* the adaptive card */}}]}",
"senderDisplayName": "BotDisplayName",
"metadata": {
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard"
},
"messageType": "Text"
}
Inviare un messaggio dall'utente al bot
È possibile inviare un sms di base da un utente al bot nello stesso modo in cui si invia un sms a un altro utente.
Tuttavia, quando si invia un messaggio con un allegato da un utente a un bot, aggiungere questo flag ai metadati di Chat di Servizi di comunicazione:
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard"
Per inviare un'attività evento da un utente a un bot, aggiungere questo flag ai metadati della chat di Servizi di comunicazione:
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.event"
Le sezioni seguenti illustrano i formati di esempio per i messaggi di chat da un utente a un bot.
Messaggio di testo semplice
{
"content":"Simple text message",
"senderDisplayName":"Acs-Dev-Bot",
"metadata":{
"text":"random text",
"key1":"value1",
"key2":"{\r\n \"subkey1\": \"subValue1\"\r\n
"},
"messageType": "Text"
}
Messaggio con allegato
{
"content": "{
\"text\":\"sample text\",
\"attachments\": [{
\"contentType\":\"application/vnd.microsoft.card.adaptive\",
\"content\": { \"*adaptive card payload*\" }
}]
}",
"senderDisplayName": "Acs-Dev-Bot",
"metadata": {
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard",
"text": "random text",
"key1": "value1",
"key2": "{\r\n \"subkey1\": \"subValue1\"\r\n}"
},
"messageType": "Text"
}
Messaggio con un'attività di evento
Un payload dell'evento include tutti i campi JSON nel contenuto del messaggio, ad eccezione di Name
. Il Name
campo contiene il nome dell'evento.
Nell'esempio seguente il nome endOfConversation
dell'evento con il payload "{field1":"value1", "field2": { "nestedField":"nestedValue" }}
viene inviato al bot:
{
"content":"{
\"name\":\"endOfConversation\",
\"field1\":\"value1\",
\"field2\": {
\"nestedField\":\"nestedValue\"
}
}",
"senderDisplayName":"Acs-Dev-Bot",
"metadata":{
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.event",
"text":"random text",
"key1":"value1",
"key2":"{\r\n \"subkey1\": \"subValue1\"\r\n}"
},
"messageType": "Text"
}
Il campo microsoft.azure.communication.chat.bot.contenttype
dei metadati è obbligatorio solo in un messaggio inviato da un utente a un bot.
Campi di attività del bot supportati
Le sezioni seguenti descrivono i campi di attività del bot supportati per i flussi da bot a utente e flussi da utente a bot.
Flusso da bot a utente
I campi di attività bot seguenti sono supportati per i flussi da bot a utente.
Attività
- Message
- Digitazione
Campi attività messaggio
Text
Attachments
AttachmentLayout
SuggestedActions
From.Name
(convertito in ServiziSenderDisplayName
di comunicazione).ChannelData
(convertito in ServiziChat Metadata
di comunicazione . Se iChannelData
valori di mapping sono oggetti, vengono serializzati in formato JSON e inviati come stringa.
Flusso da utente a bot
Questi campi di attività bot sono supportati per i flussi da utente a bot.
Attività e campi
Message
Id
(ID messaggio chat di Servizi di comunicazione)TimeStamp
Text
Attachments
Aggiornamento della conversazione
MembersAdded
MembersRemoved
TopicName
Aggiornamento dei messaggi
Id
(ID messaggio chat di Servizi di comunicazione aggiornato)Text
Attachments
Eliminazione del messaggio
Id
(ID messaggio di chat di Servizi di comunicazione eliminato)
Event
Name
Value
Digitazione
Altri campi comuni
Recipient.Id
eRecipient.Name
(ID utente chat di Servizi di comunicazione e nome visualizzato)From.Id
eFrom.Name
(ID utente chat di Servizi di comunicazione e nome visualizzato)Conversation.Id
(ID thread chat di Servizi di comunicazione)ChannelId
(Chat di Servizi di comunicazione se vuoto)ChannelData
(metadati dei messaggi chat di Servizi di comunicazione)
Modelli di handoff del bot
In alcuni casi, un bot non comprende una domanda o non può rispondere a una domanda. Un cliente potrebbe chiedere nella chat di essere connesso a un agente umano. In questi scenari, il thread di chat deve essere passato dal bot a un agente umano. È possibile progettare l'applicazione per eseguire la transizione di una conversazione da un bot a un essere umano.
Gestione delle comunicazioni da bot a bot
In alcuni casi d'uso, due bot devono essere aggiunti allo stesso thread di chat per fornire servizi diversi. In questo scenario potrebbe essere necessario assicurarsi che un bot non invii risposte automatiche ai messaggi di un altro bot. Se non viene gestito correttamente, l'interazione automatizzata tra i bot potrebbe comportare un ciclo infinito di messaggi.
È possibile verificare l'identità utente di Servizi di comunicazione di un mittente del messaggio nella proprietà dell'attività From.Id
. Verificare se appartiene a un altro bot. Eseguire quindi l'azione necessaria per impedire un flusso di comunicazione da bot a bot. Se questo tipo di scenario comporta volumi di chiamate elevati, il canale chat di Servizi di comunicazione limita le richieste e un bot non può inviare e ricevere messaggi.
Altre informazioni sui limiti di limitazione.
Risoluzione dei problemi
Le sezioni seguenti descrivono i modi per risolvere gli scenari comuni.
Non è possibile aggiungere il canale chat
Nel portale per sviluppatori di Microsoft Bot Framework passare a Configuration Bot Messaging (Messaggistica bot di configurazione>) per verificare che l'endpoint sia stato impostato correttamente.
Il bot ottiene un'eccezione non consentita durante la risposta a un messaggio
Verificare che l'ID e la password dell'app Microsoft del bot vengano salvati correttamente nel file di configurazione del bot caricato nell'app Web.
Il bot non può essere aggiunto come partecipante
Verificare che l'ID servizi di comunicazione del bot venga usato correttamente quando viene inviata una richiesta per aggiungere un bot a un thread di chat.
Passaggi successivi
Provare l'app demo del chatbot per una chat 1:1 tra un utente di chat e un bot tramite il componente botFramework WebChat UI.