Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Saiba como criar experiências de IA de conversação em um aplicativo de chat usando o canal de mensagens de Chat dos Serviços de Comunicação do Azure que está disponível no Serviço de Bot do Azure. Neste início rápido, você cria um bot usando o SDK do BotFramework. Em seguida, integre o bot em um aplicativo de chat criado usando o SDK de Chat dos Serviços de Comunicação.
Este artigo descreve como:
- Criar e implantar um bot no Azure
- Obter um recurso de Serviços de Comunicação
- Habilite o canal de bate-papo dos Serviços de Comunicação para o bot
- Criar um aplicativo de bate-papo e adicionar o bot como participante
- Explore mais recursos para seu bot
Prerequisites
- Uma conta do Azure e uma assinatura ativa. Crie uma conta gratuitamente.
- Visual Studio 2019 ou posterior.
- A versão mais recente do .NET Core. Neste início rápido, usamos o .NET Core 3.1. Certifique-se de instalar a versão que corresponde à sua instância do Visual Studio, 32 bits ou 64 bits.
- SDK da estrutura de bot
Criar e implantar um bot no Azure
Para usar o chat dos Serviços de Comunicação do Azure como um canal no Serviço de Bot do Azure, primeiro implante um bot. Para implantar um bot, conclua estas etapas:
- Criar um recurso do Serviço de Bot do Azure
- Obter o ID e a senha do aplicativo do bot
- Criar um aplicativo Web para manter a lógica do bot
- Criar um endpoint de mensagens para o bot
Criar um recurso do Serviço de Bot do Azure
Primeiro, crie um recurso do Serviço de Bot do Azure no portal do Azure. O canal de Chat dos Serviços de Comunicação suporta bots de identidade geridos e bots de inquilino único.
Este exemplo demonstra como usar uma identidade gerenciada com seu bot. Se, em vez disso, estiver a usar um bot de inquilino único, consulte as instruções para configurar a identidade do bot de inquilino único.
Para bots de identidade gerenciados, certifique-se também de atualizar seu aplicativo com a identidade do Serviço de Bot para garantir a configuração adequada.
Obter o ID e a senha do aplicativo do bot
Em seguida, obtenha a ID do aplicativo Microsoft e a senha atribuídas ao seu bot quando implantado. Use esses valores para configurações posteriores.
Criar um aplicativo Web para manter a lógica do bot
Para criar um aplicativo Web para seu bot, você pode revisar exemplos do Bot Builder para seu cenário ou usar o SDK do Bot Builder para criar um aplicativo Web. Um dos exemplos mais simples é o Echo Bot.
O Serviço de Bot do Azure normalmente espera que o Bot Application Web App Controller exponha um ponto de extremidade no formato /api/messages. O ponto de extremidade processa todas as mensagens enviadas ao bot.
Para criar o aplicativo bot, use a CLI do Azure para criar um recurso do Serviço de Aplicativo do Azure ou crie o aplicativo no portal do Azure.
Para criar um aplicativo Web de bot usando o portal do Azure:
No portal, selecione Criar um recurso. Na caixa de pesquisa, introduza aplicação Web. Selecione o tile Aplicativo Web.
Em Criar Aplicativo Web, selecione ou insira detalhes para o aplicativo, incluindo a região onde você deseja implantar o aplicativo.
Selecione Revisar e Criar para validar a implementação e rever os detalhes da implementação. Em seguida, selecione Criar.
Quando o recurso da aplicação web for criado, copie a URL do nome de anfitrião mostrada nos detalhes do recurso. A URL faz parte do ponto de extremidade que você cria para o aplicativo Web.
Criar um endpoint de mensagens para o bot
Em seguida, no recurso de bot, crie um ponto de extremidade de mensagens do aplicativo Web:
No portal do Azure, vá para seu recurso de Bot do Azure. No menu de recursos, selecione Configuração.
Em Configuração, para o Ponto de extremidade de mensagens, cole a URL do nome do host da aplicação web copiado na seção anterior. Anexe o URL com
/api/messages.Selecione Guardar.
Implantar o aplicativo Web
A etapa final para criar um bot é implantar o aplicativo Web. Para este início rápido, use o exemplo do Echo Bot. A funcionalidade do Echo Bot é limitada a ecoar a entrada do usuário. Veja como implantá-lo em seu aplicativo Web no Azure:
Use o Git para clonar este repositório GitHub:
git clone https://github.com/Microsoft/BotBuilder-Samples.git cd BotBuilder-SamplesNo Visual Studio, abra o projeto Echo Bot.
No projeto do Visual Studio, abra o arquivo Appsettings.json . Preencha o seguinte com a ID do aplicativo Microsoft e a ID do locatário:
{ "MicrosoftAppType": "UserAssignedMSI" "MicrosoftAppId": "<Client ID of the user-assigned managed identity>", "MicrosoftAppPassword": "", // Not applicable. Leave this blank for a user-assigned managed identity bot. "MicrosoftAppTenantId": "<The tenant ID of the user-assigned managed identity>" }Em seguida, use o Visual Studio para bots C# para implantar o bot.
Você também pode usar uma janela do Prompt de Comando para implantar um bot do Azure.
No Visual Studio, no Gerenciador de Soluções, clique com o botão direito do mouse no projeto EchoBot e selecione Publicar:
Selecione Novo para criar um novo perfil de publicação. Para Destino, selecione Azure:
Para o destino específico, selecione Serviço de Aplicativo do Azure:
Na configuração de implantação, selecione o aplicativo Web nos resultados que aparecem depois que você entra na sua conta do Azure. Para concluir o perfil, selecione Concluir e, em seguida, selecione Publicar para iniciar a implantação.
Obter um recurso de Serviços de Comunicação
Agora que seu bot foi criado e implantado, crie um recurso de Serviços de Comunicação para usar para configurar um canal de Serviços de Comunicação:
Conclua as etapas para criar um recurso de Serviços de Comunicação.
Crie um utilizador dos Serviços de Comunicação e emita um token de acesso de utilizador. Certifique-se de definir o escopo para chat. Copie a cadeia de token e a cadeia de ID de utilizador.
Habilitar o canal de Chat dos Serviços de Comunicação
Quando você tem um recurso de Serviços de Comunicação, pode configurar um canal de Serviços de Comunicação no recurso de bot. Nesse processo, um ID de usuário é gerado para o bot.
No portal do Azure, vá para seu recurso de Bot do Azure. No menu de recursos, selecione Canais. Na lista de canais disponíveis, selecione Serviços de Comunicação do Azure - Chat.
Selecione Conectar para ver uma lista de recursos dos Serviços de Comunicação disponíveis em sua assinatura.
No painel Nova Conexão, selecione o recurso de chat dos Serviços de Comunicação e selecione Aplicar.
Quando os detalhes do recurso são verificados, uma ID de bot é mostrada na coluna ID dos Serviços de Comunicação do Azure Bot. Pode usar o ID do bot para representar o bot numa conversa de chat utilizando a API AddParticipant do Chat dos Serviços de Comunicação. Depois de adicionar o bot a um bate-papo como participante, o bot começa a receber atividades relacionadas ao bate-papo e pode responder no tópico de bate-papo.
Criar um aplicativo de bate-papo e adicionar o bot como participante
Agora que você tem a ID dos Serviços de Comunicação do bot, pode criar um thread de bate-papo com o bot como participante.
Crie uma nova aplicação C#
Execute o seguinte comando para criar um aplicativo C#:
dotnet new console -o ChatQuickstartAltere seu diretório para a nova pasta do aplicativo e use o
dotnet buildcomando para compilar seu aplicativo:cd ChatQuickstart dotnet build
Instale o pacote
Instale o SDK de Chat dos Serviços de Comunicação para .NET:
dotnet add package Azure.Communication.Chat
Criar um cliente de chat
Para criar um cliente de chat, use o ponto de extremidade dos Serviços de Comunicação e o token de acesso de usuário gerado anteriormente. Use a CommunicationIdentityClient classe do SDK de identidade para criar um usuário e emitir um token para passar para seu cliente de chat. Os tokens de acesso podem ser gerados no portal usando as seguintes instruções.
Copie o código a seguir e cole-o no arquivo de origem 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);
}
}
}
Iniciar um tópico de bate-papo com o bot
Utilize o método createChatThread em chatClient para criar uma sequência de chat. Substitua a ID pela ID dos Serviços de Comunicação do 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;
Obter um cliente de thread de chat
O GetChatThreadClient método retorna um cliente de thread para um thread que já existe:
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Enviar uma mensagem para um tópico de chat
Para usar SendMessage para enviar uma mensagem para um thread:
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
Content = "Hello World",
MessageType = ChatMessageType.Text
};
SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);
string messageId = sendChatMessageResult.Id;
Receber mensagens de chat a partir de um tópico de chat
Você pode obter mensagens de bate-papo recorrendo ao método GetMessages no cliente do thread de bate-papo em intervalos regulares.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
Verifique a lista de mensagens para a resposta de eco do bot para Hello World.
Você pode usar JavaScript ou os SDKs móveis do Azure para assinar notificações de mensagens de entrada:
// Open notifications channel
await chatClient.startRealtimeNotifications();
// Subscribe to new notifications
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// Your code here
});
Limpar o tópico de bate-papo
Quando terminar de usar o thread de chat, exclua o thread:
chatClient.DeleteChatThread(threadId);
Implantar o aplicativo de chat C#
Para implantar o aplicativo de chat:
No Visual Studio, abra o projeto de chat.
Clique com o botão direito do mouse no projeto ChatQuickstart e selecione Publicar:
Depois de publicar a solução, execute-a e verifique se o bot Echo ecoa a mensagem do usuário no prompt de comando. Agora que você tem a solução, você pode continuar a jogar com as várias atividades necessárias para os cenários de negócios que você pode precisar resolver.
Mais coisas que você pode fazer com um bot
Um bot pode receber mais do que uma mensagem de texto simples de um usuário em um canal de bate-papo dos Serviços de Comunicação. Algumas das atividades que um bot pode receber de um usuário incluem:
- Atualização da conversação
- Atualização da mensagem
- Exclusão de mensagem
- Indicador de digitação
- Atividade do evento
- Vários anexos, incluindo cartões adaptáveis
- Dados do canal do bot
As próximas seções mostram alguns exemplos para ilustrar esses recursos.
Enviar uma mensagem de boas-vindas quando um novo usuário for adicionado ao thread
A lógica atual do Echo Bot aceita a entrada do usuário e a ecoa de volta. Se você quiser adicionar mais lógica, como responder a um evento dos Serviços de Comunicação adicionado pelo participante, copie o código a seguir e cole-o no arquivo de origem 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);
}
}
}
}
}
}
}
Enviar um cartão adaptável
Note
Os cartões adaptáveis só são suportados em casos de uso dos Serviços de Comunicação do Azure em que todos os participantes do chat são usuários dos Serviços de Comunicação do Azure e não para casos de uso de interoperabilidade do Teams.
Você pode enviar um cartão adaptável para o thread de bate-papo para aumentar o envolvimento e a eficiência. Um cartão adaptável também ajuda você a se comunicar com os usuários de várias maneiras. Você pode enviar um cartão adaptável de um bot adicionando o cartão como um anexo de atividade do bot.
Aqui está um exemplo de como enviar um cartão adaptável:
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);
Obtenha exemplos de amostras para cartões adaptáveis em Amostras e modelos.
Para um usuário de chat, o canal de Chat dos Serviços de Comunicação adiciona um campo aos metadados da mensagem que indica que a mensagem tem um anexo. Nos metadados, a microsoft.azure.communication.chat.bot.contenttype propriedade é definida como azurebotservice.adaptivecard.
Aqui está um exemplo de uma mensagem de bate-papo que tem um cartão adaptável anexado:
{
"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"
}
Enviar uma mensagem do usuário para o bot
Você pode enviar uma mensagem de texto básica de um usuário para o bot da mesma forma que envia uma mensagem de texto para outro usuário.
No entanto, quando você enviar uma mensagem com um anexo de um usuário para um bot, adicione este sinalizador aos metadados do Chat dos Serviços de Comunicação:
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard"
Para enviar uma atividade de evento de um usuário para um bot, adicione este sinalizador aos metadados do Chat dos Serviços de Comunicação:
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.event"
As seções a seguir mostram formatos de exemplo para mensagens de bate-papo de um usuário para um bot.
Mensagem de texto simples
{
"content":"Simple text message",
"senderDisplayName":"Acs-Dev-Bot",
"metadata":{
"text":"random text",
"key1":"value1",
"key2":"{\r\n \"subkey1\": \"subValue1\"\r\n
"},
"messageType": "Text"
}
Mensagem com um anexo
{
"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"
}
Mensagem com atividade de evento
Uma carga útil de evento inclui todos os campos JSON no conteúdo da mensagem, exceto Name. O Name campo contém o nome do evento.
No exemplo a seguir, o nome endOfConversation do evento com a carga "{field1":"value1", "field2": { "nestedField":"nestedValue" }} útil é enviado para o 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"
}
O campo microsoft.azure.communication.chat.bot.contenttype de metadados é necessário apenas em uma mensagem enviada de um usuário para um bot.
Campos de atividade de bot suportados
As seções a seguir descrevem campos de atividade de bot suportados para fluxos de bot para usuário e fluxos de usuário para bot.
Fluxo de bot para usuário
Os seguintes campos de atividade de bot são suportados para fluxos de bot para usuário.
Activities
- Message
- Typing
Campos de atividade da mensagem
TextAttachmentsAttachmentLayoutSuggestedActions-
From.Name(Convertido em Serviços deSenderDisplayNameComunicação .) -
ChannelData(Convertido em ServiçosChat Metadatade Comunicação . Se quaisquerChannelDatavalores de mapeamento forem objetos, eles serão serializados no formato JSON e enviados como uma cadeia de caracteres.)
Fluxo de usuário para bot
Esses campos de atividade de bot são suportados para fluxos de usuário para bot.
Atividades e domínios
Message
-
Id(ID da mensagem do chat dos Serviços de Comunicação) TimeStampTextAttachments
-
Atualização da conversação
MembersAddedMembersRemovedTopicName
Atualização da mensagem
-
Id(ID de mensagem de chat dos Serviços de Comunicação atualizado) TextAttachments
-
Exclusão de mensagem
-
Id(ID da mensagem de chat dos Serviços de Comunicação excluídos)
-
Event
NameValue
Typing
Outros domínios comuns
-
Recipient.IdeRecipient.Name(ID de usuário e nome de exibição do Chat dos Serviços de Comunicação) -
From.IdeFrom.Name(ID de usuário e nome de exibição do Chat dos Serviços de Comunicação) -
Conversation.Id(ID do thread de bate-papo dos Serviços de Comunicação) -
ChannelId(Chat dos Serviços de Comunicação se estiver vazio) -
ChannelData(Metadados de mensagens de chat dos Serviços de Comunicação)
Padrões de transferência de bots
Às vezes, um bot não entende uma pergunta ou não consegue responder a uma pergunta. Um cliente pode pedir no chat para estar conectado a um agente humano. Nesses cenários, o thread de bate-papo deve ser passado do bot para um agente humano. Você pode projetar seu aplicativo para fazer a transição de uma conversa de um bot para um humano.
Manipulando a comunicação entre bots
Em alguns casos de uso, dois bots precisam ser adicionados ao mesmo thread de bate-papo para fornecer serviços diferentes. Nesse cenário, talvez seja necessário garantir que um bot não envie respostas automatizadas para as mensagens de outro bot. Se não for tratada corretamente, a interação automatizada dos bots entre si pode resultar em um loop infinito de mensagens.
Você pode verificar a identidade do usuário dos Serviços de Comunicação de um remetente de mensagem na propriedade da From.Id atividade. Verifique se ele pertence a outro bot. Em seguida, execute a ação necessária para evitar um fluxo de comunicação entre bots. Se esse tipo de cenário resultar em grandes volumes de chamadas, o canal de Chat dos Serviços de Comunicação limitará as solicitações e um bot não poderá enviar e receber mensagens.
Saiba mais sobre os limites de aceleração.
Troubleshoot
As seções a seguir descrevem maneiras de solucionar problemas de cenários comuns.
Não é possível adicionar um canal de chat
No portal do desenvolvedor do Microsoft Bot Framework, vá para Configuração>Mensagens do Bot para verificar se o ponto de extremidade está definido corretamente.
Bot recebe uma exceção proibida ao responder a uma mensagem
Verifique se o ID e a senha do aplicativo Microsoft do bot estão salvos corretamente no arquivo de configuração do bot carregado no aplicativo Web.
O Bot não pode ser adicionado como participante
Verifique se a ID dos Serviços de Comunicação do bot é usada corretamente quando uma solicitação é enviada para adicionar um bot a um thread de chat.
Próximos passos
Experimente o aplicativo de demonstração do bot de bate-papo para um bate-papo 1:1 entre um usuário de bate-papo e um bot por meio do componente BotFramework WebChat UI.
Artigos relacionados
Para obter mais informações sobre como adicionar um bot OpenAI, consulte Integrar um bot OpenAI com bate-papo.