Obtener contexto para el bot de Microsoft Teams
Importante
Este artículo se basa en el SDK de Bot Framework v3. Si busca la versión 4.6 o posterior de la documentación actual del SDK, consulte la sección bots conversacionales .
El bot puede acceder a contextos adicionales 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 obtiene mejor acceso a las API de bot específicas de Microsoft Teams a través de nuestras extensiones del SDK de Bot Builder.
- Para C# o .NET, descargue nuestro paquete NuGet Microsoft.Bot.Connector.Teams .
- Para Node.js desarrollo, la funcionalidad Bot Builder para Teams se incorpora al SDK de Bot Framework v4.6.
Captura de la lista de equipos
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 usuario. Por ejemplo, compruebe si un usuario que ha iniciado sesión en una pestaña a través de las credenciales de Microsoft Entra es miembro del equipo.
Ejemplo de API REST
Emita directamente una solicitud GET en /conversations/{teamId}/members/
, utilizando el serviceUrl
valor como punto de conexión.
teamId
Se puede encontrar en el channeldata
objeto de la carga de actividad que recibe el bot en los siguientes escenarios:
- Cuando un usuario mensajes o interactúa con el bot en un contexto de equipo. Para obtener más información, consulte Recepción de mensajes.
- Cuando se agrega un nuevo usuario o bot a un equipo. Para obtener más información, consulte Bot o usuario agregado a un equipo.
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 nuevo mensaje, el bot debe comprobar su valor almacenadoserviceUrl
.
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
Llame a GetConversationMembersAsync
using Team.Id
para devolver una lista de identificadores de usuario.
La llamada GetConversationMembersAsync
a 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()}");
ejemplo de 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 grupal
Puede realizar la llamada a la API para cualquier chat personal para obtener la información de perfil del usuario que chatea con el bot.
La llamada API, los métodos del SDK y el objeto de respuesta son idénticos a la captura de la lista de equipos. La única diferencia es que pasa en conversationId
lugar de .teamId
Captura de la lista de canales de un equipo
El bot puede consultar la lista de canales de un equipo.
Nota:
- El nombre del canal predeterminado General se devuelve como
null
para permitir la localización. - El identificador de canal General siempre coincide con el identificador de equipo.
Ejemplo de API REST
Emita directamente una solicitud GET en /teams/{teamId}/conversations/
, utilizando el serviceUrl
valor como punto de conexión.
El único origen de 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 nuevo mensaje, 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 usa la FetchChannelList
llamada desde las extensiones de Teams para bot Builder SDK para .NET:
ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);
Ejemplo de Node.js
En el ejemplo siguiente se usa fetchChannelList
la 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 capturar clientInfo dentro de la actividad del bot. 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"
}
]
Ejemplo de C#
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
{
var clientinfo = context.Activity.Entities[0];
await context.PostAsync($"ClientInfo: clientinfo ");
}