Teams自适应卡片(Bot Framework)渲染特定SQL内容时出现渲染错误
Teams自适应卡片渲染报错:Error encountered while rendering this message 问题分析与解决
该问题已被确认为官方Bug,目前处于跟踪处理状态。
问题现象
使用Bot Framework渲染自适应卡片时,Teams会弹出“Error encountered while rendering this message”错误,无额外错误详情,仅在渲染包含特定SQL查询的卡片时触发。
触发场景示例
触发错误的SQL查询:
"SELECT COUNT(DISTINCT VisitorId) AS UniqueVisitors FROM sitedata WHERE eventdate>='2023-08-01' AND eventdate<'2023-08-08' AND Site =='foo.bar.com' AND Url RLIKE '^http?s://foo.bar.com/([^/]*)/answers/?'"
经测试,末尾带有 AND的SQL会直接触发渲染失败:
"SELECT COUNT(DISTINCT VisitorId) AS UniqueVisitors FROM sitedata WHERE eventdate>='2023-08-01' AND"
移除末尾的 AND后,卡片可正常渲染:
"SELECT COUNT(DISTINCT VisitorId) AS UniqueVisitors FROM sitedata WHERE eventdate>='2023-08-01'"
现有实现代码
C#渲染逻辑
var cardContent = new AdaptiveCardTemplate(cardTemplate).Expand( new { Query = sql } ); var replyActivity = MessageFactory.Attachment ( new Attachment { ContentType = "application/vnd.microsoft.card.adaptive", Content = JsonConvert.DeserializeObject(cardContent), } ); await turnContext.SendActivityAsync(replyActivity);
自适应卡片JSON片段
{ "type": "TextBlock", "text": "${query}", "wrap": true, "fontType": "Monospace", "color": "Dark", "horizontalAlignment": "Left", "separator": true }
临时解决办法
通过WebUtility.HtmlEncode(sql)对SQL内容进行HTML编码后再传入模板,可规避渲染错误。
问题根源
Teams的自适应卡片渲染引擎默认会尝试解析TextBlock文本中的富文本语法(如Markdown),当SQL文本中包含特定字符组合(如末尾的 AND、正则表达式符号、单引号等)时,会触发渲染器的语法解析错误,导致卡片无法正常显示。
正确解决方案
- 修改自适应卡片配置:在TextBlock节点中添加
"escape": true属性,强制渲染器对文本进行转义,避免解析富文本语法:
{ "type": "TextBlock", "text": "${query}", "wrap": true, "fontType": "Monospace", "color": "Dark", "horizontalAlignment": "Left", "separator": true, "escape": true }
- 等待官方修复:该问题已被官方标记为Bug,后续可关注官方修复进度,修复后可移除临时转义逻辑。
内容的提问来源于stack exchange,提问作者Krumelur
相关产品推荐
相关产品推荐

