通过 Microsoft Graph API 或 BOT API 发送 MS Teams 消息

6
我正在尝试实现以下解决方案:一个Web应用程序订阅所有MS Teams聊天消息。如果消息包含禁止的文本,则应用程序应该以某种方式警告用户(最好通过回复相同的消息,或者如果不可能,启动与用户的对话)。
我能够接收所有聊天Webhooks并处理它们,但是我无法找到使用Graph API将消息发送回Teams频道的方法(https://learn.microsoft.com/en-us/graph/api/channel-post-messagereply?view=graph-rest-beta&tabs=http中描述的操作不支持应用程序权限 - 仅限于委派权限,这不适合我们的情况)。因此,我正在尝试使用Bot框架发送主动消息。但是,Bot框架需要一个Teams会话ID,而我没有(Graph API Webhook提供了团队,频道和用户ID,其中没有任何一个被Bot API接受)。
有人知道我如何使用Graph API提供的团队ID和频道ID检索Teams会话ID吗?
谢谢, 丹
1个回答

1

频道消息的ConversationId是由channelId和messageId组合而成,这两个信息可以在webhook通知的载荷中找到。您可以通过以下方式构建ConversationId来回复现有的对话:

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

为了使回复生效,您的机器人需要安装在团队中,并且应该将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的回复,请查看发送主动消息文档。


你知道是否有通过API发布私人聊天消息的解决方案吗?我们希望能够监控这些消息,并在私人聊天中披露禁止数据时警告用户。 - danbar2304
1
你可以使用相同的机制(主动消息),但请注意,你的机器人需要安装到每个相关的私人聊天中。 - Hilton Giesenow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接