Я зарегистрировал свое приложение на веб-сайте 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, отправка сообщений с разрешения приложения поддерживается только для миграции. Таким образом, невозможно отправить командное сообщение с разрешениями приложения.
Первоначально я тоже получил ту же ошибку, когда пытался отправить сообщение с токеном, сгенерированным с потоком учетных данных клиента:
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 Doc, отправка сообщений с разрешения приложения поддерживается только для миграции. Таким образом, невозможно отправить командное сообщение с разрешениями приложения. Вам необходимо переключиться на делегированные потоки, такие как код авторизации, чтобы получить токен доступа.