Obter contexto para o bot do Microsoft Teams

Importante

Este artigo baseia-se no SDK v3 do Bot Framework. Se estiver à procura da versão atual da documentação 4.6 ou posterior do SDK, consulte a secção bots de conversação .

O bot pode aceder a contexto adicional sobre a equipa ou o chat, como o perfil de utilizador. Estas informações podem ser utilizadas para melhorar a funcionalidade do bot e proporcionar uma experiência mais personalizada.

Observação

  • As APIs de bot específicas do Microsoft Teams são mais bem acedidas através das nossas extensões para o SDK do Bot Builder.
  • Para C# ou .NET, transfira o nosso pacote NuGet Microsoft.Bot.Connector.Teams .
  • Para Node.js desenvolvimento, a funcionalidade Bot Builder para Teams é incorporada no SDK do Bot Framework v4.6.

Obter a lista de equipas

O bot pode consultar a lista de membros da equipa e os respetivos perfis básicos. Os perfis básicos incluem IDs de utilizador do Teams e informações do Microsoft Entra, como o nome e o ID do objeto. Você pode usar essas informações para correlacionar identidades de usuários. Por exemplo, verifique se um utilizador com sessão iniciada num separador através das credenciais do Microsoft Entra é um membro da equipa.

Exemplo da API REST

Emita diretamente um pedido GET em /conversations/{teamId}/members/, utilizando o serviceUrl valor como ponto final.

O teamId pode ser encontrado no channeldata objeto do payload de atividade que o bot recebe nos seguintes cenários:

Observação

  • Utilize sempre o ID da equipa ao chamar a API.
  • O serviceUrl valor tende a ser estável, mas pode mudar. Quando é apresentada uma nova mensagem, o bot tem de verificar o respetivo valor armazenado serviceUrl .
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members

Response body
[{
    "id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
    "objectId": "9d3e08f9-a7ae-43aa-a4d3-de3f319a8a9c",
    "givenName": "Larry",
    "surname": "Brown",
    "email": "Larry.Brown@fabrikam.com",
    "userPrincipalName": "labrown@fabrikam.com"
}, {
    "id": "29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk",
    "objectId": "76b0b09f-d410-48fd-993e-84da521a597b",
    "givenName": "John",
    "surname": "Patterson",
    "email": "johnp@fabrikam.com",
    "userPrincipalName": "johnp@fabrikam.com"
}, {
    "id": "29:1URzNQM1x1PNMr1D7L5_lFe6qF6gEfAbkdG8_BUxOW2mTKryQqEZtBTqDt10-MghkzjYDuUj4KG6nvg5lFAyjOLiGJ4jzhb99WrnI7XKriCs",
    "objectId": "6b7b3b2a-2c4b-4175-8582-41c9e685c1b5",
    "givenName": "Rick",
    "surname": "Stevens",
    "email": "Rick.Stevens@fabrikam.com",
    "userPrincipalName": "rstevens@fabrikam.com"
}]

Exemplo do .NET

Chame GetConversationMembersAsync utilizando Team.Id para devolver uma lista de IDs de utilizador. Chamar GetConversationMembersAsync para obter userRole a propriedade devolve o valor como utilizador.

// Fetch the members in the current conversation
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
var teamId = context.Activity.GetChannelData<TeamsChannelData>().Team.Id;
var members = await connector.Conversations.GetConversationMembersAsync(teamId);

// Concatenate information about all members into a string
var sb = new StringBuilder();
foreach (var member in members.AsTeamsChannelAccounts())
{
    sb.AppendFormat(
        "GivenName = {0}, TeamsMemberId = {1}",
        member.Name, member.Id);

    sb.AppendLine();
}

// Post the member info back into the conversation
await context.PostAsync($"People in this conversation: {sb.ToString()}");

exemplo de Node.js ou TypeScript


[...]
import * as builder from "botbuilder";
[...]

var teamId = session.message.sourceEvent.team.id;
connector.fetchMembers(
  (<builder.IChatConnectorAddress>session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is some error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

Obter perfil de utilizador ou lista no chat pessoal ou de grupo

Pode fazer a chamada à API para qualquer chat pessoal para obter as informações de perfil do utilizador a conversar com o bot.

A chamada à API, os métodos SDK e o objeto de resposta são idênticos à obtenção da lista da equipa. A única diferença é que passa o conversationId em vez do teamId.

Obter a lista de canais numa equipa

Seu bot pode consultar a lista de canais em uma equipe.

Observação

  • O nome do canal geral padrão é retornado como null para permitir a localização.
  • A ID do canal para o canal Geral sempre corresponde à ID da equipe.

Exemplo da API REST

Emita diretamente um pedido GET em /teams/{teamId}/conversations/, utilizando o serviceUrl valor como ponto final.

A única origem para teamId é uma mensagem do contexto da equipa. A mensagem é uma mensagem de um utilizador ou a mensagem que o bot recebe quando é adicionado a uma equipa. Para obter mais informações, consulte bot ou utilizador adicionado a uma equipa.

Observação

O serviceUrl valor tende a ser estável, mas pode mudar. Quando é apresentada uma nova mensagem, o bot tem de verificar o respetivo valor armazenado serviceUrl .

GET /v3/teams/19%3A033451497ea84fcc83d17ed7fb08a1b6%40thread.skype/conversations

Response body
{
    "conversations": [{
        "id": "19:033451497ea84fcc83d17ed7fb08a1b6@thread.skype",
        "name": null
    }, {
        "id": "19:cc25e4aae50746ecbb11473bba24c70a@thread.skype",
        "name": "Materials"
    }, {
        "id": "19:b7b84cba410c406ba671dbbf5e0a3519@thread.skype",
        "name": "Design"
    }, {
        "id": "19:fc5db2aed489454e8f8c06829ed6c986@thread.skype",
        "name": "Marketing"
    }]
}

Exemplo do .NET

O exemplo seguinte utiliza a FetchChannelList chamada das extensões do Teams para o SDK do Bot Builder para .NET:

ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);

Exemplo de Node.js

O exemplo seguinte utiliza fetchChannelList a chamada das extensões do Teams para o SDK do Bot Builder para Node.js:

var teamId = session.message.sourceEvent.team.id;
connector.fetchChannelList(
  (session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is an error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

Obter clientInfo no contexto do bot

Pode obter o clientInfo na atividade do bot. ClientInfo contém as seguintes propriedades:

  • Locale
  • País/Região
  • Plataforma
  • Fuso horário

Exemplo de JSON

[
    {
        "type": "clientInfo",
        "locale": "en-US",
        "country": "US",
        "platform": "Windows",
        "timezone": "Asia/Calcutta"
    }
]

Exemplo de C#

var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));

{
    var clientinfo = context.Activity.Entities[0];
    await context.PostAsync($"ClientInfo: clientinfo ");
}

Confira também

Amostras do Bot Framework.