如何通过 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 有助于创建对话
"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 数据库?