You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Teams中Adaptive Cards如何调用外部API发送POST请求实现审批

MS Teams自适应卡片实现无跳转审批按钮方案

问题背景

通过webhook向MS Teams频道连接器推送Adaptive Card发起主管审批申请时,需要实现底部的批准、拒绝按钮:

  • 最初计划通过接收POST JSON请求体的API端点读取审批状态参数,该方案已被MS Teams弃用不支持
  • 改用Action.OpenUrl把审批状态拼在查询参数里触发接口,会强制打开新浏览器标签页,不符合无跳转调用的要求

当前使用的webhook请求JSON示例:

{
    "type": "message",
    "attachments": [
        {
            "contentType": "application/vnd.microsoft.card.adaptive",
            "contentUrl": null,
            "content": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.5",
                "msTeams": {
                    "width": "full"
                },
                "actions": [
                    {
                        "type": "Action.OpenUrl",
                        "title": "Approve",
                        "url": "https://<api_endpoint_url>?approved=true"
                    },
                    {
                        "type": "Action.OpenUrl",
                        "title": "Decline",
                        "url": "https://<api_endpoint_url>?approved=false"
                    }
                ]
            }
        }
    ]
}

可行实现方案

普通入站频道连接器webhook本身存在能力限制,原生不支持无跳转POST回调,必须搭配中间层实现需求,两个落地性最强的方案如下:

方案1:基于Action.Submit搭配中间层接口(低代码快速实现)

使用支持Teams提交协议的中间层接收按钮回调,不需要跳转页面,用户点击后Teams会直接在客户端内完成POST请求,仅在消息下方显示提交结果提示。

  • 中间层优先选择Power Automate的HTTP请求触发器:创建即时流,触发器选「当收到HTTP请求时」,配置好需要接收的参数(审批状态、审批单ID等),拿到流的POST地址
  • 把原卡片的Action.OpenUrl动作替换为Action.Submit,在msTeams字段下配置submitUrl为中间层地址,提交数据里直接携带布尔类型的审批状态
  • 中间层收到请求后,再向你的业务API端点转发审批状态即可
  • 如果要直接对接自有业务API,必须给接口配置CORS跨域策略允许Teams域名的请求,同时加签名校验防止接口被恶意调用

动作部分代码示例:

"actions": [
    {
        "type": "Action.Submit",
        "title": "批准",
        "data": {
            "approved": true,
            "requestId": "对应审批单唯一标识"
        },
        "msTeams": {
            "submitUrl": "中间层接口/业务API地址",
            "type": "imBack"
        }
    },
    {
        "type": "Action.Submit",
        "title": "拒绝",
        "data": {
            "approved": false,
            "requestId": "对应审批单唯一标识"
        },
        "msTeams": {
            "submitUrl": "中间层接口/业务API地址",
            "type": "imBack"
        }
    }
]

方案2:基于Teams Bot Framework发送可交互卡片(适合定制化需求高的场景)

如果有开发能力,可以注册Teams自定义Bot或者出站Webhook,通过Bot发送审批卡片:

  • Bot发送的自适应卡片原生支持Action.Execute动作,用户点击按钮后,Teams会直接把携带的审批状态数据POST到你配置的Bot消息接收端点,全程无跳转
  • 收到回调后除了同步状态到业务系统,还可以主动调用接口更新原卡片内容,比如把按钮置灰、显示「已由XXX批准/拒绝」的状态,交互体验更好

注意:不要尝试在普通入站连接器webhook里仅修改卡片JSON实现无跳转提交,这类webhook的动作类型支持列表里没有无跳转POST的能力,所有声称可以直接实现的方法都经过验证不可用。


内容的提问来源于stack exchange,提问作者Georgi Stoyanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:21:34