Obtener contexto para el bot de Microsoft Teams

Importante

Este artículo se basa en el SDK de Bot Framework v3. Si está buscando la versión 4.6 de la documentación actual o posterior del SDK, consulte la sección de bots conversacionales .

El bot puede acceder a contexto adicional sobre el equipo o el chat, como el perfil de usuario. Esta información se puede usar para enriquecer la funcionalidad del bot y proporcionar una experiencia más personalizada.

Nota

  • Se accede mejor a las API de bots específicas de Microsoft Teams a través de nuestras extensiones para el SDK de Bot Builder.
  • Para C# o .NET, descargue nuestro paquete NuGet Microsoft.Bot.Connector.Teams .
  • Para Node.js desarrollo, la funcionalidad de Bot Builder para Teams se incorpora en el SDK de Bot Framework v4.6.

Obtener la lista del equipo

El bot puede consultar la lista de miembros del equipo y sus perfiles básicos. Los perfiles básicos incluyen identificadores de usuario de Teams e información de Microsoft Entra, como el nombre y el identificador de objeto. Puede usar esta información para correlacionar las identidades de los usuarios. Por ejemplo, compruebe si un usuario que ha iniciado sesión en una pestaña con las credenciales de Microsoft Entra es un miembro del equipo.

Ejemplo de API de REST

Emita directamente una solicitud GET en /conversations/{teamId}/members/, utilizando el serviceUrl valor como punto de conexión.

Se teamId puede encontrar en el channeldata objeto de la carga de actividad que recibe el bot en los siguientes escenarios:

Nota

  • Use siempre el identificador de equipo al llamar a la API.
  • El serviceUrl valor tiende a ser estable, pero puede cambiar. Cuando llega un mensaje nuevo, el bot debe comprobar su valor almacenado 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"
}]

Ejemplo de .NET

Team.Id Llame GetConversationMembersAsync usando para devolver una lista de ID de usuario. Llamada GetConversationMembersAsync para obtener userRole la propiedad: devuelve el valor como usuario.

// 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()}");

Node.js o ejemplo de 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));
    }
  }
);

Recuperar perfil de usuario o lista en un chat personal o grupal

Puede realizar la llamada API para cualquier chat personal para obtener la información del perfil del usuario que chatea con el bot.

La llamada API, los métodos SDK y el objeto de respuesta son idénticos a la captura de la lista del equipo. La única diferencia es que pasas el en conversationId lugar del teamId.

Capturar la lista de canales de un equipo

El bot puede consultar la lista de canales de un equipo.

Nota

  • Se devuelve null el nombre del canal General predeterminado para permitir la localización.
  • El id. de canal para el canal General siempre coincide con el id. del equipo.

Ejemplo de API de REST

Emita directamente una solicitud GET en /teams/{teamId}/conversations/, utilizando el serviceUrl valor como punto de conexión.

El único origen teamId es un mensaje del contexto del equipo. El mensaje es un mensaje de un usuario o el mensaje que recibe el bot cuando se agrega a un equipo. Para obtener más información, consulte bot o usuario agregado a un equipo.

Nota

El serviceUrl valor tiende a ser estable, pero puede cambiar. Cuando llega un mensaje nuevo, el bot debe comprobar su valor almacenado 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"
    }]
}

Ejemplo de .NET

En el ejemplo siguiente se utiliza la llamada desde las FetchChannelListextensiones de Teams para el SDK de Bot Builder para .NET:

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

Node.js ejemplo

En el ejemplo siguiente se utiliza fetchChannelList una llamada desde las extensiones de Teams para el SDK de 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));
    }
  }
);

Obtener clientInfo en el contexto del bot

Puede obtener clientInfo dentro de la actividad del bot. clientInfo contiene las siguientes propiedades:

  • Configuración regional
  • País
  • Plataforma
  • Zona horaria

Ejemplo de JSON

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

Ejemplo de C#

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

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

Vea también

Ejemplos de Bot Framework.