Microsoft Teams切换至新版后AdaptiveCard图片无法显示问题
New Teams中AdaptiveCard内嵌S3图片无法显示的问题排查与解决
问题场景
切换至New Teams后,通过Amazon S3存储的PNG图片以AdaptiveCard(版本1.5)形式发送到Teams频道时无法显示,但旧版Teams显示正常。核心实现代码如下:
headers = {'Content-Type': 'application/json'} sendTeams = { "type": "message", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.5", "body": [ { "type": "Image", "url": "https://" + getattr(settings, "S3_BUCKET", None) + "/teams/" + '20230101'+ ".png", "size": "Large", "height": "1500px" } ] } } ] } json_api = json.dumps(sendTeams) _teams = "Sample WebHook Address..." # 示例WebHook地址 res = requests.post(_teams, data=json_api, headers=headers)
问题根源
- 属性校验逻辑差异:New Teams对AdaptiveCard的渲染规则比旧版更严格,代码中设置的
1500px固定高度属于极端值,超出了New Teams渲染引擎的容错范围,导致图片加载失败;旧版Teams对该属性的限制更宽松。 - 版本适配问题:虽然AdaptiveCard 1.5是稳定版本,但New Teams对高版本(1.6+)的适配度更好,部分1.5版本的属性在New Teams中存在解析异常。
- S3跨域/权限限制:New Teams的安全策略更严格,若S3存储桶未配置允许Teams域名访问的CORS规则,或图片URL存在权限不足、签名过期的情况,会被New Teams拦截加载。
解决方案
调整图片高度属性
移除或修改过于极端的固定高度值,改用自适应配置:
# 修改后的Image组件 { "type": "Image", "url": "https://" + getattr(settings, "S3_BUCKET", None) + "/teams/" + '20230101'+ ".png", "size": "Large", "height": "auto" # 改用自适应高度,或设置合理的固定值如"500px" }
升级AdaptiveCard版本
将AdaptiveCard版本升级到1.6及以上,提升与New Teams的兼容性:
# 修改AdaptiveCard版本字段 "version": "1.6"
配置S3存储桶CORS规则
确保S3存储桶允许Teams域名的GET请求访问,示例CORS配置:
{ "CORSRules": [ { "AllowedOrigins": ["https://teams.microsoft.com"], "AllowedMethods": ["GET"], "AllowedHeaders": ["*"] } ] }
同时确认图片URL的有效性:确保图片公开可读,或使用的签名URL未过期且权限足够。
改用Teams内部存储(可选)
若S3配置问题持续,可通过Graph API将图片上传至团队文件库,使用内部URL嵌入AdaptiveCard,规避跨域和权限问题。
内容的提问来源于stack exchange,提问作者key_96
相关产品推荐
相关产品推荐

