能否通过webhook或API在Microsoft Teams消息中直接上传本地文件作为附件?
Microsoft Teams发送本地文件附件的可行方案说明
目前不存在完全绕过云存储环节、直接通过普通入站webhook把本地文件作为原生附件上传到Teams消息的方案,所有原生附件的底层存储都依赖微软系的OneDrive/SharePoint服务,但可以通过代码自动化实现和直传一致的使用体验,不需要手动操作云存储。
方案1:使用Microsoft Graph API实现自动化直传效果
该方案可以实现和手动从本地上传完全一致的原生附件显示效果,中间的云存储上传环节完全由代码自动完成,无需手动操作。
具体实现步骤:
- 首先在Azure Active Directory中注册应用,授予
ChatMessage.Send、Files.ReadWrite.All、TeamsAppInstallation.ReadWriteForUser等对应权限,完成管理员同意授权 - 调用Graph API的文件上传接口,把本地文件上传到目标聊天/频道对应的Drive空间(频道消息对应SharePoint站点文档库,私聊/群聊对应聊天绑定的临时Drive),获取到文件的DriveItem ID和资源URL
- 调用发送消息的Graph接口,在attachments字段中填入对应文件信息即可,核心请求示例如下:
{ "body": { "contentType": "html", "content": "这是带附件的测试消息" }, "attachments": [ { "id": "替换为实际获取的DriveItem ID", "contentType": "reference", "contentUrl": "替换为实际的DriveItem资源URL", "name": "你的本地文件名.后缀" } ] }
方案2:普通webhook的折中适配方案
如果仍要使用入站webhook、不想对接Graph API,可以使用自适应卡片嵌入Base64编码文件的方式实现附件效果,该方案仅适用于小于28KB的小型文件(比如小尺寸图片、短文本文件),超过大小会发送失败。
普通webhook无法直接传附件的原因
Teams入站webhook的设计仅支持接收文本、各类消息卡片内容,没有开放文件上传的入站通路,因此原生不支持直接发送附件。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

