Я хочу отправить проактивное сообщение с командным ботом. Для этого я:
- создал бота в рамках бота
- создал приложение с AppStudio в командах
- назначил бота моему приложению
- назначил приложение моей команде
Теперь я хотел бы отправить запрос на этот URL:
https://smba.trafficmanager.net/de/v3/conversations/{teamId}/activities/
, чтобы отправить сообщение на канал. Для этого мне нужно получить токен на предъявителя с этим URL-адресом токена:
https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
Я получаю его обратно без проблем.
Теперь я хочу использовать GraphAPI для выполнения пользовательского запроса
Прежде всего я должен создать GraphServiceClient следующим образом:
OAuth2AuthenticationProvider authProvider = new OAuth2AuthenticationProvider(_getBotToken(botClientId, botClientSecret, BOT_SCOPE));
graphBotClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();
После того, как я создал клиента, я делаю запрос.
graphBotClient.customRequest("https://smba.trafficmanager.net/de/v3/conversations/" + pTeamId + "/activities").buildRequest().post(messageAsJson);
Мне нужно использовать пользовательский запрос, потому что в Java нет методов для него. messageAs Json - это Json объект, похожий на объект активности, который необходим для написания сообщений.
{
"type": "message",
"from": {
"id": "{clientBotIdFromAzure}",
"name": "Botname"
},
"conversation": {
"id": "{teamId}",
"name": "ChannelName"
},
"text": "My bot's reply"
}
Когда я выполняю эту команду, я получаю следующее исключение:
401 : Unauthorized
Strict transport security : max-age=31536000
Cache control : private
x-ms-ags-diagnostic : {"ServerInfo":{"DataCenter": "West Europe", "Slice": "SliceC", "Ring": "5", "ScaleUnit": "002", "RoleInstance": "AGSFE_IN_102"}}
client-request-id : 9a7197en-dd0f-4c90-8b2b-8dc5bb1200ee
WWW-Authenticate : Bearer realm="", authorization_uri="https://login.microsoftonline.com/common/oauth2/authorize", client_id="00000003-0000-0000-c000-000000000000"
request-id : b07b1399-7175-40d3-9891-266abe1144b9
Content-Length : 262
Date : Wed, 22 Apr 2020 08:24:28 GMT
Content-Type : application/json
{
"error." {
"code." "InvalidAuthenticationToken"
"message": "Access token validation failure. Invalid audience."
"innerError": {
"request-id": "b07b1399-7175-40d3-9891-266abe1144b9"
"date": "2020-04-22T08:24:29"
}
}
}
Exception in thread "main" com.microsoft.graph.http.GraphServiceException: Error code: InvalidAuthenticationToken
Error message: Access token validation failure. Invalid audience.
Если я выполняю тот же запрос в Почтальоне, с тем же токеном, URL и телом, запрос работает нормально, и мое сообщение появляется в MSTeams Сообщение, отправленное из Почтальона, появляется в MSTeams
Почему он не работает с GraphAPI? Где моя ошибка? Чего мне не хватает?
Много поздравлений