Obtenga el contexto específico de Teams para su agente

Un agente puede acceder a datos de contexto adicionales sobre el equipo o el chat donde está instalado. Esta información se puede usar para personalizar las respuestas y crear flujos de trabajo más completos.

Captura de la lista o el perfil del usuario

El agente puede consultar la lista de miembros del equipo o chat actual y usar esos datos para personalizar las respuestas o las acciones de seguimiento objetivo.

Use la API de miembros de conversaciones del SDK de Teams para recuperar la información de la lista.

Para la recuperación de miembros de la conversación:

  • Tamaño de página mínimo: 50
  • Tamaño de página predeterminado: 200
  • Tamaño de página máximo: 500

No use la recuperación de miembros no paginados en equipos y canales. En el caso de listas grandes, las llamadas no paginadas pueden estar incompletas o limitadas.

Nota:

  • La paginación está disponible en conversaciones de equipo y canal.
  • La paginación no es compatible con las conversaciones de chat. En los chats, el servicio devuelve la lista completa.

El código de ejemplo siguiente usa la recuperación de miembros paginados:

teams.OnMessage(async (context, cancellationToken) =>
{
    var membersClient = context.Api.Conversations.Members;
    var allMembers = new List<TeamsChannelAccount>();
    string? continuationToken = null;

    do
    {
        var page = await membersClient.GetPagedAsync(
            context.Activity.Conversation.Id,
            pageSize: 50,
            continuationToken: continuationToken,
            cancellationToken: cancellationToken
        );

        allMembers.AddRange(page.Members.Where(m => m is not null).Select(m => m!));
        continuationToken = page.ContinuationToken;
    }
    while (!string.IsNullOrEmpty(continuationToken));
});
app.on("message", async ({ activity, api }) => {
  const membersClient = api.conversations.members(activity.conversation.id);
  const allMembers = [];
  let continuationToken = undefined;

  do {
    const page = await membersClient.getPaged({
      pageSize: 50,
      continuationToken,
    });

    allMembers.push(...page.members);
    continuationToken = page.continuationToken;
  } while (continuationToken);
});
@app.on_message
async def list_members(ctx: ActivityContext[MessageActivity]) -> None:
    members_client = ctx.api.conversations.members(ctx.activity.conversation.id)

    all_members = []
    continuation_token: str | None = None

    while True:
        result = await members_client.get_paged(
            page_size=50,
            continuation_token=continuation_token,
        )
        all_members.extend(result.members)

        if not result.continuation_token:
            break

        continuation_token = result.continuation_token

Después de obtener la lista, puede obtener detalles para un solo miembro.

Obtener detalles de un miembro

Puede recuperar los detalles de un miembro específico mediante identificadores de usuario del contexto de la actividad.

El siguiente código de ejemplo usa las API del SDK de Teams:

teams.OnMessage(async (context, cancellationToken) =>
{
    var memberId = context.Activity.From?.Id;
    if (string.IsNullOrEmpty(memberId))
    {
        return;
    }

    var member = await context.Api.Conversations.Members.GetByIdAsync(
        context.Activity.Conversation.Id,
        memberId,
        cancellationToken: cancellationToken
    );
});
app.on("message", async ({ activity, api }) => {
    const memberId = activity.from?.id;
    if (!memberId) {
        return;
    }

    const member = await api.conversations
        .member.getById(activity.conversation.id, memberId);
});
@app.on_message
async def get_member(ctx: ActivityContext[MessageActivity]) -> None:
    member_id = ctx.activity.from_.id
    member = await ctx.api.conversations.member.get_by_id(ctx.activity.conversation.id, member_id)

Después de obtener los detalles de un miembro, puede recuperar los detalles del equipo.

Obtener los detalles del equipo

Cuando se instala en un equipo, el agente puede consultar metadatos como el identificador de equipo y el identificador de grupo de Microsoft Entra.

El siguiente código de ejemplo usa las API del SDK de Teams:

teams.OnMessage(async (context, cancellationToken) =>
{
    var teamId = context.Activity.ChannelData?.Team?.Id;
    if (string.IsNullOrEmpty(teamId))
    {
        return;
    }

    var team = await context.Api.Teams.GetByIdAsync(
        teamId,
        cancellationToken: cancellationToken
    );
});
app.on("message", async ({ activity, api }) => {
    const teamId = activity.channelData?.team?.id;
    if (!teamId) {
        return;
    }

    const team = await api.teams.getById(teamId);
});
@app.on_message
async def get_team_details(ctx: ActivityContext[MessageActivity]) -> None:
    team_id = ctx.activity.channel_data.team.id
    team = await ctx.api.teams.get_by_id(team_id)

Después de obtener los detalles del equipo, puede obtener la lista de canales de ese equipo.

Obtiene la lista de canales en un equipo

El agente 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.

El siguiente código de ejemplo se usa para obtener la lista de canales de un equipo:

teams.OnMessage(async (context, cancellationToken) =>
{
    var teamId = context.Activity.ChannelData?.Team?.Id;
    if (string.IsNullOrEmpty(teamId))
    {
        return;
    }

    var channels = await context.Api.Teams.GetConversationsAsync(
        teamId,
        cancellationToken: cancellationToken
    );
});
app.on("message", async ({ activity, api }) => {
  const teamId = activity.channelData?.team?.id;
  if (!teamId) {
    return;
  }

  const channels = await api.teams.getConversations(teamId);
});
@app.on_message
async def list_channels(ctx: ActivityContext[MessageActivity]) -> None:
    team_id = ctx.activity.channel_data.team.id
    channels = await ctx.api.teams.get_conversations(team_id)

Si necesita puntos de conexión REST de conectores sin formato, use la API del SDK de Teams para la mayoría de los escenarios de agente y solo use REST directamente para casos avanzados que no están cubiertos por las abstracciones del SDK.

Paso siguiente

Vea también