如何通过 REST API 为连接到 Microsoft Teams 频道的机器人获取机器人 ID 和用户 ID

Posted

技术标签:

【中文标题】如何通过 REST API 为连接到 Microsoft Teams 频道的机器人获取机器人 ID 和用户 ID【英文标题】:How to get bot id and user id via REST APIs for a bot connected to Microsoft Teams channel 【发布时间】:2020-03-02 12:27:55 【问题描述】:

我们使用Microsoft bot 框架,并且需要通过 REST API 从外部应用程序(在不同的环境中运行,例如本地)向连接到 Microsoft Teams 通道的机器人发送消息。以下 REST API 有助于创建对话

API:https://smba.trafficmanager.net/amer/v3/conversations 授权:承载令牌(使用的令牌端点: https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token) POST 请求正文在这里:

    "bot": 
        "name": "someBot",
        "id": "xxx-some-bot-id"
    ,
    "members": [
        
            "name": "some user",
            "id": "xxx-some-user-id"
        
    ],
  "channelData": 
    "tenant": 
      "id": "xxx-some-teanant-id"
    
  ,

此 API 返回的 id 可用于稍后通过/v3/conversations/id 发送消息

这里有几个问题:

    是否有任何 REST API 可用于获取成员 ID(用户 ID)和 上述有效载荷中使用的机器人 ID?换句话说,外部应用程序如何读取这两个内部ID以供使用而 进行 API 调用?在 Bot API 中找不到合适的 API 文档页面:Bot Framework REST API

    有没有办法让租户 通过 REST API 的 id 以及上述情况? (我知道可以从 Teams 应用程序 URL 读取它

谢谢

【问题讨论】:

我不确定是否有与您想要实现的目标完全相同的东西,但您是否尝试过docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/…?这将获取成员列表及其基本配置文件(用户 ID/名称/对象 ID) 谢谢。是否有从 UI 或通过其他方法识别团队 ID 的标准方法?抱歉问了这么基本的问题。我可以从 MS Team URL 或通过检查网络流量找到团队 ID。但是没有看到正确的方法来获得它 【参考方案1】:

基本上不,您无法从 Teams 外部检索 ID(出于隐私/垃圾邮件预防的原因)。您的机器人将通过以下几种方式接收它们:

在个人环境中安装时,您的机器人将收到包含必要信息的 membersAdded 类型的消息。

如果您的机器人安装在该人所属的团队中,您可以检索该团队的名册,其中也包含必要的信息。

见:https://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages

【讨论】:

几个后续问题: 1.我们看到机器人框架 REST api 以“smba.trafficmanager.net/amer/xxx”开头。看起来 Base URI 绑定到数据中心/区域。我们知道这可以从传入的有效负载中读取。如果客户端想要发起对话并且没有传入有效负载怎么办。在这种情况下,客户端如何以通用方式派生 API 的 Base URI 部分?我们可以将区域(例如 amer)作为一些标头参数传递,将 API 保留为“smba.trafficmanager.net/apis/xxx”吗? 2.在测试时,注意到以下 API:POST /v3/conversations/conversationId/activities 即使在接收者姓名和来自姓名的有效负载中没有 id 也能正常工作。请参阅下面的有效负载,即使没有收件人用户 ID 和来自 ID,它也可以工作。依赖这种行为可以吗?或者这种行为将来会改变吗? "recipient": "name": "recipient" , "from": "name": "somename" , "text": "Hello", "type": "message", "conversation": "conversationType": "personal" 对于 1,我们建议从您的机器人收到的任何传入请求中缓存服务 URL(按上下文缓存)。此值几乎总是稳定的,但可能会意外更改。添加单个全局 URL 将在未来积压。对于 #2,该行为预计不会改变 - Id 用于寻址,而不是 JSON 有效负载。

以上是关于如何通过 REST API 为连接到 Microsoft Teams 频道的机器人获取机器人 ID 和用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 模型中为连接到它的 QListView 选择行

如何在Spring Data Elasticsearch 2.2.3中配置Rest高级客户端的套接字超时

如何通过 HTTP REST API 访问我的 Firebase 数据库?

如何使延迟加载 Apache Spark Dataframe 连接到 REST API

通过 REST API 公开 Redshift 表

如何使用适用于 iOS 的 swift 3 连接到 MEAN 堆栈 REST api