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

How to have app send message to Microsoft Teams via Graph API?

我希望能够使用图表 API 获取频道和团队列表,然后让应用程序将更新发送到适当的频道,而无需用户与 MS Teams 交互。环顾四周,我看到很多帖子都说这还不可能,但 Monday.com and Smartsheet 似乎正在这样做。 Monday.com 甚至指定它使用测试版 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

在那之后 returns 我立即调用以获取访问令牌,上面的调用似乎没有 return 我需要放入此请求中的任何内容。

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

然后我使用 return 编辑的 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: ''

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

如果您查看 "auth" 页面 you linked to, it's talking about creating Application permissions. However, see the "create chatMessage in a channel" 图表文档,在靠近顶部的 "permissions" 下,它表明它仅支持 "Delegated" 权限,因此您可以'不幸的是,我没有使用具有应用程序权限的特定端点。

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

结果是 Office 365 连接器与常规 "connector" 需要在团队内进行配置。

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

尽管从技术上讲,如果用户不先与机器人交互,您实际上无法向该应用程序发送消息,但该应用程序的安装确实会触发您可以回复的 conversationUpdate。所以最后,我可以安装 Teams 应用程序,并在我的 Web 应用程序中发送机器人通知,而无需用户实际接触 Microsoft Teams。