如何使用Microsoft Bot Framework发送带图片的富文本消息
解决方案
以下是经过实测可行的3种实现方案,你可以根据自己的业务需求选择:
方案1:使用自适应卡片(最推荐,排版可控性最高)
Teams对自适应卡片的支持度最高,可以完全按照你需要的顺序排布文本、图片等元素,实现任意富文本效果。操作方法如下:
在发送的Activity对象中添加类型为application/vnd.microsoft.card.adaptive的附件,在卡片的body字段中按你需要的顺序添加TextBlock(文本元素)和Image(图片元素)即可,示例结构如下:{ "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card-1.4.json", "version": "1.4", "body": [ { "type": "TextBlock", "text": "aaaaa" }, { "type": "Image", "url": "https://ichef.bbci.co.uk/news/976/cpsprodpb/C448/production/_117684205_lotus.jpg", "altText": "test" } ] }这种方式可以完美实现你预期的按特定顺序混排图文的需求,支持插入多张图片、多段文本任意排列。
方案2:使用HTML格式消息
如果你不想引入自适应卡片,也可以直接用HTML标签实现图文混排,需要做两个修改:- 将Activity的
textFormat属性设置为html text字段内容用HTML标签编写,用<img>标签插入图片,示例如下:
<p>aaaaa</p> <img src="https://ichef.bbci.co.uk/news/976/cpsprodpb/C448/production/_117684205_lotus.jpg" alt="test">这种方式实现简单,但是排版调整的灵活度不如自适应卡片。
- 将Activity的
方案3:修复Markdown格式问题实现解析
你之前使用的Markdown无法解析是因为Teams自带的Markdown解析器存在限制,调整两个配置即可:- 将Activity的
textFormat属性明确设置为markdown - 去掉Markdown图片语法中的title字段,Teams解析器对带title的内联图片支持存在缺陷,修改后示例如下:
aaaaa注意:这种方式对图片域名有要求,如果图片域名被Teams安全策略拦截仍然无法显示,优先使用前两种方案。
- 将Activity的
通用注意事项:所有方案中使用的图片链接都必须是公网可直接访问、无需身份验证的资源,否则Teams客户端无法拉取资源会显示裂图。
内容的提问来源于stack exchange,提问作者Zhongwei Xu
相关产品推荐
相关产品推荐

