Canais e conversas de chat em grupo com um bot do Microsoft Teams
Importante
Os exemplos de código nesta secção baseiam-se na versão 4.6 e versões posteriores do SDK do Bot Framework. Se estiver à procura de documentação para versões anteriores, veja a secção bots – SDK v3 na pasta SDKs Legados da documentação.
Para instalar o bot do Microsoft Teams em uma equipe ou chat em grupo, adicione o escopo teams
ou groupchat
ao seu bot. Isso permite que todos os membros da conversa interajam com o seu bot. Depois que o bot é instalado, ele tem acesso aos metadados sobre a conversa, como a lista de membros da conversa. Além disso, quando está instalado numa equipa, o bot tem acesso a detalhes sobre essa equipa e à lista completa de canais.
Os bots num grupo ou canal só recebem mensagens quando são mencionados @botname. Não recebem outras mensagens enviadas para a conversação. O bot deve ser @mentioned diretamente. O bot não recebe uma mensagem quando a equipa ou o canal é mencionado ou quando alguém responde a uma mensagem do seu bot sem @mentioning o mesmo.
Observação
- O RSC para todas as mensagens de chat só está disponível na pré-visualização do programador público.
- Com o consentimento específico do recurso (RSC), um bot pode receber todas as mensagens de canal nas equipas nas quais está instalado sem ser @mentioned. Para obter mais informações, confira receber todas as mensagens de canal com o RSC.
- A publicação de uma mensagem ou cartão ajustável num canal privado não é suportada.
Veja o seguinte vídeo para saber mais sobre as conversações de chat de canal e grupo com um bot:
Diretrizes de design
Ao contrário do que ocorre em chats pessoais, seu bot deve fornecer uma introdução rápida em chats e canais em grupo. Você deve seguir essas e mais diretrizes de design de bot. Para obter mais informações sobre como projetar bots no Teams, confira como projetar conversas de bot em canais e chats.
Agora, você pode criar novas threads de conversa e gerenciar facilmente diferentes conversas nos canais.
Crie novas threads de conversa
Quando o bot é instalado em uma equipe, você deve criar uma nova thread de conversa em vez de responder a uma existente. Por vezes, é difícil diferenciar entre duas conversas. Se a conversação estiver por tópicos, é mais fácil organizar e gerir diferentes conversações em canais. Essa é uma forma de mensagens proativas.
Em seguida, recupere as menções usando o objeto entities
e adicione menções às suas mensagens usando o objeto Mention
.
Trabalhe com menções
Cada mensagem para o bot de um grupo ou canal contém um @mention com o respetivo nome no texto da mensagem. Seu bot também pode recuperar outros usuários mencionados em uma mensagem e adicionar menções a quaisquer mensagens que enviar. Os bots em conversas de grupo permitem menções de utilizadores com @mention
; no entanto, não suportam @everyone
menções.
Também tem de retirar o @mentions conteúdo da mensagem que o bot recebe.
Recupere menções
As menções são retornadas no objeto entities
do conteúdo e contêm a ID exclusiva do usuário e o nome do usuário mencionado. O texto da mensagem também inclui a menção, como <at>@John Smith<at>
. No entanto, não dependa do texto na mensagem para obter informações sobre o utilizador. É possível que a pessoa que está a enviar a mensagem a altere. Portanto, use o objeto entities
.
Você pode recuperar todas as menções na mensagem chamando a função GetMentions
no SDK Bot Builder, que retorna uma matriz de objetos Mention
.
O código a seguir mostra um exemplo de recuperação de menções:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Resolves the mentions from the entities activity.
Mention[] mentions = turnContext.Activity.GetMentions();
if(mentions != null)
{
ChannelAccount firstMention = mentions[0].Mentioned;
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync($"Hello {firstMention.Name}");
}
else
{
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync("Aw, no one was mentioned.");
}
}
Adicione menções às suas mensagens
Existem dois tipos de menções:
Observação
A menção de utilizador e menção de etiquetas é suportada tanto para mensagens de texto como para Cartões Ajustáveis.
Menção de utilizador
O bot pode menção outros utilizadores em mensagens publicadas em canais.
O objeto Mention
tem duas propriedades que você deve definir usando o seguinte:
- Inclua @nome de usuário no texto da mensagem.
- Inclua o objeto de menção na coleção de entidades.
O SDK do Bot Framework fornece métodos auxiliares e objetos para criar menções.
O código a seguir mostra um exemplo de como adicionar menções às suas mensagens:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var mention = new Mention
{
Mentioned = turnContext.Activity.From,
Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
Type = "mention",
};
// Returns a simple text message.
var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
replyActivity.Entities = new List<Entity> { mention };
// Sends an activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}
Agora você pode enviar uma mensagem de introdução quando o bot for instalado pela primeira vez ou adicionado a um grupo ou equipe.
Suporte para Microsoft Entra ID de Objeto e UPN no menção do utilizador
Os bots suportam IDs de menção de utilizador, como Microsoft Entra ID de Objeto e Nome do Principal de Utilizador (UPN), além dos IDs existentes. Os Webhooks recebidos começam a suportar menção de utilizador no Cartão Ajustável com o ID de Objeto Microsoft Entra e UPN.
O fragmento de código seguinte mostra um exemplo de menção de utilizadores com o ID do Objeto Entra e o UPN numa mensagem de texto:
var userId = "Adele@microsoft.com"; //User Principle Name
var mention = new ChannelAccount(userId, "Adele");
var mentionObj = new Mention
{
Mentioned = mention,
Text = $"<at>{mention.Name}</at>" ,
Type = "mention"
};
// Returns a simple text message.var replyActivity = MessageFactory.Text($"Hello {mentionObj.Text}.");replyActivity.Entities = new List<Entity> { mentionObj };
// Sends an activity to the sender of the incoming activity.await turnContext.SendActivityAsync(replyActivity, cancellationToken);
O fragmento de código seguinte mostra um exemplo de menção de utilizadores com o ID do Objeto Entra e o UPN num Cartão Ajustável:
{
"type": "mention",
"text": "<at>Adele</at>",
"mentioned": {
"id": "Adele@microsoft.com" ,// User Principle Name
"name": "Adele"
}
}
Etiquetar menção
O bot pode menção etiquetas em mensagens sms e Cartões Ajustáveis publicados em canais. Quando o bot @mentions a etiqueta num canal é realçada e as pessoas associadas à etiqueta são notificadas. Quando um utilizador paira o cursor sobre a etiqueta, é apresentado um pop-up com os detalhes da etiqueta.
Mencionar etiquetas numa mensagem sms
mention.properties
No objeto, adicione a propriedade 'type': 'tag'
. Se a propriedade 'type': 'tag'
não for adicionada, o bot trata a menção como um utilizador menção.
Exemplo:
O type:tag
é adicionado como um Properties
em ChannelAccount.
var mention = new ChannelAccount(tagId, "Test Tag");
mention.Properties = JObject.Parse("{'type': 'tag'}");
var mentionObj = new Mention
{
Mentioned = mention,
Text = "<at>Test Tag</at>"
};
var replyActivity = MessageFactory.Text("Hello " + mentionObj.Text);
replyActivity.Entities = new List<Microsoft.Bot.Schema.Entity> { mentionObj };
await turnContext.SendActivityAsync(replyActivity, cancellationToken);
Mencionar etiquetas num Cartão Ajustável
No esquema Cartão Ajustável, por baixo do mentioned
objeto, adicione a "type": "tag"
propriedade . Se a "type": "tag"
propriedade não for adicionada, o bot trata o menção como um utilizador menção.
Pode obter a lista das etiquetas disponíveis no canal com a API List teamworkTags .
Exemplo:
{
"type": "mention",
"text": "<at>Test Tag</at>",
"mentioned": {
"id": "base64 encoded id" ,// tag graph 64 base ID
"name": "Test Tag",
"type": "tag"
}
}
Parâmetros de Consulta
Nome | Descrição |
---|---|
type |
O tipo de menção. O tipo suportado é tag . |
id |
O identificador exclusivo da etiqueta. Para obter mais informações, veja teamworkTag. |
Código de erro
Código de status | Código de erro | Valores de mensagens | Pedido de repetição | Ação de programador |
---|---|---|---|---|
400 |
Código: Bad Request |
A etiqueta mencionada com o ID {id string} não existe na equipa atual A etiqueta só pode ser mencionada no canal Etiqueta mencionada inválida porque não existe nenhuma etiqueta na equipa |
Não | Reavalie o payload do pedido para erros. Verifique a mensagem de erro devolvida para obter detalhes. |
502 |
Código: Bad Gateway |
ID de grupo de equipa inválido ID de inquilino com formato incorreto para a etiqueta O ID de Menção não pode ser resolvido |
Não | Repita manualmente. |
Redução dos limites
Qualquer pedido pode ser avaliado em relação a vários limites, consoante o âmbito, o tipo de janela (curto e longo), o número de etiquetas por mensagem e outros fatores. O primeiro limite a ser alcançado dispara o comportamento de limitação.
Certifique-se de que não excede os limites de limitação para evitar a entrega de mensagens falhadas. Por exemplo, um bot só pode enviar duas mensagens com etiquetas menção numa janela de cinco segundos e cada mensagem só pode ter até 10 etiquetas.
A tabela seguinte lista os limites de limitação para menções de etiquetas num bot:
Âmbito | Tipo de Janela | Número de etiquetas por mensagem | Janelas de tempo (seg. | Número máximo de mensagens por período de tempo |
---|---|---|---|---|
Por bot por thread | Abreviado | 10 | 5 | 2 |
Longo | 10 | 60 | 5 | |
Todos os bots por thread | Abreviado | 10 | 5 | 4 |
Longo | 10 | 60 | 5 |
Limitações
- As menções de etiquetas são suportadas apenas no fluxo de mensagens de bot para cliente com texto e Cartão Ajustável.
- As menções de etiquetas não são suportadas em canais partilhados e privados.
- As menções de etiquetas não são suportadas nos conectores.
- As menções de etiquetas não suportam o fluxo de invocação num bot.
Enviar uma mensagem na instalação
Quando o bot é adicionado pela primeira vez ao grupo ou à equipe, uma mensagem de introdução deve ser enviada. A mensagem deve fornecer uma breve descrição dos recursos do bot e como usá-los. Você deve assinar o evento conversationUpdate
com o eventType teamMemberAdded
. O evento é enviado quando qualquer novo membro da equipe for adicionado. Verifique se o novo membro adicionado é o bot. Para obter mais informações, confira enviar uma mensagem de boas-vindas a um novo membro da equipe.
Pode enviar uma mensagem pessoal a cada membro da equipa quando o bot for adicionado. Para tal, obtenha a lista da equipa e envie uma mensagem direta a cada utilizador.
Observação
Certifique-se de que a mensagem enviada pelo bot é relevante e acrescenta valor à mensagem inicial e não envia spam aos utilizadores.
Não envie uma mensagem nos seguintes casos:
- Por exemplo, quando a equipa é grande, tem mais de 100 membros. Seu bot pode ser visto como spam e a pessoa que o adicionou pode receber reclamações. Você deve comunicar claramente a proposta de valor do bot para todos que veem a mensagem de boas-vindas.
- Seu bot é mencionado primeiro em um grupo ou canal em vez de ser adicionado primeiramente a uma equipe.
- Um grupo ou canal é renomeado.
- Um membro da equipe é adicionado a um grupo ou canal.
Exemplos de bot do Teams
Exemplo de código
Para obter exemplos de trabalho completos que demonstram a funcionalidade, veja os seguintes exemplos do Teams para o Bot Framework:
Nome de exemplo | Descrição | .NET | Node.js | Python | Manifesto |
---|---|---|---|---|---|
Bot de conversas do Teams | Este exemplo mostra como utilizar diferentes eventos de conversação de bot disponíveis no bot framework v4 para o âmbito pessoal e de equipas. | View | View | View | View |
Autenticação com OAuthPrompt | Este exemplo mostra a autenticação e as mensagens básicas no Bot Framework v4. | View | View | View | View |
Carregamento de ficheiros do Teams | Este exemplo mostra como utilizar ficheiros com um bot numa conversação um-para-um. | View | View | View | View |
Caixa de diálogo (referida como módulo de tarefas no TeamsJS v1.x) | Este exemplo mostra como utilizar uma caixa de diálogo e valores de cartões na mesma para uma extensão de mensagem. | View | View | View | View |
Iniciar um novo thread num canal | Este exemplo mostra como utilizar um novo thread num canal com o bot. | View | View | View | View |
Localização de aplicações do Teams | Este exemplo mostra como utilizar a localização de aplicações do Teams com o bot e o separador. | View | View | NA | View |
Guias passo a passo
Siga o guia passo a passo, crie o bot de conversação do Teams.