附件上传 API 参考文档

注意:附件编号将于 90 天后过期。附件编号过期后,您将需要重新上传素材,才能获取新附件编号。

虽然可重复使用的附件将在 90 天后过期,且无法重新发送,但消息对话中的附件永远不会过期,并且一直可见,直到用户从对话中删除该消息。如果您的用例允许,您可以结合使用上传和发送步骤(如下文所述),以避免出现此生存时间问题。

使用附件上传 API,可以上传以后可通过消息发送的资产。这样,可避免多次上传常用文件。此 API 支持从网址和本地文件系统中保存资产。

此外,还可使用 Send API 同时发送带附件的消息和保存附件,以供日后使用。详情请参阅下方上传并发送部分。

上传附件

如要上传附件,请向 /Your-page-id/message_attachments 端点发送 POST 请求,并在请求中加入包含 typepayloadmessage.attachment。如要在多条消息中使用此资产,请将 payload.is_reusable 设为 true

上传来自网址的附件的请求示例

为方便阅读,示例格式已经过调整。将粗体斜体值(如 page_access_token)替换为您的值。

curl -X POST "https://graph.facebook.com/v21.0/Your-page-id/message_attachments" \
     -H "Content-Type: application/json" \
     -d '{
           "access_token":"Your_page_access_token",
           "message":{
             "attachment":{
               "type":"image", 
               "payload":{
                 "url":"https://your-url.com/image.jpg",
                 "is_reusable": true
               }
             }
           }
         }'

上传来自文件的附件的请求示例

为方便阅读,示例格式已经过调整。将粗体斜体值(如 page_access_token)替换为您的值。

curl -X POST -H "Content-Type: application/json" -d '{
   "message": {
     "attachment": {
       "type": "image"
     }
   },
   "filedata": "@/path-to-your-file/image.jpg",
   "type": "image/png"
  }' "https://graph.facebook.com/v21.0/{PAGE_ID}/message_attachments?access_token={PAGE_ACCESS_TOKEN}"

若请求成功,您的应用将收到 JSON 对象,其中包含 attachment_id,而且该参数已设为要在消息中使用的附件的编号。

{"attachment_id": "Your-attachment-ID"}

发送包含已上传资产的消息

如要发送包含之前已上传的资产(上传时将 message.attachment.payload.is_reusable 设为 true)的消息,请向 /Your-page-id/messages 端点发送 POST 请求,并在请求中加入 recipient.id 以及包含 typepayload.attachment_idmessage.attachment 对象。

上传来自文件的附件的请求示例

为方便阅读,示例格式已经过调整。将粗体斜体值(如 page_access_token)替换为您的值。

curl -X POST -H "Content-Type: application/json" -d '{
    "recipient": {
      "id": "{PSID}"
    },
    "message": {
      "attachment": {
        "type": "image",
        "payload": {
          "attachment_id": "Your-attachment-ID"
        }
      }
    }
  }' "https://graph.facebook.com/v21.0/{PAGE_ID}/messages?access_token={PAGE_ACCESS_TOKEN}"

若请求成功,您的应用将收到 JSON 对象,其中包含 success,而且该参数设为 true

{"success": "true"}

上传并发送

您还可以在单个 API 请求中上传并发送素材。

注意:在这种情况下,请勿在有效负载中设置 is_public=true。用户消息对话中的附件将始终处于私密状态。

上传来自网址的附件的请求示例

为方便阅读,示例格式已经过调整。将粗体斜体值(如 page_access_token)替换为您的值。

curl -X POST -H "Content-Type: application/json" -d '{
   "recipient": {
     "id": "{PSID}"
   },
   "message": {
     "attachment": {
       "type": "image",
       "payload": {
         "url": "https://your-url.com/image.jpg"
       }
     }
   }
  }' "https://graph.facebook.com/v21.0/{PAGE_ID}/messages?access_token={PAGE_ACCESS_TOKEN}"

若请求成功,您的应用将收到 JSON 对象,其中包含 success,而且该参数设为 true

{"success": "true"}

属性

对于网址中的附件,请在请求正文中提供以下属性作为 JSON 对象。对于文件中的附件,请以表单数据形式发送属性。

message

Description of the message to be sent.
Property Type Description

message.attachment

Object

An object describing attachments to the message.

message.attachment

属性 类型 描述

type

字符串

附件的类型。必须是以下其中一种类型:

  • 图片
  • 视频
  • 音频
  • 文件

payload

对象

payload 对象,用于描述附件。

message.attachment.payload

属性 类型 描述

url

字符串

非必要。要上传文件的网址。图片的文件大小不得超过 8MB,其他所有文件类型(编码后)的文件大小不得超过 25MB。视频的超时设置为 75 秒,其他所有文件类型的超时设置为 10 秒。

is_reusable

布尔值

可选,默认为 false。如果您通过单个 API 调用上传并发送素材,请勿将其设为 true

在您分步骤上传并发送素材时将其设为 true。附件编号将于 90 天后过期。90 天后,请重新上传素材,以获取新附件编号。

虽然可重复使用的附件将在 90 天后过期,且无法重新发送,但消息对话中的附件永远不会过期,并且一直可见,直到用户从对话中删除该消息。

错误代码

错误代码子代码消息

100

2018074

编号可能无效,或者此附件不归您个人所有。

100

2018008

从网址获取文件失败。请检查网址是否有效,SSL 证书是否有效,文件大小是否有效,以及服务器的响应速度是否很快,足以避免超时。

100

2018294

视频上传超时或视频已损坏。请注意,如果在 75 秒内无法获取视频,则会超时

100

2018047

上传附件失败。通常,触发此错误的原因是提供的素材类型与网址中所提供文件的类型不一致