Obtener contexto para el Microsoft Teams bot

Importante

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

El bot puede tener acceso 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

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

Capturar la lista de equipos

El bot puede consultar la lista de miembros del equipo y sus perfiles básicos. Los perfiles básicos incluyen Teams de usuario e información Azure Active Directory (AAD), como el nombre y el identificador de objeto. Puede usar esta información para correlacionar identidades de usuario. Por ejemplo, compruebe si un usuario que ha iniciado sesión en una pestaña a través de las credenciales de AAD es un miembro del equipo.

Ejemplo de API de REST

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

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

  • Cuando un usuario mensajes o interactúa con el bot en un contexto de equipo. Para obtener más información, vea recibir mensajes.
  • Cuando se agrega un nuevo usuario o bot a un equipo. Para obtener más información, vea bot or user added to a team.

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 serviceUrl almacenado.
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

Llamar GetConversationMembersAsync a using para devolver una lista de Team.Id id. de 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 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));
    }
  }
);

Capturar perfil de usuario o lista en chat personal o de grupo

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

La llamada a la API, los métodos sdk y el objeto de respuesta son idénticos a la captura de la lista de equipos. La única diferencia es que se pasa el conversationId en lugar de teamId .

Capturar la lista de canales de un equipo

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

Nota

  • El nombre del canal general predeterminado se devuelve como null para permitir la localización.
  • El identificador de canal del canal general siempre coincide con el id. de equipo.

Ejemplo de API de REST

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

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

Nota

El serviceUrl valor tiende a ser estable, pero puede cambiar. Cuando llega un mensaje nuevo, el bot debe comprobar su valor serviceUrl almacenado.

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 usa la llamada desde las extensiones Teams para el FetchChannelList 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 usa la llamada desde el Teams de archivos para el fetchChannelList 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 capturar el clientInfo dentro de la actividad del bot. El clientInfo contiene las siguientes propiedades:

  • Locale
  • País
  • Plataforma
  • Zona horaria

Ejemplo de JSON

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

C# ejemplo

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.