如何通过Adaptive Card在MS Teams频道输出审批人登录用户名
实现方案
核心逻辑
Teams 端的 Adaptive Card 本身不会自动返回交互用户的身份信息,你需要搭配 Bot Framework 捕获用户点击提交动作的请求上下文,提取用户身份后更新原有卡片或推送新消息到频道即可实现需求。
具体实现步骤
- 第一步:构造初始待审批 Adaptive Card
初始卡片预留审批人信息展示位,动作类型使用
Action.Submit,无需手动传递用户参数,Teams 会在提交请求中自动携带交互用户上下文。
初始卡片示例:
{ "type": "AdaptiveCard", "version": "1.4", "body": [ { "type": "TextBlock", "text": "告警待审批", "size": "Large", "weight": "Bolder" }, { "type": "TextBlock", "text": "告警内容:XXX服务触发异常阈值", "isSubtle": true }, { "type": "TextBlock", "id": "approverInfo", "text": "当前状态:待审批", "color": "Attention" } ], "actions": [ { "type": "Action.Submit", "title": "批准", "data": { "action": "approve_alert" } } ] }
- 第二步:捕获提交请求提取用户信息
用户点击审批按钮后,你的服务端会收到 Bot Framework 推送的 invoke 请求,请求的from字段直接包含交互用户的基础信息:from.name为用户显示名,from.aadObjectId为用户的AAD唯一ID,如需获取登录用户名(UPN)可以调用Graph API通过AAD ID查询userPrincipalName字段。
请求上下文示例:
{ "from": { "id": "29:xxxxxxxxxxxx", "name": "张三", "aadObjectId": "xxxx-xxxx-xxxx-xxxx" } }
- 第三步:将审批人信息同步到频道
可选择两种实现方式:
- 更新原有审批卡片:调用 Bot Framework 的
updateActivity接口,替换原卡片中预留的approverInfo内容为审批人信息,同时隐藏审批按钮即可。
更新后的展示字段示例:
{ "type": "TextBlock", "id": "approverInfo", "text": "已由 *张三(zhangsan@contoso.com)* 批准", "color": "Good" }
- 发送新消息到频道:直接调用
sendActivity接口往当前频道推送一条新消息,内容包含审批人用户名即可。
注意事项
- 如果需要调用 Graph API 查询用户 UPN,需要提前给 Bot 授予
User.Read.All应用权限 - 确保 Adaptive Card 版本不低于1.2,兼容 Teams 的卡片更新能力
内容的提问来源于stack exchange,提问作者hare krshn
相关产品推荐
相关产品推荐

