Проблема с отправкой личного сообщения в MS Teams с помощью Graph API

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

{
    "chatType": "oneOnOne",
    "members": [
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "[email protected]": "https://graph.microsoft.com/v1.0/users('{your-user-id}')"
        },
        {
            "@odata.type": "#microsoft.graph.aadUserConversationMember",
            "roles": [
                "owner"
            ],
            "[email protected]": "https://graph.microsoft.com/v1.0/users('{user-id}')"
        }
    ]
}

Мне удалось сгенерировать идентификатор чата для почты. Однако, когда я попробовал приведенную ниже конечную точку

https://graph.microsoft.com/v1.0/chats/%7Bchat_id%7D/messages

при отправке сообщения я получаю сообщение об ошибке, как показано ниже

{
    "error": {
        "code": "Unauthorized",
        "message": "Message POST is allowed in application-only context only for import purposes. Refer to https://docs.microsoft.com/microsoftteams/platform/graph-api/import-messages/import-external-messages-to-teams for more details.",
        "innerError": {
            "date": "2024-06-10T05:06:10",
            "request-id": "4b1bf353-d1c0-4852-afcc-0c508d76d6d3",
            "client-request-id": "4b1bf353-d1c0-4852-afcc-0c508d76d6d3"
        }
    }
}

Почему я получаю эту ошибку?

Я ожидаю, что токен, сгенерированный на основе учетных данных регистрации приложения, будет использоваться для отправки личных сообщений в командах. Однако я столкнулся с этой проблемой. Теперь я могу создать идентификатор чата с любыми двумя почтовыми идентификаторами пользователей в моей организации. Но мне запрещено отправлять личные сообщения Teams.

Как упоминалось в MS Doc, отправка сообщений с разрешения приложения поддерживается только для миграции. Таким образом, невозможно отправить командное сообщение с разрешениями приложения. Вам необходимо переключиться на делегированные потоки, такие как код авторизации, чтобы получить токен доступа.

Sridevi 10.06.2024 10:48
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
1
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как упоминалось в MS Doc, отправка сообщений с разрешения приложения поддерживается только для миграции. Таким образом, невозможно отправить командное сообщение с разрешениями приложения.

Первоначально я тоже получил ту же ошибку, когда пытался отправить сообщение с токеном, сгенерированным с потоком учетных данных клиента:

POST https://graph.microsoft.com/v1.0/chats/chatID/messages
Content-type: application/json

{
  "body": {
     "content": "Hello world"
  }
}

Ответ:

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

В моем случае я добавил ChatMessage.Send разрешение типа «Делегированный» в свое приложение следующим образом:

Теперь я запустил ниже запрос авторизации в браузере, который выдает значение code в адресной строке после успешной аутентификации:

https://login.microsoftonline.com/tenantId/oauth2/v2.0/authorize
?client_id=appId
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=ChatMessage.Send
&state=12345

Вы можете использовать это значение code для получения токена доступа с использованием потока кода авторизации через Postman со следующими параметрами:

POST https://login.microsoftonline.com/tenantId/oauth2/v2.0/token
grant_type:authorization_code
client_id:appId
client_secret:secret
scope:ChatMessage.Send
code:code
redirect_uri:https://jwt.ms

Ответ:

Когда я использовал этот токен для отправки сообщения в чат, я получил такой ответ:

POST https://graph.microsoft.com/v1.0/chats/chatID/messages
Content-type: application/json

{
  "body": {
     "content": "Hello world"
  }
}

Ответ:

Ответ принят как подходящий

API Microsoft Graph. Можно ли отправить сообщение в чат, используя поток учетных данных клиента?

Это были разрешения, данные мной.

ChannelMessage.Edit ChannelMessage.Читать.Все ChannelMessage.ЧитатьЗапись ChannelMessage.Отправить чат.Создать чат.Управлениеудалением.Все чаты.Читать чат.Читать основной чат.ЧитатьЗаписать чат.ЧитатьЗаписать.Все ChatMember.Читать ChatMember.ЧитатьЗапись ChatMessage.Читать ChatMessage.Отправить пользователя. Прочитайте электронную почту openid профиля. Прикрепляю скриншот для справки.

Я использовал этот подход, и он сработал для меня. Спасибо, Шридеви, за публикацию этого на форуме.

Другие вопросы по теме

Настройки почтового ящика учетной записи MS Graph, автоматическая пересылка почты (C#)
Mock MS Graph SDK в модульном тесте Golang?
«ODataError: один из предоставленных аргументов неприемлем» при попытке составить список DocumentSetVersions с помощью Microsoft Graph SDK
Как получить код авторизации в MS Graph API 6.12
Как использовать createUploadSession из Microsoft Graph с веб-API ASP.NET Core
Ошибка: AADTS50059: информация, идентифицирующая арендатора, не найдена ни в запросе >, ни в предоставленных учетных данных
API Graph возвращает 0 дисков для сайта группы SharePoint, на котором есть общая папка и ее подпапки с файлами
Запрос API Azure DevOps. Найдите список групп проектов и их дескриптор
Запрос API Azure DevOps, добавление группы в новый проект с помощью автоматизации потока
Скрипт Powershell, предназначенный для получения электронных писем всех пользователей и электронных писем менеджеров, принадлежащих к определенной группе безопасности в AD, создает пустой CSV-файл