添付ファイルアップロードAPIのリファレンス

注意: 添付IDは90日後に有効期限が切れます。添付IDの有効期限が切れた後は、新しい添付IDを取得するためにメディアを再アップロードする必要があります。

再利用可能な添付ファイルは90日後に期限が切れて再送信できなくなりますが、メッセージスレッドの添付ファイルは期限切れになることはなく、ユーザーがスレッドからメッセージを削除するまで表示されます。ユースケースによっては、以下に示すようにアップロードと送信の手順を組み合わせることで、このTTLの問題を回避できます。

添付ファイルアップロードAPIを使用してアセットをアップロードすれば、後からそれをメッセージで送信できます。これにより、よく使用するファイルを何度もアップロードする必要がなくなります。このAPIは、URLのアセットの保存とローカルファイルシステムのアセットの保存をサポートしています。

Send APIを使用して、添付ファイル付きのメッセージの送信と、後から使うための添付ファイルの保存を同時に行うこともできます。詳細については、以下の アップロードして送信のセクションをご覧ください。

添付ファイルをアップロードする

添付ファイルをアップロードするには、typepayloadmessage.attachmentを指定したPOSTリクエストを、/Your-page-id/message_attachmentsエンドポイントに送信してください。複数のメッセージでアセットを使用するには、payload.is_reusabletrueに設定してください。

URLからのアップロードリクエストの例

読みやすいようにフォーマットしています。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}"

成功すると、メッセージで使用する添付ファイルのIDに設定されたattachment_idのJSONオブジェクトがアプリに送信されます。

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

アップロード済みのアセットを付けてメッセージを送信する

過去にアップロードしたアセット(message.attachment.payload.is_reusabletrueに設定してアップロードされたもの)を付けてメッセージを送信するには、POSTリクエストをrecipient.idを指定して/Your-page-id/messagesに、typepayload.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}"

成功すると、アプリはsuccesstrueに設定されたJSONオブジェクトを受け取ります。

{"success": "true"}

アップロードして送信

1回のAPIリクエストで、メディアのアップロードと送信が可能です。

注意:この場合、ペイロードでis_public=trueを設定しないでください。ユーザーのメッセージスレッドの添付ファイルは常に非公開です。

URLからのアップロードリクエストの例

読みやすいようにフォーマットしています。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}"

成功すると、アプリはsuccesstrueに設定されたJSONオブジェクトを受け取ります。

{"success": "true"}

プロパティ

URLから添付する場合は、リクエスト本文に次のプロパティを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

文字列

任意。アップロードするファイルのURL。最大ファイルサイズ: 画像は8 MB、その他のファイルタイプは25 MB (エンコーディング後)。タイムアウト: 動画は75秒、その他のファイルタイプは10秒。

is_reusable

ブーリアン

オプション。デフォルトはfalseです。1回のAPI呼び出しでアップロードして送信する場合は、trueに設定しないでください。

アップロードと送信を別々の手順で実行する場合にのみtrueに設定します。添付IDは90日後に有効期限切れになります。90日後に新しい添付IDを取得するには、メディアを再アップロードしてください。

再利用可能な添付ファイルは90日後に期限が切れて再送信できなくなりますが、メッセージスレッドの添付ファイルは期限切れになることはなく、ユーザーがスレッドからメッセージを削除するまで表示されます。

エラーコード

エラーコードサブコードメッセージ

100

2018074

無効なIDの可能性、または添付ファイルの所有権がない。

100

2018008

URLからファイルのフェッチに失敗。URLが有効であること、有効なSSL証明書があること、有効なファイルサイズであること、タイムアウトを避けるためにサーバーが十分な速さで応答していることを確認してください。

100

2018294

動画のアップロードがタイムアウトしたか、動画が壊れています。動画を75秒以内にフェッチできない場合は、タイムアウトになりますのでご注意ください

100

2018047

添付ファイルのアップロードの失敗。このエラーのよくある原因は、提供されたメディアタイプがURLで指定されたファイルタイプと一致しないことです。