Добавьте вкладку веб-сайта MS Teams с помощью ошибки API графика - PullRequest
3 голосов
/ 24 февраля 2020

Контекст:

Я пытаюсь добавить новую вкладку веб-сайта в существующий канал в командах MS, а затем получить идентификатор только что созданной вкладки.

Проблема:

Я могу создать новую вкладку, но получаю исключение "BadRequest" из графика:

Сообщение: значение не может быть нулевым. Имя параметра: entity

Интересно то, что вкладка создается и отображается в командах MS в правильной команде и канале, но я никак не могу получить ее идентификатор.

Мой код:

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,

        }
    }
);

Как я уже писал выше, этот код работает, и вкладка создается, но GraphServiceClient вызывает исключение перед назначена переменная tab .

И когда я попытался получить список вкладок в 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 ]

1 голос
/ 25 февраля 2020
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: Не могли бы вы проверить, есть ли у вас соответствующие разрешения для добавления вкладки?

Edit2: Не могли бы вы попробовать ниже кусок кода?

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://docs.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-context",
        RemoveUrl = null,
        WebsiteUrl = "https://docs.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bots-context"
    }
};

await graphClient.Teams["TeamId"].Channels["ChannelId"].Tabs
    .Request()
    .AddAsync(teamsTab); 
0 голосов
/ 08 апреля 2020

Наконец-то я нашел «решение», хотя лучшее решение - это решение моей проблемы. Чтобы это работало, я должен был установить ODataType на null в TeamsTabConfiguration. Это все. Код должен выглядеть следующим образом:

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 он помечен как «служебная ошибка» ( выпуск # 598 )

0 голосов
/ 24 февраля 2020

Я думаю, вам может понадобиться установить значение для «EntityId» - в основном просто строковое значение, чтобы уникально «назвать» вашу вкладку. Это не «DisplayName», а строка «id» для вкладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...