Obtener contexto específico de Teams para el 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 de destino.

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

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

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

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

Nota:

  • La paginación está disponible en las conversaciones de equipo y canal.
  • La paginación no se admite en 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:

app.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.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 capturar la lista, puede obtener detalles para un único miembro.

Obtener detalles de un miembro

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

En el código de ejemplo siguiente se usan las API del SDK de Teams:

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

    var member = await context.Api.Conversations.Members.GetByIdAsync(
        context.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 Microsoft Entra identificador de grupo.

En el código de ejemplo siguiente se usan las API del SDK de Teams:

app.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:

app.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 conector sin procesar, 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 abstracciones del SDK.

Paso siguiente

Vea también