代理可以访问有关安装团队或聊天的其他上下文数据。 此信息可用于个性化响应和构建更丰富的工作流。
提取名单或用户个人资料
代理可以查询当前团队或聊天中的成员列表,并使用该数据个性化响应或目标后续操作。
使用 Teams SDK 对话成员 API 检索名册信息。
对于对话成员检索:
- 最小页面大小:
50 - 默认页面大小:
200 - 最大页面大小:
500
不要在团队和频道中使用非分页成员检索。 对于大型名册,非分页调用可能不完整或受到限制。
注意
- 分页在团队和频道对话中可用。
- 聊天对话不支持分页。 在聊天中,服务会返回完整的名单。
以下示例代码使用分页成员检索:
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
提取名册后,可以获取单个成员的详细信息。
获取单个成员详细信息
可以使用活动上下文中的用户标识符检索特定成员的详细信息。
以下示例代码使用 Teams SDK API:
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)
获取成员的详细信息后,可以检索团队详细信息。
获取团队的详细信息
在团队中安装后,代理可以查询元数据,例如团队 ID 和Microsoft Entra组 ID。
以下示例代码使用 Teams SDK API:
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)
获取团队详细信息后,可以获取该团队中的频道列表。
获取团队中的频道列表
代理可以查询团队中的频道列表。
注意
- 默认常规频道的名称作为
null返回,以允许本地化。 - 常规频道的频道 ID 始终与团队 ID 匹配。
以下示例代码用于获取团队中的频道列表:
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)
如果需要原始连接器 REST 终结点,请对大多数代理方案使用 Teams SDK API,并且仅对 SDK 抽象未涵盖的高级案例直接使用 REST。