Вы можете легко создавать и оптимизировать видеорекламу и рекламу с кольцевой галереей на Facebook, а также отслеживать их показатели с помощью API. См. статью Facebook for Business: реклама с кольцевой галереей. Поддерживаемые форматы видео см. в этой статье Справочного центра для рекламодателей.
Чтобы создать видеорекламу для цели VIDEO_VIEWS
и оптимизировать ставки для максимизации охвата, выполните следующие действия:
Создайте объявление, используя ID существующего видео и видео, загруженное на Facebook.
Вам понадобятся:
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
:
См. статьи Справка: кампания, Цели рекламы в PHP и Цели рекламы в Python.
Если ваша цель — минимизация стоимости просмотра, используйте цель кампании "Просмотры видео" в сочетании с параметром optimization_goal=THRUPLAY
группы объявлений. Для параметра bidding_event
можно задать значение IMPRESSIONS
или THRUPLAY
в зависимости от того, собираетесь ли вы платить за показы или за просмотры видео. См. статью Ставки CPV.
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
Ставки при оплате за просмотры (CPV) для групп объявлений с целью optimization_goal=THRUPLAY
ниже по сравнению со ставками CPV для охвата и частоты с оптимизацией для просмотров видео. См. справку по группам объявлений.
Используйте существующую группу объявлений и рекламный креатив:
Если для компании выбрана цель VIDEO_VIEWS
, по умолчанию для объявления задаются подходящие параметры отслеживания, которые определяют, какие именно действия для рекламы необходимо отслеживать. Пример для просмотров видео:
{'action.type':'video_view','post':'POST_ID','post.wall':'PAGE_ID'}
См. Ads Manager: мои кампании и справку по объявлениям.
Чтобы создать видеорекламу для повышения узнаваемости бренда, ознакомьтесь с публикацией в блоге об узнаваемости бренда.
Чтобы охватить своим видео больше пользователей, задайте для кампании типа "Просмотры видео" цель Охват и частота. Необходимо создать прогноз, зарезервировать его и назначить группе объявлений.
Воспользуйтесь инструкциями по созданию кампании "Просмотры видео", но примените к своей группе объявлений параметры охвата и частоты. Укажите следующие дополнительные параметры:
$adset->{AdSetFields::RF_PREDICTION_ID} = <RESERVATION_ID>;
Чтобы конвертировать узнаваемость среди пользователей в конкретные действия с их стороны, ознакомьтесь со статьей Видеокреатив в формате кольцевой галереи.
Ремаркетинг видеорекламы помогает рекламодателям охватывать определенные пользовательские аудитории с помощью органических или платных видео как на Facebook, так и в Instagram. Эта функция позволяет конвертировать узнаваемость бренда среди пользователей в цели, находящиеся на более глубоких уровнях воронки, такие как приверженность и рассмотрение. См. исследование об эффективных сочетаниях креативов.
Чтобы создать аудиторию для видео, необходимы разрешения рекламодателя для страницы, содержащей это видео.
Установите для аудитории параметр subtype=ENGAGEMENT
. Затем составьте правила для аудитории, которую нужно создать. У каждого правила есть идентификатор object_id
, например 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 секунд, а также тех, кто полностью просмотрел видео Б и В.
Следующий код позволяет создать аудиторию пользователей, которые за последние 14 дней смотрели видео 1 в течение не менее чем 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 г.
Видео с призывом к действию предлагают пользователям зайти на определенную страницу сайта, чтобы ознакомиться с более подробной информацией. Вы можете улучшить результаты, когда основная цель состоит в увеличении количества просмотров видео или повышении узнаваемости бренда, а дополнительная — в увеличении количества кликов вне сайта. Для дополнительной цели следует использовать видеорекламу со ссылками. Порядок отображения призыва к действию:
Видео с призывом к действию можно использовать только с перечисленными ниже целями кампании.
PAGE_LIKES
LINK_CLICKS
CONVERSIONS
VIDEO_VIEWS
BRAND_AWARENESS
См. статью о добавлении целей для видеорекламы. Этот код создает видеореклама с призывом к действию 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 Ads Insights. Соответствующий ответ содержит различные метрики видео.
Можно получить статистику видеорекламы с группировкой по типам видео (например, с автозапуском или без него). Добавьте параметр 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
Ответ содержит объекты со значением video_view
для параметра action_type
и ключом 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 Ads Insights.
Добавьте креативную рекламу своей недвижимости в Ленту и привлекайте пользователей на свой сайт или в приложение, где они смогут совершить покупку. Рекламу с кольцевой галереей можно создать двумя способами:
Реклама с кольцевой галереей не поддерживается в историях на Facebook.
Создать публикацию Страницы с рекламой с кольцевой галереей можно при создании рекламного креатива. Задайте контент публикации Страницы в параметре 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 креатива:
{"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
Затем создайте рекламный креатив на базе неразмещенной публикации Страницы. Используйте id
как object_story_id
в рекламном креативе.
Реклама с кольцевой галереей видео может содержать "подпись" в качестве дочернего прикрепленного объекта, позволяющего настроить 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" }, ]
Чтобы получить данные дочерних прикрепленных объектов, используйте ID и сделайте вызов API Graph (справка по видео).
Ограничения:
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
Создайте объект AdCreative, используя id
из ответа:
Это реклама с кольцевой галереей в iOS демонстрирует, как используются описанные поля.
Имя | Описание |
---|---|
Тип: объект | Массив, содержащий от 2 до 10 объектов ссылок для рекламы с кольцевой галереей. Для оптимальных результатов следует использовать не менее трех объектов. Для облегченной интеграции можно использовать два объекта, однако в этом случае результаты кампании могут быть хуже. |
Тип: строка | URL ссылки или URL магазина приложений, прикрепленный к публикации. Обязательный параметр. |
Тип: URL | Изображение для предварительного просмотра, связанное со ссылкой. Для оптимального отображения рекомендуется соотношение сторон 1:1 и размер не менее 458 × 458 пикселей. Должен быть указан параметр |
Тип: строка | Хэш изображения для предварительного просмотра, связанного со ссылкой из вашей библиотеки изображений. Рекомендуется соотношение сторон 1:1 и разрешение не менее 458 × 458 пикселей. Должен быть задан параметр |
Тип: строка | Заголовок ссылки для предварительного просмотра. Если он не указан, используется заголовок страницы по этой ссылке. Обычно эта строка усекается до 35 символов. Необходимо задать уникальное имя ( |
Тип: строка | Цена, скидка или домен сайта. Если этот параметр не указан, соответствующий контент извлекается из целевой страницы. Обычно эта строка усекается до 30 символов. |
Тип: объект | Необязательный призыв к действию. См. статью о призывах к действию. Повторять ссылку в |
Тип: строка | ID видеорекламы. Может использоваться в любом дочернем объекте. Если этот параметр указан, также должен быть задан параметр |
Тип: строка | Тело публикации (также называется статусом). |
Тип: строка | URL ссылки "Ещё". Обязательный параметр. |
Тип: строка | URL, отображаемый в ссылке "Ещё". Не используется в рекламе мобильного приложения с кольцевой галереей. |
Тип: логическое значение | Если задано значение |
Тип: логическое значение | Если задано значение |
Действия для рекламы с кольцевой галереей можно сгруппировать по товарам. Для этого используются параметры actions_breakdown=['action_carousel_card_id', 'action_carousel_card_name']
. У каждого объекта child_attachment
имеется собственный ID карточки. Параметры 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> }
В этом случае вы получите сообщение об ошибке. Нужно будет предоставить поддерживаемый креатив или изменить таргетинг.