Du kannst Video- und Carousel Ads auf Facebook ganz einfach mit der API erstellen, messen und optimieren. Mehr dazu erfährst du unter Facebook for Business, Carousel Ads. Die unterstützten Videoformate für Werbeanzeigen findest du im Hilfebereich für Werbetreibende, Videos.
Gehe wie folgt vor, um eine Video Ad im Ziel VIDEO_VIEWS
zu erstellen und das Gebot für Reichweite zu optimieren:
Erstelle ein Video Ad mit einer bestehenden Video-ID und einem auf Facebook hochgeladenen Video.
Voraussetzungen:
pages_read_engagement
und ads_management
act_{ad-account-id}/advideos
hochgeladen wurdeuse 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
Verwende Slideshows, wenn du Markenkampagnen für traditionelle Mobiltelefone in Schwellenländern erweitern oder starten oder wenn du ein einfaches Video erstellen möchtest. Lade Bilder in ein Videoelement hoch. Beispiel:
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
Mehr dazu erfährst du unter Best Practices für Videowerbeanzeigen und Referenz: Ad Videos.
Setze das Ziel auf VIDEO_VIEWS
:
Mehr dazu erfährst du unter Referenz: Kampagne, AdObjectives in PHP und AdObjectives in Python
Wenn du die niedrigsten Kosten pro Aufruf erreichen möchtest, solltest du das Kampagnenziel „Videoaufrufe“ mit den optimization_goal=THRUPLAY
einer Anzeigengruppe kombinieren. Du kannst bidding_event
auf IMPRESSIONS
oder THRUPLAY
setzen, um pro Impression oder Videoaufruf zu bezahlen. Mehr dazu erfährst du unter CPV-Gebote.
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
Die Kosten pro Aufruf für Anzeigengruppen mit optimization_goal=THRUPLAY
sind im Vergleich zu CPVs aus der Buchungsart „Reichweite und Frequenz“ mit Optimierung für Videoaufrufe geringer. Mehr dazu erfährst du unter Referenz: Anzeigengruppe.
Verwende die Anzeigengruppe und die Anzeigengestaltung, die du eingerichtet hast:
Wenn das Kampagnenziel VIDEO_VIEWS
lautet, erhält die Werbeanzeige standardmäßig die richtige Tracking-Spezifikation, die definiert, welche Handlungen für eine Werbeanzeige verfolgt werden. Beispiel für Videoaufrufe:
{'action.type':'video_view','post':'POST_ID','post.wall':'PAGE_ID'}
Mehr dazu erfährst du unter Werbeanzeigenmanager: Meine Kampagnen und Referenz: Werbeanzeige.
Im Blog zur Markenbekanntheit erhältst du Informationen zum Erstellen einer Video Ad für Markenbekanntheit.
Verwende das Kampagnenziel „Videoaufrufe“ mit Reichweite und Frequenz, um mehr Menschen mit einem Video zu erreichen. Du musst eine Vorhersage erstellen, reservieren und deiner Anzeigengruppe zuweisen.
Führe die Schritte in Erstellung von Videoaufrufen aus, wende aber „Reichweite und Frequenz“ auf deine Anzeigengruppe an. Gib diese zusätzlichen Parameter an:
$adset->{AdSetFields::RF_PREDICTION_ID} = <RESERVATION_ID>;
Lies dir die Informationen unter Videowerbung im Carousel-Format durch, wenn du nicht nur die Bekanntheit, sondern auch Interaktionen steigern möchtest.
Über das Remarketing mit Video Ads können Werbetreibende bestimmte Custom Audiences aus organischen oder bezahlten Videos auf Facebook und Instagram ansprechen. Anhand dieses Features kannst du nicht nur die Bekanntheit steigern, sondern auch tiefer gehende Funnel-Ziele wie Affinität und Erwägung. Mehr dazu erfährst du unter Forschung: Kreative Kombinationen, die funktionieren.
Du benötigst Werbekundenberechtigung für die Seite, die ein Video enthält, um eine Zielgruppe für dieses Video zu erstellen.
Lege subtype=ENGAGEMENT
für die Zielgruppe fest. Verfasse dann Regeln für die gewünschte Zielgruppe. Jede Regel hat eine object_id
wie eine Video-ID und einen event_name
. Der event_name
ist einer der Folgenden:
video_watched
: Wie oft dein Video mindestens insgesamt 3 Sekunden oder fast komplett angesehen wurde, je nachdem, was zuerst eintritt.video_completed
: Wie oft dein Video bis zu 95 % der Länge angesehen wurde, einschließlich Aufrufe, bei denen das Video bis zu diesem Punkt übersprungen wurde.video_view_10s
: Wie oft dein Video mindestens insgesamt 10 Sekunden oder fast komplett angesehen wurde, je nachdem, was zuerst eintritt. video_view_15s
: Wie oft dein Video mindestens insgesamt 15 Sekunden oder fast komplett angesehen wurde, je nachdem, was zuerst eintritt.video_view_25_percent
: Wie oft dein Video bis zu 25 % der Länge angesehen wurde, einschließlich Aufrufe, bei denen das Video bis zu diesem Punkt übersprungen wurde.video_view_50_percent
: Wie oft dein Video bis zu 50 % der Länge angesehen wurde, einschließlich Aufrufe, bei denen das Video bis zu diesem Punkt übersprungen wurde.video_view_75_percent
: Wie oft dein Video bis zu 75 % der Länge angesehen wurde, einschließlich Aufrufe, bei denen das Video bis zu diesem Punkt übersprungen wurde.Du kannst Videos kombinieren, um eine Zielgruppe basierend auf verschiedenen Videos und Handlungen zu erstellen. Eine Zielgruppe könnte beispielsweise Aufrufe von 3 Sekunden von Video A und vollständige Aufrufe von Videos B und C enthalten.
So erstellst du eine Zielgruppe aus den vergangenen 14 Tagen mit Videoaufrufen von mehr als 3 Sekunden von Video 1 und vollständigen Videoaufrufen von Video 2. Die Zielgruppe bietet außerdem automatische Ausfüllung für Betrachter vor der Zielgruppenerstellung mit 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
Backfill unterstützt für Videoaufrufe nach dem 16. Oktober 2015.
Videos mit Call to Action (CTA) fordern Betrachter auf, mehr Infos anzuzeigen und eine bestimmte Seite auf einer Webseite zu besuchen. Verbessere die Performance, wenn dein primäres Ziel die Steigerung von Videoaufrufen oder Markenbekanntheit ist und dein sekundäres Ziel die Steigerung von Offsite-Klicks. Für Letzteres solltest du eine Video Link Ad verwenden. So werden CTAs angezeigt:
Du kannst Videos mit CTAs nur mit den folgenden Kampagnenzielen verwenden:
PAGE_LIKES
LINK_CLICKS
CONVERSIONS
VIDEO_VIEWS
BRAND_AWARENESS
Mehr dazu erfährst du unter Videoerweiterung auf zusätzliche Ziele. So erstellst du eine Video Ad mit dem Call to Action 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
Erfahre mehr über die Performance deiner Videos auf Facebook und treffe fundierte Entscheidungen zum Video-Content. Derzeit bieten wir nur Kennzahlen an, wenn jemand damit beginnt, Videos anzusehen. Diese Zahlen umfassen Videoaufrufe, einmalige Videoaufrufe, die durchschnittliche Dauer des Videoaufrufs und die Zielgruppenbindung. Finde heraus, an welcher Stelle Betrachter deine Videos abbrechen und welche Teile besonders gut ankommen.
Verwende die Ad Insights API. Die Antwort enthält verschiedene Videokennzahlen.
Rufe Video Ad-Statistiken gruppiert nach Videoart ab wie Autoplay, Click-to-Play. Nimm action_video_type
in action_breakdowns
auf. Die erwarteten Werte für action_video_type
lauten total
, click_to_play
und auto_play
.
Wir testen die action_video_type
-Option momentan in einer eingeschränkten Version. Um Kunden mit der Aufschlüsselung zu identifizieren, prüfe CAN_USE_VIDEO_METRICS_BREAKDOWN
für das Werbekonto.
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
Die Antwort enthält Objekte mit action_type
als video_view
sowie mit dem Schlüssel 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==" } } }
Mehr dazu erfährst du unter Ad Insights API
Lasse deiner Kreativität im Feed freien Lauf und leite Besucher zur Conversion zu deiner Webseite oder deinen mobilen App um. Du erstellst eine Carousel Ad auf zwei Arten:
Carousel Ads werden für Facebook Stories nicht unterstützt.
Erstelle einen Carousel Ad-Seitenbeitrag beim Erstellen einer Anzeigengestaltung. Gib den Inhalt des Seitenbeitrags in object_story_spec
an. Dadurch wird ein unveröffentlichter Seitenbeitrag aus adcreatives
erstellt. Siehe Gestaltung der Werbeanzeige. Beispiel:
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
Die Antwort ist eine Anzeigengestaltungs-ID:
{"id":"<CREATIVE_ID>"}
Erstelle einen unveröffentlichten Seitenbeitrag. child_attachments
ist ein Array mit Linkobjekten. In jedem Linkobjekt sind picture
, name
und description
optional. Du kannst diese Beiträge nur mit einem Seiten-Zugriffsschlüssel im Namen der Seite posten.
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
Stelle dann eine Anzeigengestaltung mit dem unveröffentlichten Seitenbeitrag bereit. Verwende die id
für die object_story_id
in deiner Anzeigengestaltung.
Video Carousel Ads können einen „caption“-Wert im untergeordneten Anhang aufweisen, um die Anzeige-URL auf dem Endbildschirm anzupassen:
"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" }, ]
Um Details zum untergeordneten Anhang abzurufen, verwende die ID und rufe Graph API, Video, Referenz auf.
Einschränkungen:
child_attachment
angeben solltest. Du musst den Link in call_to_action:{'value':{'link':... }}}
nicht erneut angeben.So erstellst du beispielsweise eine Carousel Ad für mobile App-Installationen:
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
Du kannst deinen Beitrag nur über die Facebook-Seite veröffentlichen, die mit der mobilen App verknüpft ist. Außerdem musst du einen Seiten-Zugriffsschlüssel verwenden.
$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
Erstelle die AdCreative mit der id
aus der Antwort:
Diese Carousel Ad auf iOS zeigt, wie die beschriebenen Felder genutzt werden.
Name | Beschreibung |
---|---|
Typ: object | Ein Array mit 2 bis 10 Linkobjekten, die für Carousel Ads erforderlich sind. Du solltest mindestens drei Objekte für die optimale Performance verwenden. Zwei Objekte dienen zur Aktivierung einfacher Integrationen und können zu suboptimalen Kampagnenergebnissen führen. |
Typ: String | Link-URL oder App Store-URL für den Beitrag. Erforderlich. |
Typ: URL | Das mit dem Link verknüpfte Vorschaubild. Seitenverhältnis von 1:1 und mindestens 458 x 458 Pixel für die beste Anzeige. |
Typ: String | Hash des Vorschaubildes für den Link aus deiner Bildsammlung mit Seitenverhältnis von 1:1 und mindestens 458 x 458 Pixel für die beste Anzeige. |
Typ: String | Titel der Linkvorschau. Wenn dieser nicht angegeben wird, wird der Titel der verknüpften Seite verwendet. Wird in der Regel nach 35 Zeichen abgeschnitten. Du solltest einen eindeutigen |
Typ: String | Entweder ein Preis, ein Rabatt oder eine Webseiten-Domain. Wenn du keinen Wert angibst, wird der Inhalt von der verknüpften Seite extrahiert und verwendet. Wird in der Regel nach 30 Zeichen abgeschnitten. |
Typ: object | Optionaler Call to Action. Siehe Call To Action. Du musst den Link in |
Typ: String | Die ID des Anzeigenvideos. Kann in jedem untergeordneten Element verwendet werden. Wenn du dies angibst, musst du auch |
Typ: String | Hauptteil des Beitrags, auch als Statusmeldung bezeichnet. |
Typ: String | URL eines Links für „Mehr anzeigen“. Erforderlich. |
Typ: String | URL, die im Link „Mehr anzeigen“ erscheinen soll. Gilt nicht für Carousel Mobile App Ads |
Typ: Boolescher Wert | Wenn dieses Feld auf |
Typ: Boolescher Wert | Wenn dieses Feld auf |
Gruppiere Handlungen für Carousel Ads nach den einzelnen Produkten mit actions_breakdown=['action_carousel_card_id', 'action_carousel_card_name']
. Jeder child_attachment
hat eine eigene Karten-ID. action_carousel_card_id
und action_carousel_card_name
sind nur für Carousel Ads vorgesehen.
Rufe die folgenden Statistiken pro Karte ab:
website_ctr
: verfügbar bei Angabe von 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.*
: verfügbar bei Angabe von fields=['actions']
. Andere Handlungen sind bei der Aufschlüsselung von Karten nicht verfügbar.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
Antwort:
{ ... "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" }
Du kannst auch cost_per_action_type
anfragen, um eine Aufschlüsselung der Kosten nach Handlungsart abzurufen:
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
Beispielantwort:
{ "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
sind vor dem 20. Juni 2015 (20.06.2015) ungenau. action_report_time=conversion
sind vor dem 20. Juli 2015 (20.07.2015) ungenau.Wenn du nur right_hand_column
als Platzierung auswählst, kannst du lediglich das Format „Einzelnes Video“ oder das Carousel-Format in deiner Anzeigengruppe verwenden. Das Videoformat wird nicht unterstützt, wenn nur die right_hand_column
-Platzierung gewählt wird. Mehr dazu erfährst du unter Erweiterte Optionen für Targeting und Platzierung.
Erstelle zum Beispiel eine Anzeigengruppe mit right_hand_column
als einzige Platzierung:
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 }
Gib eine Anzeigengestaltung mit einem Video an:
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 }
Du kannst auch ein Canvas-Anzeigenformat für die Anzeigengestaltung angeben:
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 }
Versuche, eine Werbeanzeige mit der Anzeigengruppe und der Anzeigengestaltung zu erstellen:
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> }
Du erhältst einen Fehlercode. In diesem Fall musst du eine unterstützte Werbeanzeige bereitstellen oder das Targeting ändern.