我正在尝试获取与特定团队相关的所有渠道,以便我的机器人可以发送主动消息。根据所做的阅读,我需要在TeamsOperationsExtensions类的Microsoft.Bot.Connector.Teams命名空间中使用FetchChannelList方法。
如果我这样做:
var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
ConversationList channels = connector.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);
channels为空。如果我只将其分解为connector.GetTeamsConnectorClient(),则不为空,而是connector.GetTeamsConnectorClient()。Teams.FetchChannelList(activity.GetChannelData()。Team.Id)为
。为了进一步分解,我尝试获取activity.GetChannelData()。只有“租户”属性不为空。所有其他(渠道,团队,事件类型和通知)均为空。
我正在使用tunnelrelay,它将发送到bot的公共终结点的消息转发到私有终结点,并在消息控制器中使用租户筛选器身份验证。不确定是否会引起任何问题? (当我看到通过隧道中继传入的消息时,我也看到只有Tenant是唯一不为null的channeldata属性。这是我在tunnelrelay中看到的内容:
"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)。它会为我所属的每个团队返回一个不同的groupId,但我假设groupId!= TeamId。那是对的吗?而且,除了GetChannelData方法之外,在哪里可以找到FetchChannelList期望的teamId?
在此先感谢您的帮助!
答案 0 :(得分:1)
这里的问题是发给漫游器的消息(活动)是直接消息,而不是频道对话的一部分。显然,“频道”和“团队”属性仅在频道对话中可用。
此外,关于团队ID,将其获取到代码之外的一种方法是单击团队旁边的“ ...”,然后单击“获取团队链接”。您将看到类似以下内容: https://teams.microsoft.com/l/team/19%3a813345c7fafe437e8737057505224dc3%40thread.skype/conversations?groupId=Some_GUID&tenantId=Some_GUID
team /之后的行((19%3a813345c7fafe437e871111115934th3%40thread.skype)包含teamId,但不完全是。如果将第一个%和紧随其后的两个字符替换为:,将第二个%和紧随其后的两个字符替换为@,这就是您的团队ID。因此,来自:
19%3a813345c7fafe437e871111115934th3%40thread.skype
团队ID为:
19:813345c7fafe437e871111115934th3@thread.skype