【问题标题】:Sending an MS Teams message using the Microsoft Graph API or BOT API使用 Microsoft Graph API 或 BOT API 发送 MS Teams 消息
【发布时间】:2020-11-10 17:34:07
【问题描述】:

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

我能够接收所有聊天 webhook 并对其进行处理,但我找不到任何方法可以使用 Graph API 将消息发布回团队频道(https://docs.microsoft.com/en-us/graph/api/channel-post-messagereply?view=graph-rest-beta&tabs=http
中描述的操作 不支持应用程序权限 - 仅支持不适合我们情况的委派权限)。

所以我正在尝试使用 Bot 框架发送主动消息,但是,bot 框架需要一个我没有的团队对话 ID(图形 API webhook 提供了团队、频道和用户 ID,这些都不被接受Bot API)。

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

谢谢, 丹

【问题讨论】:

    标签: microsoft-graph-api microsoft-teams microsoft-graph-teams


    【解决方案1】:

    频道消息的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 文档。

    【讨论】:

    • 您知道是否有任何解决方案可以通过 API 将消息发布到私人聊天中。我们也希望能够监控这些内容,并在私人聊天中披露禁止数据时警告用户。
    • 您可以使用相同的机制(主动消息传递),但请注意您的机器人需要安装到每个相关的私人聊天中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多