MS Teams中Adaptive Cards Templating模板未正常渲染问题问询
MS Teams Adaptive Cards 模板变量未渲染问题解答
你对该功能的理解存在偏差,MS Teams客户端不支持自适应卡片模板的客户端侧变量展开,具体原因和解决方案如下:
- 首先明确Adaptive Cards Templating的设计定位:模板语法、
${}占位符和$data绑定逻辑,是为了方便开发者在服务端批量生成卡片而设计的工具能力,本身不属于Adaptive Cards的标准渲染规范要求,不是所有适配Adaptive Cards的客户端都支持模板解析。 - Teams平台的实现限制:目前Teams的卡片渲染引擎仅能识别标准Adaptive Card结构,不会对负载中的模板占位符做任何解析替换操作,你直接发送带占位符的模板+数据源的组合负载,客户端会原样展示
${form.name}这类占位符内容,和你遇到的异常表现一致。
- 你提交的负载额外存在的小问题:JSON语法不规范,
$data下的form对象末尾多了冗余逗号,虽然这不是导致渲染异常的核心原因,但也可能导致部分客户端解析失败。
正确实现方案
要实现变量填充的效果,你需要在服务端完成模板和数据的合并,再发送最终卡片给Teams,步骤如下:
- 拆分模板和数据源:将卡片模板(不含
$data字段)和业务数据分开维护,示例如下:
模板内容:
{ "$schema" : "http://adaptivecards.io/schemas/adaptive-card.json", "version" : "1.3", "type" : "AdaptiveCard", "body" : [ { "type" : "Container", "style" : "emphasis", "items" : [ { "type" : "Input.Text", "value" : "${form.name}", "id" : "name", "label" : "Name" } ] } ] }
数据源内容:
{ "form" : { "name" : "geoff hurst" } }
- 服务端预渲染:使用Adaptive Cards官方提供的各语言模板SDK,在服务端完成模板与数据的合并,生成最终无占位符的卡片负载,合并后的结果如下:
{ "$schema" : "http://adaptivecards.io/schemas/adaptive-card.json", "version" : "1.3", "type" : "AdaptiveCard", "body" : [ { "type" : "Container", "style" : "emphasis", "items" : [ { "type" : "Input.Text", "value" : "geoff hurst", "id" : "name", "label" : "Name" } ] } ] }
- 发送最终负载:将合并完成的无占位符的JSON发送给Teams,即可正常渲染出填充了值的输入框。
内容的提问来源于stack exchange,提问作者Rob Moffat
相关产品推荐
相关产品推荐

