如何为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
相关产品推荐
相关产品推荐

