我想与团队机器人发送主动消息。为此,我:
现在,我想向该网址发送请求:
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一起使用?我的错误在哪里?我想念什么?
许多问候
答案 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