You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Meta Messenger Send API的file类型附件设置自定义文件名?

问题:通过Messenger API发送文件附件时自定义文件名

我正在通过Meta Messenger API编程发送消息,目前能正常发送带附件和不带附件的消息,但发送file类型附件时遇到问题:API调用成功,但无法自定义附件文件名。当前API会自动从附件URL中提取文件名,而我的文件存储在Azure Blob Storage,以GUID命名,真实文件名存储在Content-Disposition的filename字段中。如何设置才能让Messenger收件人在消息线程中看到正确的文件名?

示例API调用:

https://graph.facebook.com/v16.0/{fb.PageId}/messages?recipient={'id':'{psid}'}&messaging_type=RESPONSE&message={'attachment':{'type':'file','payload':{'url':'{HttpUtility.UrlEncode(blobClient.Uri.ToString() + token)}','is_reusable':true}}}&access_token={fb.PageToken}

解决方案

方法1:使用Attachment Upload API预上传附件

绕过直接引用Azure Blob URL的方式,先通过Attachment Upload API上传文件并指定文件名:

  • 调用Attachment Upload API时,在请求中包含文件二进制内容,同时在请求头的Content-Disposition中设置filename="你的真实文件名",或在表单数据里指定filename参数。
  • 上传成功后会返回一个attachment_id。
  • 调用Send API时,将payload中的url替换为这个attachment_id,Messenger会显示你指定的文件名。

方法2:修正Azure Blob的Content-Disposition设置

如果不想使用预上传,需确保Messenger能正确读取到Blob的Content-Disposition头:

  • 为Azure Blob设置Content-Disposition: attachment; filename="你的真实文件名"。
  • 检查Blob的SAS令牌权限,确保Messenger的服务器能读取到该响应头(部分SAS配置可能会限制头信息的获取)。
  • 若修改后未生效,可更换Blob的URL或更新SAS令牌有效期,触发Messenger重新获取文件信息(避免缓存影响)。

内容的提问来源于stack exchange,提问作者Yehia A.Salam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:44:57