如何修改QnA后续提示样式?Teams中QnA格式失效问题咨询
解决Teams中QnA带后续提示时格式失效的问题
我之前也碰到过一模一样的情况——QnA里设置的粗体、换行这类格式,在机器人单纯回复文本时正常生效,但一加上后续提示,Teams就自动把内容转成英雄卡片,格式直接失效。结合你的场景,给你几个可行的解决思路:
1. 改用自适应卡片(Adaptive Cards)渲染回复
自适应卡片原生支持Markdown格式,完全可以替代默认的英雄卡片。你有两种实现方式:
- 直接在QnA Maker里定义卡片:在QnA的回复内容里,直接粘贴自适应卡片的JSON代码,把需要格式化的内容放进
TextBlock组件,同时把后续提示做成卡片的Action.Submit按钮。示例代码如下:
{ "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "text": "这是**需要加粗**的内容,\n\n这里是换行后的文本", "wrap": true, "size": "Medium" } ], "actions": [ { "type": "Action.Submit", "title": "后续提示选项1", "data": "对应提示的触发关键词" }, { "type": "Action.Submit", "title": "后续提示选项2", "data": "对应提示的触发关键词" } ] }
- 在机器人代码中拦截转换:如果不想修改QnA的原始内容,可以在代码里获取QnA回复后,手动构造自适应卡片,把原回复的Markdown内容和提示按钮整合进去。
2. 手动构造带建议操作的纯文本回复
如果你更偏好纯文本格式,也可以绕过Teams自动生成英雄卡片的逻辑,自己构造消息:
在机器人处理QnA回复的代码里,先检查是否有后续提示,然后把回复内容以Markdown格式发送,同时把后续提示作为「建议操作」(Suggested Actions)添加到消息底部,而非依赖QnA的自动转换。举个C#的示例:
// 获取QnA的回复结果 var qnaAnswers = await _qnaMaker.GetAnswersAsync(turnContext); if (qnaAnswers.Any()) { var firstAnswer = qnaAnswers.First(); // 构造带Markdown格式的纯文本消息 var replyMessage = MessageFactory.Text(firstAnswer.Answer, null, InputHints.AcceptingInput); // 如果有后续提示,添加为建议操作按钮 if (firstAnswer.Context?.Prompts != null && firstAnswer.Context.Prompts.Any()) { replyMessage.SuggestedActions = new SuggestedActions { Actions = firstAnswer.Context.Prompts .Select(prompt => new CardAction(ActionTypes.ImBack, prompt.DisplayText, value: prompt.DisplayText)) .ToList() }; } await turnContext.SendActivityAsync(replyMessage); }
这样发送的消息会保留纯文本的Markdown格式,后续提示则以底部按钮的形式展示,不会触发英雄卡片的转换。
3. 确认Teams版本兼容性
你当前使用的Teams版本1.2.00.27559(64位)是支持自适应卡片和Markdown格式的,所以上面的方案都能正常运行,不用版本兼容方面的顾虑。
内容的提问来源于stack exchange,提问作者Xavi Andreu
相关产品推荐
相关产品推荐

