使用Graph API添加MS Teams网站选项卡时出现错误

3

背景:

我正在尝试在MS Teams的现有频道中添加一个新的网站选项卡,然后获取新创建的选项卡的ID。

问题:

我能够创建新的选项卡,但是我从Graph API收到一个“BadRequest”异常:

消息:值不能为空。参数名称:entity

有趣的是,该选项卡已经被创建并且在MS Teams中正确的团队和频道中可见,但我无法以任何方式获取它的ID。

我的代码:

var tab = await _graphClient.Teams[teamId].Channels[channelId].Tabs.Request().WithMaxRetry(3).AddAsync(
    new TeamsTab
    {
        DisplayName = "New Tab",
        AdditionalData = new Dictionary<string, object>
        {
            ["teamsApp@odata.bind"] =
                $"{_teamsFactory.GraphV1Endpoint}/appCatalogs/teamsApps/com.microsoft.teamspace.tab.web"
        },
        Configuration = new TeamsTabConfiguration
        {
            EntityId = null,
            WebsiteUrl = $"{_appUrl}/1",
            ContentUrl = $"{_appUrl}/1",
            RemoveUrl = null,

        }
    }
);

就像我之前写的那样,这段代码能够正常工作并创建选项卡,但是在tab变量被赋值之前,GraphServiceClient会抛出一个异常。

当我尝试在Graph Explorer中获取选项卡列表时:

https://graph.microsoft.com/v1.0/teams/{teamid}/channels/{channelid}/tabs

我收到了一个错误响应:

{
    "error": {
        "code": "InternalServerError",
        "message": "Failed to execute request.",
        "innerError": {
            "request-id": "a03654e8-37a7-4fbb-8052-6a1b11721234",
            "date": "2020-02-24T15:11:54"
        }
    }
}
3个回答

0

最终我找到了“解决方案”,虽然更好的名称是我的问题的解决方法。为了使它工作,我不得不在TeamsTabConfiguration中将ODataType设置为null。就这样。代码应该像这样:

var tab = await _graphClient.Teams[teamId].Channels[channelId].Tabs.Request().WithMaxRetry(3).AddAsync(
new TeamsTab
{
    DisplayName = TabTitle,
    ODataBind = $"{_teamsFactory.GraphV1Endpoint}/appCatalogs/teamsApps/com.microsoft.teamspace.tab.web",
    Configuration = new TeamsTabConfiguration
    {
        ODataType = null,
        EntityId = null,
        WebsiteUrl = $"{_appUrl}/1",
        ContentUrl = $"{_appUrl}/1",
        RemoveUrl = null
    }
});

就像我之前提到的,这只是一个解决方法。在 GitHub 上它被标记为“服务错误”(issue#598


0

我认为您可能需要为"EntityId"设置一个值——基本上只是一个字符串值,用于唯一地"命名"您的选项卡。它不是"DisplayName",而是选项卡的一个字符串"id"。


我之前尝试过,但没有帮助。根据微软文档链接(网站选项卡部分),EntityId属性应设置为null。 - Tomasz Przetacki
哦,我明白你的意思了 - 我在考虑自定义应用程序。不过,在这里看一下:https://learn.microsoft.com/en-us/graph/api/teamstab-add?view=graph-rest-1.0 。在底部的评论中,看起来可能 ["teamsApp@odata.bind"] = $"_teamsFactory.GraphV1Endpoint}/appCatalogs/teamsApps/com.microsoft.teamspace.tab.web" 实际上应该只是简单的 ["teamsApp@odata.bind"] = "com.microsoft.teamspace.tab.web"。 - Hilton Giesenow
抱歉,它没有起作用。我收到了“@odata.bind中指定的无效URL格式的teamsApp”错误消息。 - Tomasz Przetacki

0
POST https://graph.microsoft.com/v1.0/teams/{id}/channels/{id}/tabs
{
  "displayName": "My Contoso Tab",
  "teamsApp@odata.bind" : "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/06805b9e-77e3-4b93-ac81-525eb87513b8",
  "configuration": {
    "entityId": "2DCA2E6C7A10415CAF6B8AB6661B3154",
    "contentUrl": "https://www.contoso.com/Orders/2DCA2E6C7A10415CAF6B8AB6661B3154/tabView",
    "websiteUrl": "https://www.contoso.com/Orders/2DCA2E6C7A10415CAF6B8AB6661B3154",
    "removeUrl": "https://www.contoso.com/Orders/2DCA2E6C7A10415CAF6B8AB6661B3154/uninstallTab"
  }
}

请查看使用Graph API向频道添加选项卡编辑1:请确认您是否具有适当的权限来添加选项卡? 编辑2:请尝试以下代码片段:
GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var teamsTab = new TeamsTab
{
    DisplayName = "WebsiteTab",
    AdditionalData = new Dictionary<string, object>()
    {
        {"teamsApp@odata.bind","https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/com.microsoft.teamspace.tab.web"}
    },
    Configuration = new TeamsTabConfiguration
    {
        EntityId = null,
        ContentUrl = "https://learn.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-context",
        RemoveUrl = null,
        WebsiteUrl = "https://learn.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-context"
    }
};

await graphClient.Teams["TeamId"].Channels["ChannelId"].Tabs
    .Request()
    .AddAsync(teamsTab); 

我正在尝试添加 网站 选项卡。根据文档,teamsAppId 是 "com.microsoft.teamspace.tab.web",entityId 属性应设置为 null。 - Tomasz Przetacki
@Tomasz,您是否仍然遇到此问题? - Trinetra-MSFT
不幸的是,是的。我将entityId属性设置为null(正如您在问题描述中分享的代码部分所看到的那样),并且它在创建选项卡时有效。然后,代码会抛出一个异常,消息为“值不能为null。参数名称:entity”,我无法获取已创建选项卡的ID。 - Tomasz Przetacki
请联系microsoftteamsdev@microsoft.com,以便我们进行调试并查看问题。 - Trinetra-MSFT
@TomaszPrzetacki 你最终解决了这个问题吗? - Hilton Giesenow
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接