bot 框架和 Microsoft 团队 - 如何让所有渠道与团队相关联?

bot framework and Microsoft teams - how to get all channels associated to a team?

我正在尝试获取与特定团队关联的所有频道,以便我的机器人可以发送主动消息。根据我所做的阅读,我需要在 TeamsOperationsExtensions class.

的 Microsoft.Bot.Connector.Teams 命名空间中使用 FetchChannelList 方法

如果我这样做:

var connector = new ConnectorClient(new Uri(activity.ServiceUrl)); ConversationList channels = connector.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);

频道为空。如果我将它分解为仅 connector.GetTeamsConnectorClient(),那不是空的,但是 connector.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData().Team.Id) 是.

为了进一步分解,我尝试获取 activity.GetChannelData()。只有租户 属性 不为空。所有其他(频道、团队、事件类型和通知)均为空。

我正在使用 tunnelrelay,它将发送到 bot 的 public 端点的消息转发到专用端点,并在消息控制器中使用租户过滤器身份验证。不确定这是否会导致任何问题? (当我观看通过隧道中继传入的消息时,我也看到只有 Tenant 是唯一不为空的通道数据 属性。这是我在隧道中继中看到的: "entities":[{"locale":"en- US","country":"US","platform":"Windows","type":"clientInfo"}],"channelData":{"tenant":{"id":"our_tenant_id"}}}

此外,关于预期作为 FetchChannelList 方法参数的 teamID,除了 GetChannelData() 方法之外,我如何找出给定团队的参数?我尝试了 powershell cmdlet Get-Team(例如:Get-Team -User me@abc.com)。它 returns 我所属的每个团队都有一个不同的 groupId,但我假设 groupId != TeamId。那是对的吗?而且,除了 GetChannelData 方法之外,我在哪里可以找到 FetchChannelList 期望的 teamId?

在此先感谢您的帮助!

这里的问题是发送给机器人(activity)的消息是直接消息,而不是频道对话的一部分。显然,Channel 和 Team 属性仅在频道对话中可用。

此外,关于团队 ID,在代码之外获取它的一种方法是单击团队旁边的“...”,然后单击 "get link to team"。你会看到类似的东西: https://teams.microsoft.com/l/team/19%3a813345c7fafe437e8737057505224dc3%40thread.skype/conversations?groupId=Some_GUID&tenantId=Some_GUID

team/ (19%3a813345c7fafe437e871111115934th3%40thread.skype) 之后的行包含 teamId,但不完全是。如果您将第一个 % 和紧随其后的两个字符替换为 :,将第二个 % 和紧随其后的两个字符替换为 @,那就是您的 teamid。所以,来自:

19%3a813345c7fafe437e871111115934th3%40thread.skype

团队 ID 是:

19:813345c7fafe437e871111115934th3@thread.skype