Получение всех сообщений от Microsoft Teams - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить все сообщения от Microsoft Teams в моем клиенте, я зарегистрировал приложение на Azure, установил правильные разрешения и предоставил права администратора.

Что меня смущает создает GraphServiceClient. Мое приложение больше похоже на приложение-демон. Я был бы очень признателен, если бы кто-нибудь мог дать мне пример того, как правильно создать клиента.

это мой код:

            string[] graphScopes = { "https://graph.microsoft.com/.default" };
            IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
            .Create("x")
            .WithTenantId("x")
            .WithClientSecret("x")
            .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(app);
            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            try
            {
                var messages = await graphClient.Teams["x"].Channels["x@thread.skype"].Messages.Request().GetAsync();
                Console.ReadLine();
                foreach(var item in messages)
                {
                    Console.WriteLine(item.Body);
                }
            }
            catch(Exception e)

            {
                Console.WriteLine(e.Message);
                Console.Read();
            }

Независимо от того, что я пытаюсь получить, я получаю следующую ошибку. Код: UnknownError Внутренняя ошибка: AdditionalData: request-id: x date: 2020-05-27T14: 22: 37 ClientRequestId: x

обновление: мне удалось получить кое-что из API, у меня были неправильные разрешения. все еще не могу получить сообщения, у меня есть все эти разрешения: ChannelMessage.Read.All, Group.Read.All, Group.ReadWrite.All Мне, вероятно, не хватает «ChannelMessage.Read.Group (RS C) "разрешение, но я не могу найти его на странице разрешений.

1 Ответ

0 голосов
/ 03 июня 2020

Ваша проблема в том, что вы обращаетесь к "бета" api , но используете путь к производственной базе URL.

Требуется ЛЮБОЕ из следующих разрешений (т.е. или нет и):

  • ChannelMessage.Read.Group (RS C) ИЛИ
  • ChannelMessage.Read.All OR
  • Group.Read.All OR
  • Group.ReadWrite.All

Поскольку у вас есть Group.Read.All, это ВСЕ, что вам нужно для разрешений.

Что вам нужно сделать, это измените базовый URL-адрес на бета-версию API:

graphClient.BaseUrl = "https://graph.microsoft.com/beta";

ОБНОВЛЕНО:

Поскольку теперь вы говорите, что получаете ошибку «Запрещено», я думаю, у вас также есть проблема согласия.

Я предполагаю, что вы создали и предоставили свое приложение в одном клиенте, но вы пытаетесь получить доступ к данным в другом клиенте. Это даст вам запрещенные ошибки. т.е. вы создали и дали согласие на использование клиента учетной записи dev azure и пытаетесь получить доступ к своему рабочему клиенту.

В такой ситуации вам необходимо: * Убедитесь, что настроенное вами приложение azure мультитенантное * Ваше приложение должно быть согласовано целевым клиентом

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

Update2:

Наконец-то дошел до попытки составить список сообщений с контекстом приложения, как вы выше, и я получаю такую ​​же Запрещенную ошибку из бета-API. С точки зрения пользователя он работает нормально. Итак, ваш ответ будет заключаться в использовании контекста пользователя, а не контекста приложения для доступа к этому API.

Похоже, вы нажимаете Защищенный API . Поэтому, если вы хотите использовать этот API из контекста приложения, вам нужно будет отправить запрос на разрешение доступа к нему.

...