通过Graph API和自定义请求发送主动消息我收到401未经授权

时间:2020-04-22 08:45:42

标签: java botframework microsoft-graph-api microsoft-teams

我想与团队机器人发送主动消息。为此,我:

  • 在漫游器框架中创建了一个漫游器
  • 在团队中使用AppStudio创建了一个应用
  • 将漫游器分配给我的应用
  • 将应用分配给我的团队

现在,我想向该网址发送请求:

padding-top

向该频道发送消息。 为此,我必须使用此令牌URL获取承载令牌:

https://smba.trafficmanager.net/de/v3/conversations/{teamId}/activities/

我回来没问题。

现在我想使用GraphAPI执行自定义请求

首先,我必须创建一个像这样的GraphServiceClient:

https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token

创建客户端后,我会执行请求。

OAuth2AuthenticationProvider authProvider = new OAuth2AuthenticationProvider(_getBotToken(botClientId, botClientSecret, BOT_SCOPE));
    graphBotClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

我需要使用自定义查询,因为Java中没有用于该查询的方法。 messageAsJson是一个Json对象,看起来像一个活动对象,它是编写消息所必需的。

graphBotClient.customRequest("https://smba.trafficmanager.net/de/v3/conversations/" + pTeamId + "/activities").buildRequest().post(messageAsJson);

执行此命令时,出现以下异常:

{
    "type": "message",
    "from": {
        "id": "{clientBotIdFromAzure}",
        "name": "Botname"
    },
    "conversation": {
        "id": "{teamId}",
        "name": "ChannelName"
   },
    "text": "My bot's reply"
}

如果我在Postman中执行相同的请求,并使用相同的令牌,URL和正文,则该请求运行正常,并且我的消息出现在MSTeams中 Message sent out of Postman appears in MSTeams

为什么它不能与GraphAPI一起使用?我的错误在哪里?我想念什么?

许多问候

1 个答案:

答案 0 :(得分:1)

我认为问题可能是针对bot框架本身的身份验证与针对Microsoft Graph的身份验证的混合-我认为它们不是完整的1-1。

也就是说,直接使用bot框架要容易得多-它也具有主动消息的机制。您可以创建一个ConversationContext实例并与之交互。为此,您确实需要具有某些信息,尤其是对话ID,serviceurl等,这些信息需要事先获取和存储。获取此信息的方法有多种,但是最简单的方法是在用户向您的漫游器发送消息时保存此信息(每条消息都会包含这些信息),然后将其保存在数据库/ blob /任何内容中。 / p>

我在这里有更多详细信息:Programmatically sending a message to a bot in Microsoft Teams

这也是一个Node示例:Sending Proactive Messages from Azure functions to botservice - node

当然,不要忘记查看有关更多信息的文档:https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=javascript