使用 Microsoft Graph API 或 BOT API 发送 MS Teams 消息

Sending an MS Teams message using the Microsoft Graph API or BOT API

我正在尝试实施以下解决方案:一个订阅所有 MS 团队聊天消息的 Web 应用程序。如果消息包含禁止的文本,应用程序应该以某种方式警告用户(理想情况下通过回复相同的消息,或者,如果不可能,发起与用户的对话)。

我能够接收所有聊天 webhook 并处理它们,但我找不到任何方法来使用 Graph API post 将消息返回到 Teams 频道(描述的操作在 https://docs.microsoft.com/en-us/graph/api/channel-post-messagereply?view=graph-rest-beta&tabs=http
应用程序权限不支持 - 只有不适合我们案例的委托)。

所以我正在尝试使用 Bot 框架发送主动消息,但是,bot 框架需要一个我没有的团队对话 ID(图表 API webhook 提供团队、频道和用户 ID,none 被机器人接受 API).

有人知道我可以使用图表 API 提供的团队 ID 和频道 ID 检索团队对话 ID 的方法吗?

谢谢, 旦

频道消息的 ConversationId 是 channelId 和 messageId 的组合,两者都可以在您获得的有效负载中找到 webhook notification。您可以通过如下方式构建 converstionId 来回复现有对话:

 conversationId =   $"{channelId};messageid={messageId}"

要回复工作,您的 Bot 需要安装在团队中,并且应该 serviceURL 保存在某个地方以供参考。下面是展示如何回复现有消息的示例代码。

var serviceURL = "YOUR Service URL- You get this in each bot payload";
MicrosoftAppCredentials.TrustServiceUrl(serviceURL, DateTime.MaxValue);
using var connector = new ConnectorClient(new Uri(serviceURL, MicrosoftAppId, MicrosoftAppPassword);


var conversationId = $"{channelId};messageid={messageId}";
var replyActivity = MessageFactory.Text($"This is simple reply to existing conversation.");
replyActivity.Conversation = new ConversationAccount(id: conversationId);
var response = await connector.Conversations.SendToConversationAsync(conversationId, replyActivity);

对于 1:1 回复 - 请查看 Sending Proactive Message 文档。