注意:附件编号将于 90 天后过期。附件编号过期后,您将需要重新上传素材,才能获取新附件编号。
虽然可重复使用的附件将在 90 天后过期,且无法重新发送,但消息对话中的附件永远不会过期,并且一直可见,直到用户从对话中删除该消息。如果您的用例允许,您可以结合使用上传和发送步骤(如下文所述),以避免出现此生存时间问题。
使用附件上传 API,可以上传以后可通过消息发送的资产。这样,可避免多次上传常用文件。此 API 支持从网址和本地文件系统中保存资产。
此外,还可使用 Send API 同时发送带附件的消息和保存附件,以供日后使用。详情请参阅下方上传并发送部分。
如要上传附件,请向 /
Your-page-id
/message_attachments
端点发送 POST
请求,并在请求中加入包含 type
和 payload
的 message.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
以及包含 type
和 payload.attachment_id
的 message.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
Property | Type | Description |
---|---|---|
| Object | An object describing attachments to the message. |
message.attachment
属性 | 类型 | 描述 |
---|---|---|
| 字符串 | 附件的类型。必须是以下其中一种类型:
|
| 对象 |
|
message.attachment.payload
属性 | 类型 | 描述 |
---|---|---|
| 字符串 | 非必要。要上传文件的网址。图片的文件大小不得超过 8MB,其他所有文件类型(编码后)的文件大小不得超过 25MB。视频的超时设置为 75 秒,其他所有文件类型的超时设置为 10 秒。 |
| 布尔值 | 可选,默认为 false。如果您通过单个 API 调用上传并发送素材,请勿将其设为 仅在您分步骤上传并发送素材时将其设为 true。附件编号将于 90 天后过期。90 天后,请重新上传素材,以获取新附件编号。 虽然可重复使用的附件将在 90 天后过期,且无法重新发送,但消息对话中的附件永远不会过期,并且一直可见,直到用户从对话中删除该消息。 |
错误代码 | 子代码 | 消息 |
---|---|---|
100 | 2018074 | 编号可能无效,或者此附件不归您个人所有。 |
100 | 2018008 | 从网址获取文件失败。请检查网址是否有效,SSL 证书是否有效,文件大小是否有效,以及服务器的响应速度是否很快,足以避免超时。 |
100 | 2018294 | 视频上传超时或视频已损坏。请注意,如果在 75 秒内无法获取视频,则会超时 |
100 | 2018047 | 上传附件失败。通常,触发此错误的原因是提供的素材类型与网址中所提供文件的类型不一致 |