إعلانات الفيديو والإعلانات الدوّارة

يمكنك بسهولة إنشاء إعلانات الفيديو والإعلانات الدوّارة وقياسها وتحسينها على Facebook باستخدام واجهة API. ويمكنك الرجوع إلى Facebook للأعمال، الإعلانات الدوّارة. ولمعرفة تنسيقات الفيديو المدعومة للإعلانات، يمكنك الرجوع إلى مركز مساعدة المُعلنين، مقاطع الفيديو.

إعلانات الفيديو

المستندات المرجعية

لإنشاء إعلان فيديو في هدف VIDEO_VIEWS وتحسين عرض الأسعار من أجل الوصول، اتبع هذه الخطوات:

الخطوة الأولى: توفير تصميمات الإعلانات

أنشئ إعلان فيديو باستخدام معرف فيديو حالٍ وفيديو تم تحميله على فيسبوك.

ستحتاج إلى ما يلي:

  • الإذنان pages_read_engagement وads_management
  • فيديو تم تحميله على نقطة النهاية act_{ad-account-id}/advideos
use FacebookAds\Object\AdCreative;
use FacebookAds\Object\AdCreativeVideoData;
use FacebookAds\Object\Fields\AdCreativeVideoDataFields;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;


$video_data = new AdCreativeVideoData();
$video_data->setData(array(
  AdCreativeVideoDataFields::IMAGE_URL => '<THUMBNAIL_URL>',
  AdCreativeVideoDataFields::VIDEO_ID => <VIDEO_ID>,
));

$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::VIDEO_DATA => $video_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');

$creative->setData(array(
  AdCreativeFields::NAME => 'Sample Creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec
from facebookads.adobjects.adcreativevideodata \
    import AdCreativeVideoData

video_data = AdCreativeVideoData()
video_data[AdCreativeVideoData.Field.description] = 'My Description'
video_data[AdCreativeVideoData.Field.video_id] = <VIDEO_ID>
video_data[AdCreativeVideoData.Field.image_url] = '<IMAGE_URL>'

object_story_spec = AdCreativeObjectStorySpec()
object_story_spec[AdCreativeObjectStorySpec.Field.page_id] = <PAGE_ID>
object_story_spec[AdCreativeObjectStorySpec.Field.video_data] = video_data

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.name] = 'Video Ad Creative'
creative[AdCreative.Field.object_story_spec] = object_story_spec
creative.remote_create()
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setName("Sample Creative")
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldPageId(<PAGE_ID>)
      .setFieldVideoData(
        new AdCreativeVideoData()
          .setFieldImageUrl(<THUMBNAIL_URL>)
          .setFieldVideoId(<VIDEO_ID>)
      )
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": {"image_url":"<THUMBNAIL_URL>","video_id":"<VIDEO_ID>"} 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

عرض الشرائح

لتوسيع نطاق الحملات الإعلانية للعلامات التجارية أو بدء تشغيلها على الهواتف محدودة المزايا في الأسواق الناشئة أو لإنشاء فيديو بسيط، يمكنك تجربة عروض شرائح الصور. وقم بتحميل الصور إلى أحد أصول الفيديو. على سبيل المثال:

use FacebookAds\Object\AdVideo;
use FacebookAds\Object\Fields\AdVideoFields;

$video = new AdVideo(null, 'act_<AD_ACCOUNT_ID>');
$video->{AdVideoFields::SLIDESHOW_SPEC} = array (
  'images_urls' => array(
    '<IMAGE_URL_1>',
    '<IMAGE_URL_2>',
    '<IMAGE_URL_3>',
  ),
  'duration_ms' => 2000,
  'transition_ms' => 200,
);

$video->create();
from facebookads.adobjects.advideo import AdVideo
from facebookads.specs import SlideshowSpec

video = AdVideo(parent_id='act_<AD_ACCOUNT_ID>')
slideshow = SlideshowSpec()
slideshow.update({
    SlideshowSpec.Field.images_urls: <IMAGE_URLS>,
    SlideshowSpec.Field.duration_ms: 2000,
    SlideshowSpec.Field.transition_ms: 200,
})

video[AdVideo.Field.slideshow_spec] = slideshow
video.remote_create()
new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdVideo()
  .setSlideshowSpec("{\"images_urls\":[\"" + <IMAGE_URL_1> + "\",\"" + <IMAGE_URL_2> + "\",\"" + <IMAGE_URL_3> + "\"],\"duration_ms\":\"2000\",\"transition_ms\":\"200\"}")
  .execute();
curl \
  -F 'slideshow_spec={ 
    "images_urls": [ 
      "<IMAGE_URL_1>", 
      "<IMAGE_URL_2>", 
      "<IMAGE_URL_3>" 
    ], 
    "duration_ms": 2000, 
    "transition_ms": 200 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph-video.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/advideos

يمكنك الرجوع إلى أفضل ممارسات تصميم إعلان الفيديو والمرجع: مقاطع الفيديو الإعلانية.

الخطوة الثانية: إنشاء الحملة الإعلانية

قم بتعيين الهدف إلى VIDEO_VIEWS:

curl -X POST \ -F 'name="Video Views campaign"' \ -F 'objective="OUTCOME_ENGAGEMENT"' \ -F 'status="PAUSED"' \ -F 'special_ad_categories=[]' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/campaigns
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Campaign = bizSdk.Campaign; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'Video Views campaign', 'objective' : 'OUTCOME_ENGAGEMENT', 'status' : 'PAUSED', 'special_ad_categories' : [], }; const campaigns = (new AdAccount(id)).createCampaign( fields, params ); logApiCallResult('campaigns api call complete.', campaigns);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Campaign; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'Video Views campaign', 'objective' => 'OUTCOME_ENGAGEMENT', 'status' => 'PAUSED', 'special_ad_categories' => array(), ); echo json_encode((new AdAccount($id))->createCampaign( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.campaign import Campaign from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'Video Views campaign', 'objective': 'OUTCOME_ENGAGEMENT', 'status': 'PAUSED', 'special_ad_categories': [], } print AdAccount(id).create_campaign( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createCampaign() .setName(\"Video Views campaign\") .setObjective(Campaign.EnumObjective.VALUE_OUTCOME_ENGAGEMENT) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setParam(\"special_ad_categories\", \"[]\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) campaigns = ad_account.campaigns.create({ name: 'Video Views campaign', objective: 'OUTCOME_ENGAGEMENT', status: 'PAUSED', special_ad_categories: [], })

يمكنك الرجوع إلى المرجع: الحملة الإعلانية وAdObjectives بلغة PHP وAdObjectives بلغة Python

الخطوة الثالثة: إنشاء مجموعة إعلانية

إذا كان هدفك هو تحقيق أقل تكلفة لكل مشاهدة، فيجب عليك إقران هدف الحملة الإعلانية لمشاهدة الفيديو مع optimization_goal=THRUPLAY لمجموعة إعلانية. ويمكنك تعيين bidding_event إلى IMPRESSIONS أو THRUPLAY للدفع لكل مرة ظهور أو لكل مشاهدة فيديو. كما يمكنك الرجوع إلى عرض أسعار التكلفة لكل مشاهدة.

curl \
  -F 'name=A CPV Ad Set' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=500' \
  -F 'start_time=2018-02-06T04:45:29+0000' \
  -F 'end_time=2018-02-13T04:45:29+0000' \
  -F 'billing_event=THRUPLAY' \
  -F 'optimization_goal=THRUPLAY' \
  -F 'bid_amount=100' \
  -F 'targeting={ 
    "device_platforms": ["mobile"], 
    "geo_locations": {"countries":["US"]}, 
    "publisher_platforms": ["facebook"] 
  }' \
  -F 'status=PAUSED' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/<VERSION>/<AD_ACCOUNT_ID>/adsets

تقل أسعار التكلفة لكل مشاهدة للمجموعات الإعلانية التي تتضمن optimization_goal=THRUPLAY مقارنة بأسعار التكلفة لكل مشاهدة من نوع شراء الوصول وتكرار الظهور الذي تم تحسينه لمشاهدات الفيديو. ويمكنك الرجوع إلى المرجع: المجموعة الإعلانية.

الخطوة الرابعة: إنشاء الإعلان

استخدم مجموعة إعلانية وتصميم إعلان موجود:

curl -X POST \ -F 'name="My Ad"' \ -F 'adset_id="<AD_SET_ID>"' \ -F 'creative={ "creative_id": "<CREATIVE_ID>" }' \ -F 'status="PAUSED"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/ads
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const Ad = bizSdk.Ad; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'name' : 'My Ad', 'adset_id' : '<adSetID>', 'creative' : {'creative_id':'<adCreativeID>'}, 'status' : 'PAUSED', }; const ads = (new AdAccount(id)).createAd( fields, params ); logApiCallResult('ads api call complete.', ads);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\Ad; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'name' => 'My Ad', 'adset_id' => '<adSetID>', 'creative' => array('creative_id' => '<adCreativeID>'), 'status' => 'PAUSED', ); echo json_encode((new AdAccount($id))->createAd( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.ad import Ad from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'name': 'My Ad', 'adset_id': '<adSetID>', 'creative': {'creative_id':'<adCreativeID>'}, 'status': 'PAUSED', } print AdAccount(id).create_ad( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAd() .setName(\"My Ad\") .setAdsetId(<adSetID>L) .setCreative( new AdCreative() .setFieldId(\"<adCreativeID>\") ) .setStatus(Ad.EnumStatus.VALUE_PAUSED) .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) ads = ad_account.ads.create({ name: 'My Ad', adset_id: '<adSetID>', creative: {'creative_id':'<adCreativeID>'}, status: 'PAUSED', })

عندما يكون هدف الحملة الإعلانية هو VIDEO_VIEWS، يحصل الإعلان افتراضيًا على مواصفات التتبع المناسبة والتي تحدد الإجراءات التي يتم تتبعها للإعلان. فعلى سبيل المثال، مشاهدات الفيديو:

{'action.type':'video_view','post':'POST_ID','post.wall':'PAGE_ID'}
    

يمكنك الرجوع إلى مدير الإعلانات: حملاتي الإعلانية والمرجع: الإعلان.

مثال على الوعي بالعلامة التجارية

لإنشاء إعلان فيديو بهدف الوعي بالعلامة التجارية، يمكنك الرجوع إلى مدونة الوعي بالعلامة التجارية.

مثال على الوصول وتكرار الظهور

المستندات المرجعية

لتوسيع نطاق وصول الفيديو إلى مزيد من الأشخاص، يمكنك استخدام هدف الحملة الإعلانية لمشاهدات الفيديو مع الوصول وتكرار الظهور. ويجب إنشاء توقع وحفظه وتعيينه إلى مجموعتك الإعلانية.

يمكنك متابعة إنشاء مشاهدات الفيديو، ولكن قم بتطبيق الوصول وتكرار الظهور على مجموعتك الإعلانية. وحدد هذه المعلمات الإضافية:

$adset->{AdSetFields::RF_PREDICTION_ID} = <RESERVATION_ID>;
adset[AdSet.Field.prediction_id] = <RESERVATION_ID>
-F "rf_prediction_id=<RESERVATION_ID>" \

فيديو من أجل الاستجابة المباشرة

لتشجيع الأشخاص على الانتقال من الوعي إلى اتخاذ الإجراء، يمكنك الرجوع إلى تصميم الفيديو بتنسيق الإعلان الدوّار.

  • قم بالوصول إلى الأشخاص الذين شاهدوا الفيديو. من الوعي إلى الانجذاب والاهتمام. ويمكنك الرجوع إلى إعادة التسويق.
  • تفاعل مع العلامة التجارية والمنتجات. أضف زر الدعوة لاتخاذ إجراء لزيارة صفحة محددة في موقعك على الويب. ويمكنك الرجوع إلى الدعوة لاتخاذ إجراء.

إعادة التسويق

توفر ميزة إعادة تسويق إعلانات الفيديو الدعم للمُعلنين من أجل استهداف جماهير مخصصة معينة من خلال مقاطع الفيديو المجانية أو المدفوعة على Facebook وInstagram. ويمكنك استخدام هذه الميزة لنقل الأشخاص من مرحلة الوعي إلى أهداف أعمق في المسار، مثل الانجذاب والاهتمام. ويمكنك الرجوع إلى الأبحاث: مجموعات التصميمات التي تعمل.

يجب الحصول على إذن المُعلن للصفحة التي تتضمن الفيديو من أجل إنشاء جمهور لهذا الفيديو.

بالنسبة للجمهور، قم بتعيين subtype=ENGAGEMENT. وبعد ذلك، أدخل قواعد للجمهور الذي تريد إنشائه. ويتوفر لدى كل قاعدة المعرف object_id، مثل معرف الفيديو، وكذلك الاسم event_name. كما يمثل الاسم event_name واحدًا مما يلي:

  • video_watched: يمثل عدد مرات مشاهدة الفيديو لمدة 3 ثوانٍ على الأقل إجمالًا، أو مشاهدة إجمالي مدة الفيديو تقريبًا، أيهما يحدث أولًا.
  • video_completed: يمثل عدد مرات مشاهدة الفيديو بنسبة 95٪ من مدته، بما في ذلك المشاهدات التي تم تخطيها إلى هذه النقطة.
  • video_view_10s: يمثل عدد مرات مشاهدة الفيديو لمدة 10 ثوانٍ على الأقل إجمالًا، أو مشاهدة إجمالي مدة الفيديو تقريبًا، أيهما يحدث أولًا.
  • video_view_15s: يمثل عدد مرات مشاهدة الفيديو لمدة 15 ثانية على الأقل إجمالًا، أو مشاهدة إجمالي مدة الفيديو تقريبًا، أيهما يحدث أولًا.
  • video_view_25_percent: يمثل عدد مرات مشاهدة الفيديو بنسبة 25٪ من مدته، بما في ذلك المشاهدات التي تم تخطيها إلى هذه النقطة.
  • video_view_50_percent: يمثل عدد مرات مشاهدة الفيديو بنسبة 50٪ من مدته، بما في ذلك المشاهدات التي تم تخطيها إلى هذه النقطة.
  • video_view_75_percent: يمثل عدد مرات مشاهدة الفيديو بنسبة 75٪ من مدته، بما في ذلك المشاهدات التي تم تخطيها إلى هذه النقطة.

يمكنك تجميع مقاطع الفيديو لإنشاء جمهور استنادًا إلى مجموعة متنوعة من مقاطع الفيديو والإجراءات. فعلى سبيل المثال، يمكن أن يتضمن الجمهور مشاهدات فيديو لمدة 3 ثوانٍ من الفيديو أ، ومشاهدات فيديو مكتملة من الفيديو ب وج.

يؤدي ذلك إلى إنشاء جمهور من مشاهدي الفيديو 1 خلال مدة 14 يومًا الماضية لمدة تزيد عن 3 ثوان، وجمهور من مشاهدي الفيديو 2 بالكامل. ويقوم الجمهور أيضًا بملء المشاهدين تلقائيًا قبل إنشاء الجمهور من خلال prefill=true.

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;


$audience = new CustomAudience(null, $ad_account_id);
$audience->setData(array(
  CustomAudienceFields::NAME => 'Video Ads Engagement Audience',
  CustomAudienceFields::SUBTYPE => 'ENGAGEMENT',
  CustomAudienceFields::DESCRIPTION => 'Users who watched my video',
  CustomAudienceFields::PREFILL => true,
  CustomAudienceFields::RULE => array(
    array(
      'object_id' => $video_id_1,
      'event_name' => 'video_watched',
    ),
    array(
      'object_id' => $video_id_2,
      'event_name' => 'video_completed',
    ),
  ),
));

$audience->create();
from facebookads.adobjects.customaudience import CustomAudience

audience = CustomAudience(parent_id=ad_account_id)
audience[CustomAudience.Field.subtype] = CustomAudience.Subtype.engagement
audience[CustomAudience.Field.name] = 'Video Ads Engagement Audience'
audience[CustomAudience.Field.description] = 'Users who watched my video'
audience[CustomAudience.Field.prefill] = True
audience[CustomAudience.Field.rule] = [
    {
        "object_id": video_id_1,
        "event_name": "video_watched",
    },
    {
        "object_id": video_id_2,
        "event_name": "video_completed",
    },
]
audience.remote_create()
curl \
  -F 'name=Video Ads Engagement Audience' \
  -F 'subtype=ENGAGEMENT' \
  -F 'description=Users who watched my video' \
  -F 'prefill=1' \
  -F 'rule=[ 
    {"object_id":"%video_id_1","event_name":"video_watched"}, 
    {"object_id":"%video_id_2","event_name":"video_completed"} 
  ]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/%ad_account_id/customaudiences

يتم دعم إعادة التعبئة لمشاهدات الفيديو اعتبارًا من 16 أكتوبر 2015.

الدعوة لاتخاذ إجراء

يطلب الفيديو الذي يتضمن دعوة لاتخاذ إجراء (CTA) من الأشخاص التعرف على المزيد وزيارة صفحة محددة على أحد مواقع الويب. ويمكنك تحسين الأداء عندما يكون هدفك الأساسي هو تشجيع مشاهدات الفيديو أو الوعي بالعلامة التجارية، ويكمن الهدف الثانوي في التشجيع على زيادة عدد النقرات خارج الموقع. كما يجب عليك استخدام إعلان فيديو برابط للهدف الثاني. وفيما يلي كيفية عرض زر الدعوة لاتخاذ إجراء (CTA):

  • بالنسبة للهواتف المحمولة وأجهزة الكمبيوتر، يظهر كجزء من المنشور. وعند إيقاف تشغيل الفيديو مؤقتًا، يظهر بجوار الخيار "استئناف".
  • بالنسبة للهواتف المحمولة، عندما ينقر أحد الأشخاص على فيديو لمشاهدته في وضع ملء الشاشة، يظهر زر الدعوة لاتخاذ إجراء العائم كتراكب في الفيديو.
  • لا تعرض منشورات روابط الفيديو الخارجية أزرار الدعوة لاتخاذ إجراء.

لا يمكنك استخدام فيديو مع أزرار الدعوة لاتخاذ إجراء إلا في أهداف الحملات الإعلانية التالية:

يمكنك الرجوع إلى توسيع نطاق الفيديو ليتضمن أهدافًا إضافية. ويؤدي ذلك إلى إنشاء إعلان فيديو من خلال الدعوة لاتخاذ إجراء GET_DIRECTIONS:

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeVideoDataFields;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\AdCreativeVideoData;
use FacebookAds\Object\AdCreativeObjectStorySpec;
use FacebookAds\Object\Values\AdCreativeCallToActionTypeValues;

$video_data = new AdCreativeVideoData();
$video_data->setData(array(
  AdCreativeVideoDataFields::IMAGE_URL => '<THUMBNAIL_URL>',
  AdCreativeVideoDataFields::VIDEO_ID => <VIDEO_ID>,
  AdCreativeVideoDataFields::LINK_DESCRIPTION =>
    "Come check out our new store in Menlo Park!",
  AdCreativeVideoDataFields::CALL_TO_ACTION => array(
    'type' => AdCreativeCallToActionTypeValues::GET_DIRECTIONS,
    'value' => array(
      'link' => 'fbgeo://37.48327, -122.15033, "1601 Willow Rd Menlo Park CA"',
    ),
  ),
));

$story = new AdCreativeObjectStorySpec();
$story->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::VIDEO_DATA => $video_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');
$creative->{AdCreativeFields::OBJECT_STORY_SPEC} = $story;
$creative->create();
from facebookads.adobjects.adcreativevideodata import AdCreativeVideoData
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec

video_data = AdCreativeVideoData()
video_data[AdCreativeVideoData.Field.image_url] = image_url
video_data[AdCreativeVideoData.Field.video_id] = <VIDEO_ID>
video_data[AdCreativeVideoData.Field.description]\
    = 'Come check out our new store in Menlo Park!'
video_data[AdCreativeVideoData.Field.call_to_action] = {
    'type': 'GET_DIRECTIONS',
    'value': {
        'link': 'fbgeo://37.48327, -122.15033, "1601 Willow Rd Menlo Park CA"',
    },
}

story = AdCreativeObjectStorySpec()
story[AdCreativeObjectStorySpec.Field.page_id] = <PAGE_ID>
story[AdCreativeObjectStorySpec.Field.video_data] = video_data

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.object_story_spec] = story
creative.remote_create()
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldPageId(<PAGE_ID>)
      .setFieldVideoData(
        new AdCreativeVideoData()
          .setFieldCallToAction(
            new AdCreativeLinkDataCallToAction()
              .setFieldType(AdCreativeLinkDataCallToAction.EnumType.VALUE_GET_DIRECTIONS)
              .setFieldValue(
                new AdCreativeLinkDataCallToActionValue()
                  .setFieldLink("fbgeo://37.48327, -122.15033, \"1601 Willow Rd Menlo Park CA\"")
              )
          )
          .setFieldLinkDescription("Come check out our new store in Menlo Park!")
          .setFieldImageUrl(<THUMBNAIL_URL>)
          .setFieldVideoId(<VIDEO_ID>)
      )
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": { 
      "call_to_action": { 
        "type": "GET_DIRECTIONS", 
        "value": { 
          "link": "fbgeo:\/\/37.48327, -122.15033, \"1601 Willow Rd Menlo Park CA\"" 
        } 
      }, 
      "image_url": "<THUMBNAIL_URL>", 
      "link_description": "Come check out our new store in Menlo Park!", 
      "video_id": "<VIDEO_ID>" 
    } 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

أدوات قياس إعلانات الفيديو

رؤى حول منشور الفيديو، مجاني

المستندات المرجعية

تعرف على المزيد حول أداء مقاطع الفيديو التي تقدمها على Facebook واتخذ قرارات تستند إلى مزيد من المعلومات حول محتوى الفيديو. وفي الوقت الحالي، لا نقدم أدوات القياس إلا بعد بدء شخص في مشاهدة مقاطع الفيديو. ويتضمن ذلك مشاهدات الفيديو ومشاهدات الفيديو الفريدة ومتوسط مدة مشاهدة الفيديو والاحتفاظ بالجمهور. كما يمكنك معرفة الأوقات التي يتوقف فيها الأشخاص عن مشاهدة مقاطع الفيديو، والأجزاء التي قد يجدها الأشخاص أكثر تشويقًا.

رؤى حول إعلان الفيديو، مدفوع

استخدم واجهة API رؤى الإعلانات. وتحتوي الاستجابة على العديد من أدوات قياس الفيديو.

نوع الفيديو

يمكنك استعادة إحصائيات إعلان الفيديو مُجمّعة حسب نوع الفيديو، مثل التشغيل التلقائي أو النقر للتشغيل. وقم بتضمين النوع action_video_type في action_breakdowns. علمًا بأن القيم المتوقعة للنوع action_video_type هي total وclick_to_play وauto_play.

نجري حاليًا اختبارًا محدودًا للخيار action_video_type. ولتحديد العملاء باستخدام التقسيم، تحقق من CAN_USE_VIDEO_METRICS_BREAKDOWNللحساب الإعلاني.

use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsDatePresetValues;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => AdsInsightsActionBreakdownsValues::ACTION_VIDEO_TYPE,
  'date_preset' => AdsInsightsDatePresetValues::LAST_30D,
);

$fields = array(
  AdsInsightsFields::ACTIONS,
  AdsInsightsFields::VIDEO_AVG_PCT_WATCHED_ACTIONS,
  AdsInsightsFields::VIDEO_COMPLETE_WATCHED_ACTIONS,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights

account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': AdsInsights.ActionBreakdowns.action_video_type,
    'date_preset': AdsInsights.DatePreset.last_30_days,
    'fields': [
        AdsInsights.Field.actions,
        AdsInsights.Field.video_avg_pct_watched_actions,
        AdsInsights.Field.video_complete_watched_actions,
    ],
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("action_video_type")
  .setDatePreset(AdsInsights.EnumDatePreset.VALUE_LAST_30_DAYS)
  .requestField("actions")
  .requestField("video_avg_pct_watched_actions")
  .requestField("video_complete_watched_actions")
  .execute();
curl -G \
  -d 'action_breakdowns=action_video_type' \
  -d 'date_preset=last_30_days' \
  -d 'fields=actions,video_avg_pct_watched_actions,video_complete_watched_actions' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

تحتوي الاستجابة على كائنات تتضمن action_type كنوع video_view، وتحتوي على نوع action_video_type أساسي:

{
  "data": [
    {
      "actions": [
        ...
        {
          "action_type": "video_play", 
          "value": 9898
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 921129
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 915971
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 5158
        }
      ], 
      "video_avg_pct_watched_actions": [
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 60.59
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 60.47
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 80.63
        }
      ], 
      "video_complete_watched_actions": [
        {
          "action_type": "video_view", 
          "action_video_type": "total", 
          "value": 156372
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "auto_play", 
          "value": 154015
        }, 
        {
          "action_type": "video_view", 
          "action_video_type": "click_to_play", 
          "value": 2357
        }
      ], 
      "date_start": "2014-12-26", 
      "date_stop": "2015-03-25"
    }
  ], 
  "paging": {
    "cursors": {
      "before": "MA==", 
      "after": "MA=="
    }
  }
}

يمكنك الرجوع إلى واجهة API رؤى الإعلانات

يمكنك الحصول على المزيد من عناصر التصميم المتعلقة بالعقارات في الموجز وتشجيع الأشخاص على زيارة موقعك على الويب أو تطبيقك على الهواتف المحمولة من أجل التحويل. ويمكنك إنشاء إعلان دوّار بطريقتين:

الإعلانات الدوّارة غير مدعومة في Facebook Stories.

إنشاء مُضمن

أنشئ منشور صفحة لإعلان دوّار أثناء إنشاء تصميم إعلان. وحدد محتوى منشور الصفحة في object_story_spec الذي ينشئ منشور صفحة لم يتم نشره من adcreatives. ويمكنك الرجوع إلى تصميمات الإعلانات. على سبيل المثال:

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\Fields\AdCreativeLinkDataFields;
use FacebookAds\Object\Fields\AdCreativeObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeLinkDataChildAttachmentFields;
use FacebookAds\Object\AdCreativeLinkDataChildAttachment;
use FacebookAds\Object\AdCreativeLinkData;
use FacebookAds\Object\AdCreativeObjectStorySpec;

$product1 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product1',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 1',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$8.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
  AdCreativeLinkDataChildAttachmentFields::VIDEO_ID => '<VIDEO_ID>',
));

$product2 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product2',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 2',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$9.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
  AdCreativeLinkDataChildAttachmentFields::VIDEO_ID => '<VIDEO_ID>',
));

$product3 = (new AdCreativeLinkDataChildAttachment())->setData(array(
  AdCreativeLinkDataChildAttachmentFields::LINK =>
    'https://www.link.com/product3',
  AdCreativeLinkDataChildAttachmentFields::NAME => 'Product 3',
  AdCreativeLinkDataChildAttachmentFields::DESCRIPTION => '$10.99',
  AdCreativeLinkDataChildAttachmentFields::IMAGE_HASH => '<IMAGE_HASH>',
));

$link_data = new AdCreativeLinkData();
$link_data->setData(array(
  AdCreativeLinkDataFields::LINK => '<URL>',
  AdCreativeLinkDataFields::CHILD_ATTACHMENTS => array(
    $product1, $product2, $product3,
  ),
));

$object_story_spec = new AdCreativeObjectStorySpec();
$object_story_spec->setData(array(
  AdCreativeObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  AdCreativeObjectStorySpecFields::LINK_DATA => $link_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');
$creative->setData(array(
  AdCreativeFields::NAME => 'Sample Creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();
from facebookads.adobjects.adcreative import AdCreative
from facebookads.adobjects.adcreativelinkdata import AdCreativeLinkData
from facebookads.adobjects.adcreativeobjectstoryspec \
    import AdCreativeObjectStorySpec
from facebookads.adobjects.adcreativelinkdatachildattachment \
    import AdCreativeLinkDataChildAttachment

product1 = AdCreativeLinkDataChildAttachment()
product1[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product1'
product1[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 1'
product1[AdCreativeLinkDataChildAttachment.Field.description] = '$8.99'
product1[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'
product1[AdCreativeLinkDataChildAttachment.Field.video_id] = '<VIDEO_ID>'

product2 = AdCreativeLinkDataChildAttachment()
product2[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product2'
product2[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 2'
product2[AdCreativeLinkDataChildAttachment.Field.description] = '$9.99'
product2[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'

product3 = AdCreativeLinkDataChildAttachment()
product3[AdCreativeLinkDataChildAttachment.Field.link] = '<URL>' + '/product3'
product3[AdCreativeLinkDataChildAttachment.Field.name] = 'Product 3'
product3[AdCreativeLinkDataChildAttachment.Field.description] = '$10.99'
product3[AdCreativeLinkDataChildAttachment.Field.image_hash] = '<IMAGE_HASH>'

link = AdCreativeLinkData()
link[link.Field.link] = '<URL>'
link[link.Field.child_attachments] = [product1, product2, product3]

story = AdCreativeObjectStorySpec()
story[story.Field.page_id] = <PAGE_ID>
story[story.Field.link_data] = link

creative = AdCreative(parent_id='act_<AD_ACCOUNT_ID>')
creative[AdCreative.Field.name] = 'MPA Creative'
creative[AdCreative.Field.object_story_spec] = story
creative.remote_create()
print(creative)
AdCreative adCreative = new AdAccount(act_<AD_ACCOUNT_ID>, context).createAdCreative()
  .setName("Sample Creative")
  .setObjectStorySpec(
    new AdCreativeObjectStorySpec()
      .setFieldLinkData(
        new AdCreativeLinkData()
          .setFieldCaption("My caption")
          .setFieldChildAttachments(Arrays.asList(
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$8.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product1")
              .setFieldName("Product 1")
              .setFieldVideoId(<VIDEO_ID>)
          , 
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$9.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product2")
              .setFieldName("Product 2")
              .setFieldVideoId(<VIDEO_ID>)
          , 
            new AdCreativeLinkDataChildAttachment()
              .setFieldDescription("$10.99")
              .setFieldImageHash(<IMAGE_HASH>)
              .setFieldLink("https://www.link.com/product3")
              .setFieldName("Product 3")
          ))
          .setFieldLink(<URL>)
      )
      .setFieldPageId(<PAGE_ID>)
  )
  .execute();
String ad_creative_id = adCreative.getId();
curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "link_data": { 
      "child_attachments": [ 
        { 
          "description": "$8.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product1", 
          "name": "Product 1", 
          "video_id": "<VIDEO_ID>" 
        }, 
        { 
          "description": "$9.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product2", 
          "name": "Product 2", 
          "video_id": "<VIDEO_ID>" 
        }, 
        { 
          "description": "$10.99", 
          "image_hash": "<IMAGE_HASH>", 
          "link": "https:\/\/www.link.com\/product3", 
          "name": "Product 3" 
        } 
      ], 
      "link": "<URL>" 
    }, 
    "page_id": "<PAGE_ID>" 
  }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/act_<AD_ACCOUNT_ID>/adcreatives

تكون الاستجابة عبارة عن معرف تصميم:

{"id":"<CREATIVE_ID>"}

إنشاء منشور، ثم إعلان

أنشئ منشور صفحة لم يتم نشره. ويكون child_attachments عبارة عن مصفوفة من كائنات الروابط. وفي كل كائن رابط، تتوفر الصورة picture والاسم name والوصف description اختياريًا. ويمكنك نشر ذلك بواسطة الصفحة باستخدام رمز وصول الصفحة فقط.

curl -X GET \ -d 'message="Browse our latest products"' \ -d 'published=0' \ -d 'child_attachments=[ { "link": "{app-store-url}", "name": "Product 1", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 2", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 3", "description": "$4.99", "image_hash": "{image-hash}" }, { "link": "{app-store-url}", "name": "Product 4", "description": "$4.99", "image_hash": "{image-hash}" } ]' \ -d 'caption="WWW.EXAMPLE.COM"' \ -d 'link="http://www.example.com/products"' \ -d 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/{page-id}/posts
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const Page = bizSdk.Page; const PagePost = bizSdk.PagePost; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<PAGE_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'message' : 'Browse our latest products', 'published' : '0', 'child_attachments' : [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], 'caption' : 'WWW.EXAMPLE.COM', 'link' : 'http://www.example.com/products', }; const postss = (new Page(id)).getPosts( fields, params ); logApiCallResult('postss api call complete.', postss);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\Page; use FacebookAds\Object\PagePost; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<PAGE_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'message' => 'Browse our latest products', 'published' => '0', 'child_attachments' => array(array('link' => '<link>','name' => 'Product 1','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 2','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 3','description' => '$4.99','image_hash' => '<imageHash>'),array('link' => '<link>','name' => 'Product 4','description' => '$4.99','image_hash' => '<imageHash>')), 'caption' => 'WWW.EXAMPLE.COM', 'link' => 'http://www.example.com/products', ); echo json_encode((new Page($id))->getPosts( $fields, $params )->getResponse()->getContent(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.page import Page from facebook_business.adobjects.pagepost import PagePost from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PAGE_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'message': 'Browse our latest products', 'published': '0', 'child_attachments': [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], 'caption': 'WWW.EXAMPLE.COM', 'link': 'http://www.example.com/products', } print Page(id).get_posts( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<PAGE_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new Page(id, context).getPosts() .setParam(\"message\", \"Browse our latest products\") .setParam(\"published\", \"0\") .setParam(\"child_attachments\", \"[{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 1\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 2\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 3\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"},{\\"link\\":\\"<link>\\",\\"name\\":\\"Product 4\\",\\"description\\":\\"$4.99\\",\\"image_hash\\":\\"<imageHash>\\"}]\") .setParam(\"caption\", \"WWW.EXAMPLE.COM\") .setParam(\"link\", \"http://www.example.com/products\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<PAGE_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end page = FacebookAds::Page.get(id) postss = page.posts({ fields: { }, message: 'Browse our latest products', published: '0', child_attachments: [{'link':'<link>','name':'Product 1','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 2','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 3','description':'$4.99','image_hash':'<imageHash>'},{'link':'<link>','name':'Product 4','description':'$4.99','image_hash':'<imageHash>'}], caption: 'WWW.EXAMPLE.COM', link: 'http://www.example.com/products', })

بعد ذلك، قم بتوفير تصميم الإعلان مع منشور الصفحة الذي لم يتم نشره. واستخدم المعرف id في object_story_id بتصميم إعلانك.

curl -X POST \ -F 'object_story_id="<PAGE_ID>_<POST_ID>"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdCreative = bizSdk.AdCreative; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'object_story_id' : '<pageID>_<postID>', }; const adcreatives = (new AdAccount(id)).createAdCreative( fields, params ); logApiCallResult('adcreatives api call complete.', adcreatives);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdCreative; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'object_story_id' => '<pageID>_<postID>', ); echo json_encode((new AdAccount($id))->createAdCreative( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adcreative import AdCreative from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'object_story_id': '<pageID>_<postID>', } print AdAccount(id).create_ad_creative( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdCreative() .setObjectStoryId(\"<pageID>_<postID>\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adcreatives = ad_account.adcreatives.create({ object_story_id: '<pageID>_<postID>', })

إنشاء إعلان فيديو دوّار

يمكن أن تحتوي إعلانات الفيديو الدوّارة على 'شرح توضيحي' في المرفق الفرعي لتخصيص عنوان URL الخاص بالعرض في الشاشة النهائية:

"child_attachments": [
 {
   "link": "https://www.facebookmarketingdevelopers.com/",
   "name": "Facebook Marketing Developers",
   "description": "Facebook Marketing Developers",
   "call_to_action": {
     "type": "APPLY_NOW",
     "value": {
      "link_title": "Facebook Marketing Developers"
     }
   },
   "video_id": "123",
   "caption": "mycustomlinkcaption.com"
  },
]

للحصول على تفاصيل حول المرفقات الفرعية، يمكنك استخدام المعرف واستدعاء واجهة Graph API، الفيديو، المرجع.

إنشاء إعلان لتطبيق الهاتف المحمول

التقييدات:

  • تدعم الإعلانات الدوّارة لتطبيقات الهواتف المحمولة تطبيقًا واحدًا فقط
  • يمكن استخدام ثلاث صور كحد أدنى مقارنة بصورتين بالنسبة للإعلانات الدوّارة في الإعلانات خارج التطبيقات
  • يجب أن تتضمن إعلانات تطبيقات الهواتف المحمولة زر الدعوة لاتخاذ إجراء
  • لن تظهر بطاقة الإنهاء، والتي تعرض عادة صورة الملف الشخصي للصفحة،, بالنسبة للإعلانات الدوّارة لتطبيقات الهواتف المحمولة. ولاحظ أنه يجب عليك تحديد رابط متجر التطبيقات نفسه في كل child_attachment. ولا تحتاج إلى تحديد الرابط مجددًا في call_to_action:{'value':{'link':... }}}

فعلى سبيل المثال، لإنشاء إعلان دوّار لعمليات تثبيت تطبيقات الهواتف المحمولة:

curl -X POST \
  -F 'name="Carousel app ad"' \
  -F 'object_story_spec={
       "page_id": "<PAGE_ID>",
       "link_data": {
         "message": "My message",
         "link": "http://www.example.com/appstoreurl",
         "caption": "WWW.ITUNES.COM",
         "name": "The link name",
         "description": "The link description",
         "child_attachments": [
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           },
           {
             "link": "http://www.example.com/appstoreurl",
             "image_hash": "<IMAGE_HASH>",
             "call_to_action": {
               "type": "USE_MOBILE_APP",
               "value": {
                 "app_link": "<DEEP_LINK>"
               }
             }
           }
         ],
         "multi_share_optimized": true
       }
     }' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives

يمكنك فقط نشر منشورك باسم صفحة Facebook المرتبطة بتطبيقك على الهاتف المحمول. ويجب عليك استخدام رمز وصول الصفحة.

$child_attachments = array();

for ($i = 0; $i <= 3; $i++) {
  $child_attachments[] = array(
    'link' => '<APP_STORE_URL>',
    'image_hash' => '<IMAGE_HASH_I>',
    'call_to_action' => array(
      'type' => 'USE_MOBILE_APP',
      'value' => array(
        'app_link' => '<DEEP_LINK_I>',
        'link_title' => '<LINK_TITLE_I>',
      ),
    ),
  );
}

$params = array(
  'message' => 'My description',
  'link' => '<APP_STORE_URL>',
  'caption' => 'WWW.ITUNES.COM',
  'child_attachments' => $child_attachments,
  'multi_share_optimized' => true,
);

$data = Api::instance()->call(
  '/'.'<PAGE_ID>'.'/feed',
  RequestInterface::METHOD_POST,
  $params)->getContent();
from facebookads import FacebookAdsApi
from facebookads.adobjects.adcreativelinkdatachildattachment \
    import AdCreativeLinkDataChildAttachment

child_attachments = list()

for i in range(3):
    child_attachments.append({
        AdCreativeLinkDataChildAttachment.Field.link: '<APP_STORE_URL>',
        AdCreativeLinkDataChildAttachment.Field.image_hash: '<IMAGE_HASH>',
        AdCreativeLinkDataChildAttachment.Field.call_to_action: {
            'type': 'USE_MOBILE_APP',
            'value': {
                'app_link': '<DEEP_LINK_I>',
                'link_title': '<LINK_TITLE_I>',
            },
        },
    })

params = {
    'message': 'My description',
    'link': '<APP_STORE_URL>',
    'caption': 'WWW.ITUNES.COM',
    'child_attachments': child_attachments,
    'multi_share_optimized': True,
}

data = FacebookAdsApi.get_default_api().\
    call('POST', (<PAGE_ID>, 'feed'), params)
curl \
  -F 'message=My description' \
  -F 'link=<APP_STORE_URL>' \
  -F 'caption=WWW.ITUNES.COM' \
  -F 'child_attachments=[ 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    }, 
    { 
      "link": "<APP_STORE_URL>", 
      "image_hash": "<IMAGE_HASH_I>", 
      "call_to_action": { 
        "type": "USE_MOBILE_APP", 
        "value": {"app_link":"<DEEP_LINK_I>","link_title":"<LINK_TITLE_I>"} 
      } 
    } 
  ]' \
  -F 'multi_share_optimized=1' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.11/<PAGE_ID>/feed

استخدم المعرف id من الاستجابة لإنشاء AdCreative:

curl -X POST \ -F 'object_story_id="<PAGE_ID>_<POST_ID>"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v19.0/act_<AD_ACCOUNT_ID>/adcreatives
'use strict'; const bizSdk = require('facebook-nodejs-business-sdk'); const AdAccount = bizSdk.AdAccount; const AdCreative = bizSdk.AdCreative; const access_token = '<ACCESS_TOKEN>'; const app_secret = '<APP_SECRET>'; const app_id = '<APP_ID>'; const id = '<AD_ACCOUNT_ID>'; const api = bizSdk.FacebookAdsApi.init(access_token); const showDebugingInfo = true; // Setting this to true shows more debugging info. if (showDebugingInfo) { api.setDebug(true); } const logApiCallResult = (apiCallName, data) => { console.log(apiCallName); if (showDebugingInfo) { console.log('Data:' + JSON.stringify(data)); } }; let fields, params; fields = [ ]; params = { 'object_story_id' : '<pageID>_<postID>', }; const adcreatives = (new AdAccount(id)).createAdCreative( fields, params ); logApiCallResult('adcreatives api call complete.', adcreatives);
require __DIR__ . '/vendor/autoload.php'; use FacebookAds\Object\AdAccount; use FacebookAds\Object\AdCreative; use FacebookAds\Api; use FacebookAds\Logger\CurlLogger; $access_token = '<ACCESS_TOKEN>'; $app_secret = '<APP_SECRET>'; $app_id = '<APP_ID>'; $id = '<AD_ACCOUNT_ID>'; $api = Api::init($app_id, $app_secret, $access_token); $api->setLogger(new CurlLogger()); $fields = array( ); $params = array( 'object_story_id' => '<pageID>_<postID>', ); echo json_encode((new AdAccount($id))->createAdCreative( $fields, $params )->exportAllData(), JSON_PRETTY_PRINT);
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adcreative import AdCreative from facebook_business.api import FacebookAdsApi access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAdsApi.init(access_token=access_token) fields = [ ] params = { 'object_story_id': '<pageID>_<postID>', } print AdAccount(id).create_ad_creative( fields=fields, params=params, )
import com.facebook.ads.sdk.*; import java.io.File; import java.util.Arrays; public class SAMPLE_CODE_EXAMPLE { public static void main (String args[]) throws APIException { String access_token = \"<ACCESS_TOKEN>\"; String app_secret = \"<APP_SECRET>\"; String app_id = \"<APP_ID>\"; String id = \"<AD_ACCOUNT_ID>\"; APIContext context = new APIContext(access_token).enableDebug(true); new AdAccount(id, context).createAdCreative() .setObjectStoryId(\"<pageID>_<postID>\") .execute(); } }
require 'facebook_ads' access_token = '<ACCESS_TOKEN>' app_secret = '<APP_SECRET>' app_id = '<APP_ID>' id = '<AD_ACCOUNT_ID>' FacebookAds.configure do |config| config.access_token = access_token config.app_secret = app_secret end ad_account = FacebookAds::AdAccount.get(id) adcreatives = ad_account.adcreatives.create({ object_story_id: '<pageID>_<postID>', })

مواصفات الحقل

فيما يلي إعلان دوّار على نظام iOS يعرض كيفية استخدام الحقول الموضحة.

الاسم الوصف

child_attachments

النوع: object (كائن)

يلزم توفير مصفوفة من كائنات الروابط تضم 2 إلى 10 عناصر للإعلانات الدوّارة. ويجب استخدام ثلاثة كائنات على الأقل للاستمتاع بأداء مثالي؛ ويُستخدم اثنين من هذه الكائنات في تمكين عمليات الدمج الخفيفة وقد يؤدي استخدام اثنين من الكائنات إلى إرجاع نتائج تضم حملات إعلانية أقل من المستوى الأمثل.

child_attachments.link

النوع: string (سلسلة)

يمثل عنوان URL للرابط أو عنوان URL لمتجر التطبيقات المرفق بالمنشور. مطلوب.

child_attachments.picture

النوع: URL (عنوان URL)

يمثل معاينة الصورة المقترنة بالرابط. وتُستخدم نسبة العرض إلى الارتفاع 1:1 والدقة 458 × 458 بيكسل على الأقل للحصول على أفضل عرض. كما يجب تحديد picture أو image_hash.

child_attachments.image_hash

النوع: string (سلسلة)

يمثل تجزئة لصورة المعاينة المقترنة بالرابط من مكتبة الصور لديك؛ استخدم نسبة عرض إلى ارتفاع 1:1 وبدقة ‎458 x 458 بيكسل على الأقل للحصول على أفضل عرض. كما يجب تحديد picture أو image_hash.

child_attachments.name

النوع: string (سلسلة)

يمثل عنوان معاينة الرابط. وإذا لم يتم تحديده، فيُستخدم عنوان الصفحة المرتبطة. ويتم اقتصاصه عادة بعد 35 حرفًا. كما يجب تعيين اسم name فريد نظرًا لأن واجهات Facebook تعرض الإجراءات التي تم الإبلاغ عنها من الاسم name.

child_attachments.description

النوع: string (سلسلة)

يمثل السعر أو الخصم أو نطاق موقع الويب. وإذا لم يتم تحديده، فيتم استخلاص محتوى من الصفحة المرتبطة واستخدامه. ويتم اقتصاصه عادة بعد 30 حرفًا.

child_attachments.call_to_action

النوع: object (كائن)

يمثل اختياريًا زر الدعوة لاتخاذ إجراء. ويمكنك الرجوع إلى الدعوة لاتخاذ إجراء. ولا تحتاج إلى تحديد الرابط مجددًا في call_to_action:{'value':{'link':... }}}

child_attachments.video_id

النوع: string (سلسلة)

يمثل معرف فيديو الإعلان. ويمكن استخدامه في أي عنصر فرعي. وإذا تم تحديده، فيجب أيضًا تعيين image_hash أو picture.

message

النوع: string (سلسلة)

يمثل النص الأساسي للمنشور، ويُسمى أيضًا رسالة الحالة.

link

النوع: string (سلسلة)

يمثل عنوان URL للرابط الخاص بـ "عرض المزيد". مطلوب.

caption

النوع: string (سلسلة)

يمثل عنوان URL المطلوب عرضه في الرابط "عرض المزيد". ولا ينطبق على الإعلانات الدوّارة لتطبيقات الهواتف المحمولة

multi_share_optimized

النوع: boolean (قيمة منطقية)

إذا تم تعيينه إلى القيمة true، فسيتم تلقائيًا تحديد الصور والروابط، وترتيبها. وإلا، فسيتم استخدام الترتيب الأصلي للعناصر الفرعية. ويتم التعيين افتراضيًا إلى القيمة true.

multi_share_end_card

النوع: boolean (قيمة منطقية)

إذا تم تعيينه إلى القيمة false، فستتم إزالة بطاقة الإنهاء التي تعرض أيقونة الصفحة. ويتم التعيين افتراضيًا إلى القيمة true.

إحصائيات الإعلانات لكل منتج

يمكنك تجميع الإجراءات للإعلانات الدوّارة حسب كل منتج باستخدام actions_breakdown=['action_carousel_card_id', 'action_carousel_card_name']. ويحتوي كل child_attachment على معرف بطاقة مختلف. ولا يتم استخدام المعرف action_carousel_card_id والاسم action_carousel_card_name إلا مع الإعلانات الدوّارة فقط.

يمكنك الحصول على الإحصائيات التالية لكل بطاقة:

  • website_ctr: يتوفر عند تحديد fields=['website_ctr']
  • app_install وapp_use وapps.uses وcredit_spent وmobile_app_install وtab_view وlink_click وmobile_app_install وapp_custom_event.* وoffsite_conversion.*: يتوفر عند تحديد fields=['actions']. ولا تتوفر الإجراءات الأخرى مع تقسيم البطاقة.
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsLevelValues;
use FacebookAds\Object\Values\AdsInsightsDatePresetValues;
use FacebookAds\Object\Values\InsightsIncrements;
use FacebookAds\Object\Values\InsightsOperators;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => array(
    AdsInsightsActionBreakdownsValues::ACTION_TYPE,
    AdsInsightsActionBreakdownsValues::ACTION_CAROUSEL_CARD_ID,
  ),
  'level' => AdsInsightsLevelValues::AD,
  'date_preset' => AdsInsightsDatePresetValues::LAST_30D,
  'time_increment' => InsightsIncrements::ALL_DAYS,
  'breakdowns' => AdsInsightsBreakdownsValues::PLACEMENT,
  'filtering' => array(
    array(
      'field' => 'action_type',
      'operator' => InsightsOperators::IN,
      'value' => array('link_click'),
    ),
  ),
);

$fields = array(
  AdsInsightsFields::IMPRESSIONS,
  AdsInsightsFields::INLINE_LINK_CLICKS,
  AdsInsightsFields::ACTIONS,
  AdsInsightsFields::WEBSITE_CTR,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights


account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': [
        AdsInsights.ActionBreakdowns.action_type,
        AdsInsights.ActionBreakdowns.action_carousel_card_id,
    ],
    'fields': [
        AdsInsights.Field.impressions,
        AdsInsights.Field.unique_clicks,
        AdsInsights.Field.actions,
        AdsInsights.Field.website_ctr,
    ],
    'level': AdsInsights.Level.ad,
    'date_preset': AdsInsights.DatePreset.last_30_days,
    'time_increment': 'all_days',
    'breakdowns': AdsInsights.Breakdowns.placement,
    'filtering': [
        {
            'field': 'action_type',
            'operator': 'IN',
            'value': ['link_click'],
        },
    ],
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("[\"action_type\",\"action_carousel_card_id\"]")
  .setLevel(AdsInsights.EnumLevel.VALUE_AD)
  .setDatePreset(AdsInsights.EnumDatePreset.VALUE_LAST_30_DAYS)
  .setTimeIncrement("all_days")
  .setBreakdowns("placement")
  .setFiltering("[{\"field\":\"action_type\",\"operator\":\"IN\",\"value\":[\"link_click\"]}]")
  .requestField("impressions")
  .requestField("inline_link_clicks")
  .requestField("actions")
  .requestField("website_ctr")
  .execute();
curl -G \
  -d 'action_breakdowns=["action_type","action_carousel_card_id"]' \
  -d 'level=ad' \
  -d 'date_preset=last_30_days' \
  -d 'time_increment=all_days' \
  -d 'breakdowns=placement' \
  --data-urlencode 'filtering=[ 
    { 
      "field": "action_type", 
      "operator": "IN", 
      "value": ["link_click"] 
    } 
  ]' \
  -d 'fields=impressions,inline_link_clicks,actions,website_ctr' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

الاستجابة:

{
...
   "website_ctr": [
      {
         "action_carousel_card_id": "1",
         "action_type": "link_click",
         "value": 51.401869158878
      },
      {
         "action_carousel_card_id": "2",
         "action_type": "link_click",
         "value": 50.980392156863
      }
   ],
   "placement": "mobile_feed",
   "date_start": "2015-05-25",
   "date_stop": "2015-05-28"
}

يمكنك أيضًا طلب cost_per_action_type لتقسيم التكاليف حسب نوع الإجراء:

use FacebookAds\Object\AdAccount;
use FacebookAds\Object\Fields\AdsInsightsFields;
use FacebookAds\Object\Values\AdsInsightsActionBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsBreakdownsValues;
use FacebookAds\Object\Values\AdsInsightsLevelValues;

$account = new AdAccount('act_<AD_ACCOUNT_ID>');

$params = array(
  'action_breakdowns' => array(
    AdsInsightsActionBreakdownsValues::ACTION_TYPE,
    AdsInsightsActionBreakdownsValues::ACTION_CAROUSEL_CARD_NAME,
  ),
  'level' => AdsInsightsLevelValues::AD,
  'breakdowns' => AdsInsightsBreakdownsValues::PLACEMENT,
);

$fields = array(
  AdsInsightsFields::IMPRESSIONS,
  AdsInsightsFields::CAMPAIGN_NAME,
  AdsInsightsFields::COST_PER_ACTION_TYPE,
);

$stats = $account->getInsights($fields, $params);
from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adsinsights import AdsInsights

account = AdAccount('act_<AD_ACCOUNT_ID>')

params = {
    'action_breakdowns': [
        AdsInsights.ActionBreakdowns.action_type,
        AdsInsights.ActionBreakdowns.action_carousel_card_name,
    ],
    'fields': [
        AdsInsights.Field.impressions,
        AdsInsights.Field.campaign_name,
        AdsInsights.Field.cost_per_action_type,
    ],
    'level': AdsInsights.Level.ad,
}

stats = account.get_insights(params=params)
print(stats)
APINodeList<AdsInsights> adsInsightss = new AdAccount(act_<AD_ACCOUNT_ID>, context).getInsights()
  .setActionBreakdowns("[\"action_type\",\"action_carousel_card_name\"]")
  .setLevel(AdsInsights.EnumLevel.VALUE_AD)
  .setBreakdowns("placement")
  .requestField("impressions")
  .requestField("campaign_name")
  .requestField("cost_per_action_type")
  .execute();
curl -G \
  -d 'action_breakdowns=["action_type","action_carousel_card_name"]' \
  -d 'level=ad' \
  -d 'breakdowns=placement' \
  -d 'fields=impressions,campaign_name,cost_per_action_type' \
  -d 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v2.8/act_<AD_ACCOUNT_ID>/insights

عينة من الاستجابة:

{
   "data": [
      {
         "impressions": "1862555",
         "campaign_name": "My Campaign",
         "cost_per_action_type": [
            {
               "action_carousel_card_name": "My Carousel Card 1",
               "action_type": "app_custom_event.fb_mobile_activate_app",
               "value": 0.093347346315861
            },
            {
               "action_carousel_card_name": "My Carousel Card 2",
               "action_type": "app_custom_event.fb_mobile_activate_app",
               "value": 0.38324089579301
            },
            ...
         ],
      }
   ]
}
  • تُعرف أدوات قياس تقسيم الإعلانات الدوّارة في action_report_time=impression بأنها غير دقيقة وذلك قبل 20 يونيو 2015.
  • تُعرف أدوات قياس تقسيم الإعلانات الدوّارة في action_report_time=conversion بأنها غير دقيقة وذلك قبل 20 يوليو 2015.

المواضع

إذا قمت بتحديد right_hand_column فقط ليكون موضعك، يمكنك فقط استخدام تنسيق دوّار أو فيديو واحد في مجموعة الإعلانات لديك. ولا ندعم تنسيق الفيديو عند تحديد موضع right_hand_column فقط. ويمكنك الرجوع إلى الاستهداف المتقدم والموضع.

فعلى سبيل المثال، يمكنك إنشاء مجموعة إعلانية باستخدام right_hand_column كموضعك الوحيد:

curl \
  -F 'name=RHS only Ad Set' \
  -F 'campaign_id=<CAMPAIGN_ID>' \
  -F 'daily_budget=500' \
  -F 'start_time=2017-11-21T15:41:36+0000' \
  -F 'end_time=2017-11-28T15:41:36+0000' \
  -F 'billing_event=IMPRESSIONS' \
  -F 'optimization_goal=LINK_CLICKS' \
  -F 'bid_amount=100' \
  -F 'targeting={ 
    "device_platforms": ["mobile"], 
    "geo_locations": {"countries":["US"]}, 
    "publisher_platforms": ["facebook"] ,
    "facebook_positions": ["right_hand_column"] ,  
  }' \
  -F 'status=PAUSED' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adsets
}

قم بتوفير تصميم إعلان يتضمن فيديو:

curl \
  -F 'name=Sample Creative' \
  -F 'object_story_spec={ 
    "page_id": "<PAGE_ID>", 
    "video_data": {"image_url":"THUMBNAIL_URL","video_id":"VIDEO_ID"} 
  }' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adcreatives
}

أو قم بتوفير تنسيق إعلان اللوحة لتصميم الإعلان:

curl \
  -F 'image_hash=IMAGE_HASH' \
  -F 'object_story_spec={ 
    "link_data": { 
      "call_to_action": {"type":"LEARN_MORE"}, 
      "image_hash": "IMAGE_HASH", 
      "link": "CANVAS_LINK", 
      "name": "Creative message" 
    }, 
    "page_id": "PAGE_ID" 
  }' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/adcreatives
}

إذا كنت تحاول إنشاء إعلان مع المجموعة الإعلانية وتصميم الإعلان:

curl \
  -F 'name=My Ad' \
  -F 'adset_id=<AD_SET_ID>' \
  -F 'creative={"creative_id":"CREATIVE_ID"}' \
  -F 'status=ACTIVE' \
  -F 'access_token=ACCESS_TOKEN' \
  https://graph.facebook.com/VERSION/act_AD_ACCOUNT_ID/ads
    </c:code>
    
    }

فستحصل على رمز الخطأ التالي، وفي هذه الحالة، يجب توفير تصميم مدعوم أو تغيير الاستهداف.