TeamsBot - 如何从对话更新事件中获取团队 ID?

Cor*_*nus 5 c# botframework microsoft-teams

我正在安装 Teams 机器人并将其添加到团队中。当我将它添加到团队时,在初始调用时,我在 OnTurnAsync 中正确地获得了“conversationUpdate”事件。我遇到的问题是,任何获取团队本身的调用都失败了,因为那里没有任何东西,我可以看到,用于获取调用以获取团队数据的 Id。

我希望能够将其添加到团队中,获取该事件,然后获取与添加到的团队相关的数据。

这是我正在尝试的。

        private const string ActOnType = "conversationUpdate";

        public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
        {
            if (IsConversationUpdate(turnContext))
            {
                // This fails because TeamsGetInfo is returning null
                var teamDetails = await TeamsInfo.GetTeamDetailsAsync(turnContext,  turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken);
            }
        }

        private bool IsConversationUpdate(ITurnContext turnContext) => string.Equals(turnContext.Activity.Type,
            ActOnType, StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

其他注释...
turnContext.Activity.TeamsGetChannelId()为空,ChannelData 也是如此。任何进一步的调用都有通道数据,但我将机器人添加到团队的初始调用没有。

从调用中添加我的 JSON

{
    "membersAdded": [
        {
            "id": "29:1HqtPeQvYpNL682R_NeBMndg6kYbZbBHsZliZdAT2xWsJWzS0_b50S1ijo2hmPu5i0HTrvqPiOBxqpbtJjS7zyja",
            "aadObjectId": "{valid guid}"
        },
        {
            "id": "28:{valid guid}"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2021-01-11T18:15:49.9118003Z",
    "id": "f:{valid guid}",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer/",
    "from": {
        "id": "29:1HqtPeQvYpNL682R_NeBMndg6kXaZbBHsZliZdAT2xWsJWzS0_gOS1ijo2hmPu5i0HTrvqPiOBxqpbtJjS6zyjA",
        "aadObjectId": "{valid guid}"
    },
    "conversation": {
        "conversationType": "personal",
        "tenantId": "{valid guid}",
        "id": "a:1UgWdBcfpF4JUtOCCjQZsvhjl-QK9YBBnALG7ACgA0QdKx_xGICsQ3d6l94t_pPed7fvtnwSnRlYcWe7kXT7dStP-YCtuvliI8GPZj9Sd5P2wHsBAAn1ibwdad4Lq-O3B"
    },
    "recipient": {
        "id": "28:{valid guid}",
        "name": "LocalBot"
    },
    "channelData": {
        "tenant": {
            "id": "{valid guid}"
        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

Cor*_*nus 1

我会在这里发布答案,以防有人进来......

当机器人被添加到团队中时,您只能获得一次此事件。如果错过了,您将无法再获取数据。卸载并重新安装机器人不会再次触发该事件。如果您仍然没有得到它,建议的操作是从 Azure 中删除该应用程序并使用相同的名称重新执行。

查看更多github 讨论

在我们的场景中,我认为这方面的限制不在我认为的可行解决方案的范围内,因此我决定采用不同的路线来获取团队数据。由于数据是在这之后的事件中传递的,因此我抓住它并用它做我需要做的事情。