如何让应用程序通过Graph API向Microsoft Teams发送消息?

时间:2020-03-19 01:45:27

标签: node.js typescript microsoft-graph-api microsoft-teams microsoft-graph-teams

我希望能够使用图表API获取渠道和团队的列表,然后让该应用将更新发送到相应的渠道,而无需用户与MS Teams进行交互。环顾四周,我看到很多帖子都说这还不可能,但是Monday.comSmartsheet似乎正在这样做。 Monday.com甚至使用beta API来指定它,而两者都没有使用连接器。

通过shown in this documentation方式进行身份验证后,我尝试使用api POST /teams/{id}/channels/{id}/messages

首次致电adminconsent

https://login.microsoftonline.com/organizations/v2.0/adminconsent?&client_id={botID}&response_type=code&redirect_uri=https://myoauthCallback&scope=offline_access User.ReadWrite.All Group.ReadWrite.All

返回之后,我立即进行调用以获取访问令牌,上述调用似乎没有返回我需要放入此请求的任何内容。

POST => /organizations/oauth2/v2.0/token

body = client_id={botId}&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret={secret}&grant_type=client_credentials

我在https://portal.azure.com/#blade/中设置了机器人的权限,使其具有与上述第一个请求相同的作用域。在这里,它不喜欢以相同的方式传递范围,因此我将其设置为default

然后我拿回返回的access_token并尝试调用POST到频道的消息。

URL:/teams/{TEAM_ID}/channels/{CHANNEL_ID}/messages

正文:{ subject: 'test subj', body: { contentType: 'text', content: 'Test message from app' }, }

这会导致错误

statusCode: 401, code: 'UnknownError', message: ''

那么我如何获得与其他应用程序相同的功能,以便我可以直接向团队发送消息而无需设置连接器?

2 个答案:

答案 0 :(得分:0)

如果您查看“身份验证”页面you linked to,则是在谈论创建应用程序权限。但是,请参阅"create chatMessage in a channel"图形文档,并在顶部附近的“权限”下显示其仅支持“委派”权限,因此,遗憾的是,不能将该特定端点与应用程序权限一起使用。

连接器(Webhooks)可以满足您的需求,但是您表示希望避免这种情况-也许您可以解释为什么它不理想?恐怕我不知道如何以编程方式创建Webhook。

答案 1 :(得分:0)

事实证明,这是一个Office 365连接器,而不是需要在团队中进行配置的常规“连接器”。

https://www.youtube.com/watch?v=EqodWkS5PYM

编辑:忽略,即使使用Office 365连接器也要求用户仍然以某种方式与MS Teams进行交互。

另一项编辑:原来是使用主动消息https://docs.microsoft.com/en-us/microsoftteams/platform/resources/bot-v3/bot-conversations/bots-conv-proactive#net-example-from-this-sample

尽管从技术上讲,如果没有用户首先与bot进行交互,您实际上无法将消息发送到应用程序,但是应用程序的安装确实会触发对话更新,您可以对其进行回复。因此,最后,我可以安装Teams应用程序,并在我的Web应用程序中全部发送bot通知,而无需用户实际触摸Microsoft Teams。