Facebook Business Extension (FBE)を使用すると、新規または既存のビジネスマネージャと接続することにより、Metaが提供するアプリ全体にわたって簡単にクリエイティブアセットをアップロードすることができます。このフローの完了後に返されるビジネスマネージャを使用すれば、パートナーがクライアントに代わってクリエイティブアセットをFacebookにアップロードすることが可能です。
このドキュメントでは、FBEクリエイティブフローの主要な前提条件と、プロセスを完了するために必要な手順について説明します。統合全体の詳細については、「Facebook Business Extensionガイド」をご覧ください。
例: パートナーサーフェス(ビジネスログイン)からのオンボーディングフロー
Facebook開発者として登録します。これにより、Facebookの開発者ツールにアクセスして、Facebookアプリを作成できるようになります。
Metaアプリを作成します(まだ作成していない場合)。
Metaアプリは、認証済みビジネスであるビジネスマネージャが所有するアプリでなければなりません。詳しくは、ビジネスの認証方法をご覧ください。
テストアプリを作成し、それを使用してすべての新しい開発とテストを実施します。テストアプリには別のビジネスマネージャを割り当てるようにしてください。
プライベート権限/機能:
Business_creative_asset_management
— クリエイティブ関連のアセット管理APIへのアクセス。この機能を付与されると、次の権限を使用できるようになります。
business_creative_insights
: ビジネスクリエイティブアセットインサイトにアクセスします。
business_creative_management
: 自分のビジネスエンティティのコンテキスト内で、新しいフォルダーの作成、編集、共有、およびフォルダーへのアセットのアップロードを可能にします。
business_creative_insights_share
(開発中): フォルダー共有フローで使用される任意の権限です。ユーザーからこの権限を付与されると、アプリはクリエイティブフォルダーを他のビジネスと共有することができ、クリエイティブアセットのインサイトを他のビジネスが閲覧できるようになります。
パートナーアクセストークンを生成します。
以下の手順に従って、ビジネスマネージャの下に管理者システムユーザーアクセストークンを生成します。
このトークンの「利用可能なスコープ」ステップで、business_creative_insights
、business_creative_management
、business_management
の権限が選択されていることを確認してください。
このボタンは、アプリからユーザーのFacebookメディアライブラリにアセットを送信するために使用されます。このプロセスにおいて、アプリはユーザーがアセットの送信先フォルダーを選択または作成できるようにする必要があります。
これには以下の2つの方法をおすすめします。
1. (最小設定)トップレベルフォルダーを選択または作成するオプションのみをユーザーに提供する。選択したビジネスコンテキスト内で、ユーザーがアクセスできるすべてのトップレベルフォルダーを照会します。ユーザーに、既存のトップレベルフォルダーを選択するか、新しいフォルダーを作成するよう求めます。ユーザーは、フォルダー名を指定するか、デフォルトのフォルダー名<YourBusinessName>_<UserBusinessName>_<UserName>
を使用することができます。選択、あるいは新規作成したトップレベルフォルダーにアセットをアップロードします。この方法では、必要なUI作業を最小限に抑えられます。APIの詳細は、以下のステップ3をご覧ください。
2. (任意) ユーザーに、フォルダーとサブフォルダーのナビゲーションに関する全権限を付与する。選択したビジネスコンテキスト内で、ユーザーがアクセスできるすべてのトップレベルフォルダーを照会し、既存のトップレベルフォルダーを選択するか、新しいフォルダーを作成するようユーザーに求めます。新しいフォルダーの場合は、自分でフォルダー名を決めるか、デフォルトの名前<YourBusinessName>_<UserBusinessName>_<UserName>
を使用するようユーザーに求めます。選択したトップレベルフォルダー内では、既存のサブフォルダーへの移動、サブフォルダーの新規作成、またはアセットのアップロードのどれかを選ぶことができます。このオプションでは、UIにフォルダーナビゲーションを実装する必要があります。API統合の手順は、以下のステップ3とステップ4をご覧ください。
このフローを実装するために必要な具体的な手順は、以下のとおりです。
ユーザーがクリエイティブアセットを初めてFacebookに送信する際には、Facebook Business拡張機能でユーザーに認証を求め、必要な権限とアセットへのアクセス権をアクセストークンの形でアプリに付与して、Facebook上のデータにアクセスできるようにする必要があります。Facebook Business拡張機能をアプリに実装するには、「Facebook Business拡張機能: 作業を始める」をご覧ください。ビジネスアプリガイドに従って、アプリがビジネスアプリで表示されるようにします。
クリエイティブフローのプロンプトを以下のように設定します。
business_creative_management
とbusiness_creative_insights
の権限を使用します。
business_creative_insights_share
権限を使用します。
VIEW_INSIGHTS
タスク権限が設定されたフォルダーを共有できるようになります。このプロンプトから返されたユーザーアクセストークンを使用して、ユーザーの代わりにAPI呼び出しを行うことができます。
フィールド | 型 | 説明 |
---|---|---|
| setup | 必須 販売者のFacebookセットアップ。一意の識別情報( |
| business_config | 必須 Facebook Business ExtensionがFacebook Business Extensionワークフローを構成するために使用する構成オブジェクト。 |
| ブーリアン | 必須 この値は |
このオブジェクトを使用して、エンドユーザーのFacebookプレゼンスの設定を定義します。
フィールド | 説明 |
---|---|
| 必須。 |
| 必須。 |
| 必須。 |
| 必須。 |
| 必須。
|
| 任意。 |
このオブジェクトを使用して、エンドユーザーのビジネス設定を構成します。これにはCTAやサービスカードなどが含まれます。各フィールドにある「型」は、下記の対応する表にリンクしています。
フィールド | 説明 |
---|---|
| 必須。 |
このオブジェクトを使用してビジネスの名前を構成します。
フィールド | 説明 |
---|---|
| 必須。 |
ユーザーが上記のFBEオンボーディングフローを終えると、FBEインストールAPIまたはWebhook通知のいずれかから、ユーザーのビジネスマネージャIDとアクセストークンが送られます。
ユーザーは、トップレベルフォルダーにアセットをアップロードしたり、トップレベルフォルダーの下にサブフォルダーを作成したりすることができます。
まず、<business_id>/creative_folders
エンドポイント(開発中)にリクエストを行うことで、ユーザーがCREATE_CONTENT
タスクに関して権限を持っているトップレベルフォルダーを確認します。
リクエスト
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<user_business_id>/creative_folders?filtering=[{field:"permitted_tasks", operator: "EQUAL", value:"create_content"}]
応答
{ "id": "<folder_id>" }
ユーザーのビジネスマネージャのコンテキスト内で、既存のトップレベルフォルダーを選択するか、新しいトップレベルフォルダーを作成するようユーザーに求めます。新しいトップレベルフォルダーの場合は、自分でフォルダー名を決めるか、デフォルトで<YourBusinessName>_<UserBusinessName>_<UserName>
を使用することができます。ユーザーがフォルダーを共有した場合、このフォルダーがFacebookアセットライブラリで自分のビジネスとユーザーのビジネスの両方に表示されます。
注: ユーザーのビジネス名は、{business-id}
エンドポイントにGET
リクエストを行うことで取得できます。{business-id}
はユーザーのビジネスIDです。
リクエスト
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>
応答
{ "id": {business-id} "name": {user-business-name} }
リクエスト
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
応答
{ "id": {top-level-folder-id} }
完全なフォルダーナビゲーションフローをサポートしたい場合は、以下のリクエストで、トップレベルフォルダーの下で既存のサブフォルダーを選択するか、新しいサブフォルダーを作成するようユーザーに求めます。
business_creative_management
権限が必要リクエスト
curl -X GET \ -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<parent_folder_id>/subfolders?fields=name
応答
{ "data": [ { "name": "<subfolder_name>", "id": "<subfolder_id>" } ] }
business_creative_management
権限が必要リクエスト
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F "parent_folder_id={parent-folder-id}" -F 'access_token={user-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
応答
{ "id": {sub-folder-id} }
<folder_id>
または<subfolder_id>
エンドポイントにDELETE
リクエストを送信することで、フォルダーとサブフォルダーを削除することができます。
ユーザーのクリエイティブアセットをサブフォルダーにアップロードします。
business_creative_management
権限が必要リクエスト
curl -X POST \ -F 'bytes={image-content-in-bytes-format}' \ -F 'name={image-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ https://graph.facebook.com/{version}/{business-id}/images
応答
{ "images":{ "{image-name}":{ "id":"{business-creative-image-id}", "hash":"{hash}", "url":"{image-url}" } } }
数メガバイト以下の動画は1回のリクエストでアップロードし、それ以外は分割してアップロードします(次のセクションをご覧ください)。動画アップロードのAPI呼び出しは、graph.facebook.com
ではなく、graph-video.facebook.com
で行います。
例 — {business-id}/video
にPOST
を送信し、動画の名前、ソース、サブフォルダーIDを含めます。
リクエスト
curl -X POST \ -F 'name={video-name}' \ -F 'source='@{video-path}'' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ https://graph-video.facebook.com/{version}/{business-id}/videos
応答
{ "success": true, "business_video_id": "<business_video_id>" }
大きなサイズの動画をアップロードする場合は、1つの開始リクエスト、1つまたは複数の転送リクエスト、1つの終了リクエストを送信します。
開始リクエストを行い、ビデオのアップロードセッションを作成するには、/{business-id}/videos
にPOST
リクエストを送信し、upload_phase
フィールドをstartに設定して、file_size
にバイト数を指定します。
リクエスト
curl -X POST \ -F 'title={video-name}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'access_token={user-access-token}' \ -F 'upload_phase=start' \ -F 'file_size={video_file_size_in_bytes}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
応答
{ "upload_session_id": "{session-id}", "video_id": "{video-id}", "start_offset": "0", "end_offset": "52428800" }
動画の[0, 52428800]をアップロードするには、開始オフセットと終了オフセットに従ってファイルをチャンクに分割してから、転送リクエストでそれぞれのチャンクを送信します。Facebookからチャンクごとに新しいオフセットが送信されるので、この新しいオフセットを使用して各チャンクをアップロードしてください。
例: 最初のチャンクの送信
リクエスト
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'upload_phase=transfer' \ -F 'upload_session_id={session-id}' \ -F 'start_offset=0' \ -F 'video_file_chunk=@{binary-chunk-filename}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
応答
成功した場合、Facebookが次のチャンクのオフセットを応答で返します。
{ "start_offset": "52428800", //Start byte position of the next file chunk "end_offset": "104857601" //End byte position of the next file chunk }
範囲が[52428800, 104857601]の2番目のチャンクをファイルから切り取ってアップロードし、送信します。
リクエスト
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={subfolder-id}' \ -F 'upload_phase=transfer' \ -F 'start_offset=52428801' \ -F 'upload_session_id={your-upload-sesson-id}' \ -F 'video_file_chunk={binary-chunk-filename}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
応答
start_offset
とend_offset
が等しくなるまで、追加のチャンクをすべて送信します。
{ "start_offset": "152043520", "end_offset": "152043520" }
上記の応答は、ファイル全体がアップロードされたことを意味します。次に、この動画を投稿し、アップロードセッションを閉じる必要があります。
リクエスト
curl -X POST \ -F 'title={video-name}' \ -F 'access_token={user-access-token}' \ -F 'creative_folder_id={business-creative-folder-id}' \ -F 'upload_phase=finish' \ -F 'upload_session_id={session-id}' \ https://graph-video.facebook.com/<API_VERSION>/<BUSINESS_ID>/videos
アップロード中にエラーが発生した場合、そのチャンクのアップロードを再試行することができます。通常、エラーは応答の問題に起因します。失敗したチャンクのアップロードを再試行してください。エラーについて詳しくは、次をご覧ください。
アプリは、アップロードが成功したことをユーザーに通知し、[Facebookアセットライブラリでクリエイティブを表示]コールトゥアクションの後ろに、このクリエイティブへのディープリンクを提示します。フォルダーまたはアセットのディープリンクは次のとおりです。
https://business.facebook.com/asset_library/business_creatives/?object_id={asset_id or folder id}
(開発中)
ユーザーが複数のビジネスマネージャを持っている場合、このリンクによりビジネス選択ページが開きます。ビジネスの曖昧さを取り除くため、以下のようにURL内にビジネスコンテキストを含めることができます。
https://business.facebook.com/asset_library/business_creatives/?object_id={asset_id or folder id}&business_id={client_business_id}
ディープリンクのURLは、エンドポイントでGET
リクエストをすることでも取得できます。
curl -X GET \ /<folder_id or asset_id> ?fields=['media_library_url'] &access_token=<user_access_token>
このリンクによって、ユーザーはFacebookのアセットライブラリにあるフォルダーやアセットに直接アクセスできます。
フォルダーを管理したり、アセットのインサイトを見ることができるようにするため、トップレベルフォルダーの共有をリクエストできます。{business-creative-folder-id}/agencies
にPOST
リクエストを送信し、permitted_tasks
をCREATE_CONTENT
に割り当てます。
注: ユーザーがアプリにbusiness_creative_insights_share
を付与している場合は、VIEW_INSIGHTS
の許可タスクを割り当てることもできます(開発中)。
business_creative_management
権限が必要リクエスト
curl -X POST \ -F 'permitted_tasks=['CREATE_CONTENT','VIEW_INSIGHTS']' \ -F 'business={partner-business-id} ' \ -F 'access_token={user-access-token}' https://graph.facebook.com/<API_VERSION>/<BUSINESS_CREATIVE_FOLDER_ID>/agencies
応答は、ユーザーのビジネス組織における役割に応じて、2つのタイプのいずれかになります。
APIは、ユーザービジネスとクライアントビジネスの間にパートナーシップ契約を確立します。
応答
ユーザービジネスとお客様のビジネスの間にパートナーシップ契約が確立されている場合(ユーザービジネスからフォルダーが共有され、共有リクエストを受け入れている場合):
{ "success": true }
ユーザービジネスからの共有リクエストをまだ受け入れていない場合:
{ "success": true, "share_status": "In Progress" }
このシナリオでは、共有によって有効になるすべての機能(表示、作成など)にアクセスできるようになる前に、ユーザービジネスからの共有リクエストを受け入れる必要があります。
承認待ちのパートナーシップ契約を一覧表示するには、パートナーアクセストークンを使用して{business-id}/received_sharing_agreements
にリクエストを送信し、request_status
をIN_PROGRESS
に設定します。このアクションには、business_creative_management
およびbusiness_management
の権限が必要です。
パートナーシップ契約をすべて表示
リクエスト
curl -i -X GET https://graph.facebook.com/<API_VERSION>/<PARTNER_BUSINESS_ID>/received_sharing_agreements ?request_status=IN_PROGRESS &access_token={partner-access-token}"
business_sharing_agreement_request_id
にPOST
を送信し、request_status
をAPPROVE
に設定することで、共有リクエストを受け入れることができます。これは、自分のビジネスに対して、誰かが初めてフォルダーを共有した時にのみ実行する必要があります。このアクションにはbusiness_management
権限が必要です。
パートナー契約の受け入れ
リクエスト
curl -X POST \ -F 'request_status=APPROVE' \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_SHARING_AGREEMENT_REQUEST_ID>
応答
{ "success": true }
また、保留中の共有リクエストをビジネスマネージャUIで承認することもできます。ビジネスマネージャで保留中のリクエストを見るには、[設定] > [リクエスト] > [受け取ったリクエスト]から、リクエストの詳細情報を確認できます。
APIは、ビジネス管理者に対してリクエスト承認を求めるメール通知を送信するため、通知ワークフローをトリガーします。
応答
{ "success": true, "share_status": "Pending" }
これに対応して、アプリはユーザーに次のことを通知します。
ユーザーのビジネスで開始された保留中の契約をすべて表示するには、{business-id}/attempted_sharing_agreements
にリクエストを送信し、request_status
をIN_PROGRESS
に設定し、requesting_business_id
をユーザーのビジネスマネージャIDに設定します。このアクションには、business_creative_management
およびbusiness_management
の権限が必要です。
保留中のフォルダー共有契約をすべて表示
リクエスト
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<PARTNER_BUSINESS_ID>/attempted_sharing_agreements ?request_status=IN_PROGRESS &requesting_business_id=<user_business_id> &access_token={partner-access-token}
リクエストIDを持つ保留中のフォルダー共有契約をすべて表示
また、リクエストIDがわかっている場合は、{request_id}
にリクエストを送信することで、ステータスを直接取得することができます。
business_creative_management
権限が必要リクエスト
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<REQUEST_ID>?fields=status
ビジネス管理者がリクエストを承認すると、ステータスがAPPROVE
に変わり、ユーザーのビジネスと自分のビジネスが共有契約の関係を確立している場合(ユーザービジネスからフォルダーが共有され、共有リクエストを受け入れた場合)は、フォルダーが自分のビジネスマネージャに共有されます。それ以外の場合は、share_status
がIN_PROGRESS
に更新されます。IN_PROGRESS
ステータスのパートナーシップ契約をすべて表示し、APIまたはビジネスマネージャUIで受け入れることができます。
VIEW_INSIGHTS
タスクの権限とともに、フォルダーがユーザーから共有されている場合、<business_asset_id>/insights
エンドポイントにGET
リクエストを行うことで、共有フォルダー内のビジネス画像や動画のインサイトを読むことができます。
business_creative_management
とbusiness_creative_insights
の権限が必要リクエスト
curl -i -X GET \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ASSET_ID>/insights ?breakdowns=["age","gender"] &fields=impressions,inline_link_clicks,age,gender,date_start, &time_range={"since":"2019-08-01","until":"2019-08-22"} &access_token={partner-access-token}"
応答
{ "data": [ { "impressions": 99, "inline_link_clicks": 1, "age": "18-24", "gender": "female", "date_start": "2019-08-01", "date_end": "2019-08-22" }, { "impressions": 198, "inline_link_clicks": 2, "age": "18-24", "gender": "male", "date_start": "2019-08-01", "date_end": "2019-08-22" }, { "impressions": 464, "inline_link_clicks": 2, "age": "25-34", "gender": "female", "date_start": "2019-08-01", "date_end": "2019-08-22" }, ] }
内訳項目は以下のとおりです。
gender
age
country
publisher_platform
platform_position
device_platform
ad_id
objective
optimization_goal
time_range
(「YYYY-MM-DD」形式の日付が必要です。その日の午前0時開始を意味します。)マネージドサービスパートナーの場合、パートナーアクセストークンを使ってトップレベルフォルダーを管理できます。その際、フォルダーが共有されていて、以下に対する適切な許可タスクが与えられていることが必要です。
CREATE_CONTENT
タスク権限。これにより、アプリがサブフォルダーを作成し、画像や動画をそこにアップロードすることができます。VIEW_INSIGHTS
タスク権限。アプリはこの権限を使用して、フォルダーに保存されているクリエイティブアセットのパフォーマンスインサイトを表示します。<business_id>/creative_folders
エンドポイントを呼び出して、ユーザーのビジネスの下で共有されているすべての親フォルダーを取得します。
business_creative_management
権限が必要ユーザーのビジネスからのフォルダーの取得
リクエスト
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<partner_business_id>/creative_folders?filtering=[{field:"owner_business_id", operator:"EQUAL", value:"user_business_id"}]
応答
{ "data": [ { "id": "<shared_folder_id>" } ] }
フォルダーに対する許可タスクの取得
リクエスト
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<folder_id>/agencies
応答
{ "data": [ { "id": "<partner_business_id>", "name": "<partner business name>", "permitted_tasks": [ "VIEW_INSIGHTS", "VIEW_CONTENT", "CREATE_CONTENT", "MANAGE_CONTENT", "MANAGE_PERMISSIONS"] } ], }
CREATE_CONTENT
タスク権限が必要です。VIEW_INSIGHTS
タスク権限は、共有フォルダー内の画像やビデオのクリエイティブインサイトを照会するために必要です。親フォルダーにCREATE_CONTENT
タスク権限があれば、共有フォルダー内にサブフォルダーを作成することができます。
business_creative_management
権限が必要サブフォルダーの作成
リクエスト
curl -X POST \ -F "name={folder_name}" -F "description={description}" -F "parent_folder_id={parent-folder-id}" -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<BUSINESS_ID>/creative_folders
応答
{ "id": {subfolder-id} }
ステップ5にあるのと同じステップに従います。パートナートークンを使用してサブフォルダーに画像と動画をアップロードします。
アプリが画像や動画をFacebookのアセットライブラリにアップロードすると、FacebookのAPIはそのアセットIDを返します。
継続的な使用を可能にするために、アプリでは、アプリ内で画像や動画を作成したプロジェクトやワークスペースに対してアセットIDをトラッキングする必要があります。
これにより、例えば次のように、将来的にサポートされる予定の「編集」や「更新」のユースケースを簡素化することができます。
media_library_url
フィールドを照会リクエスト
curl -X GET \ -F 'access_token={partner-access-token}' \ https://graph.facebook.com/<API_VERSION>/<asset_id>?fields=media_library_url
&action=CREATE_AD
または&action=CREATE_POST
を追加します。例:
https://business.facebook.com/asset_library/business_creatives/?object_id=2838437832929622&action=CREATE_AD