附件上傳 API 參考資料

注意:附件編號將在 90 天後過期。附件編號過期後,您需要重新上傳媒體以取得新的附件編號。

雖然可重複使用的附件將在 90 天後過期且無法重新傳送,但訊息對話串中的附件永遠不會過期,且在用戶刪除對話串中的訊息之前都能夠看到。如果您的使用案例允許,您可以合併上傳和傳送步驟(如下所述)以免發生此 TTL 問題。

附件上傳 API 可讓您上傳素材,以供之後透過訊息傳送,而不需要重複上傳常用的檔案。此 API 支援從網址和本機檔案系統儲存素材。

您也可以使用 Send API 來傳送含附件的訊息,並同時儲存附件供之後使用。如需詳細資訊,請參閱以下的上傳和傳送部分。

上傳附件

若要上傳附件,請傳送 POST 要求至 /Your-page-id/message_attachments 端點,並包含具有 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),請傳送 POST 要求至 /Your-page-id/messages 端點並包含 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

上傳附件失敗。觸發此錯誤的常見原因是,所提供的媒體類型與網址中提供的檔案類型不符