ينظم فيسبوك الإعلانات ضمن بنية مكونة من ثلاثة مستويات: الحملة الإعلانية والمجموعة الإعلانية والإعلان. في API، يمكن للمطوّرين الوصول إلى مستوى رابع يُعرف بالتصميم.
تحتوي هذه الكائنات على هدفك الإعلاني ومجموعة إعلانية واحدة أو أكثر. يساعدك هذا في تحسين النتائج وقياسها لكل هدف إعلاني.
تحتوي المجموعات الإعلانية على إعلان واحد أو أكثر. يمكنك تحديد الميزانية والجدول الزمني لكل مجموعة إعلانية. قم بإنشاء مجموعة إعلانية لكل جمهور مستهدف من خلال عرض الأسعار؛ تستهدف الإعلانات الموجودة في المجموعة الجمهور نفسه من خلال عرض الأسعار نفسه. يساعد هذا في التحكم في المبلغ الذي تنفقه على كل جمهور، وتحديد متى سيشاهد الجمهور إعلاناتك، وتوفير أدوات قياس لكل جمهور.
يحتوي على تصميم إعلان. أنشئ إعلانات متعددة في كل مجموعة إعلانية لتحسين عرض الإعلانات استنادًا إلى الصور أو الروابط أو مقاطع الفيديو أو النصوص أو المواضع المختلفة.
تحتوي فقط على العناصر المرئية للإعلان، ولا يمكنك تغييرها بعد إنشائها. يحتوي كل حساب إعلاني على مكتبة تصميمات لتخزين التصميمات وإعادة استخدامها في الإعلانات.
الهدف | الجدول الزمني | الميزانية | عروض الأسعار | الاستهداف | التصميم | |
---|---|---|---|---|---|---|
الحملة الإعلانية | ✓ | |||||
المجموعة الإعلانية | ✓ | ✓ | ✓ | ✓ | ||
الإعلان | ✓ |
التعيين بين التسمية العامة للكائن ونقاط نهاية API:
الاسم المعروض للعامة | نقطة نهاية API |
---|---|
الحملة الإعلانية | /campaigns |
المجموعة الإعلانية | /adsets |
الإعلان | /ads |
التصميم | /adcreatives |
تمثل الحملة الإعلانية أعلى مستوى في البنية التنظيمية داخل الحساب الإعلاني، ويجب أن تمثل هدفًا واحدًا للمعلن، على سبيل المثال، زيادة التفاعل مع منشور صفحة. يؤدي تحديد هدف الحملة إلى فرض التحقق من صحة أي إعلانات تتم إضافتها إلى تلك الحملة للتأكد من أنها تحتوي أيضًا على الهدف الصحيح.
في مدير الإعلانات، يتم عرض كل الحملات الإعلانية النشطة والمتوقفة مؤقتًا داخل الحساب الإعلاني.
لقراءة الحملات الإعلانية المرتبطة بحساب محدد، أرسل طلبًا لربط الحساب الإعلاني الذي تستخدمه. بشكل افتراضي نرجع فقط الحملات الإعلانية التي تكون حالتها ACTIVE
أو PAUSED
، لذلك تحتاج إلى تحديد حالات إضافية إذا لزم الأمر:
curl -X GET \
-d 'effective_status=[
"ACTIVE",
"PAUSED"
]' \
-d 'fields="name,objective"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
نعرض أيضًا بعض الرؤى عالية المستوى، بما في ذلك مرات الظهور والنقرات والمبلغ الذي تم إنفاقه. يمكنك استردادها عن طريق استدعاء نقطة النهاية التالية، مع تحديد وقت البدء و/أو الانتهاء اختياريًا:
use FacebookAds\Object\Campaign;
$campaign = new Campaign(<CAMPAIGN_ID>);
$insights = $campaign->getInsights(array(
AdsInsightsFields::IMPRESSIONS,
AdsInsightsFields::INLINE_LINK_CLICKS,
AdsInsightsFields::SPEND,
), array(
'end_time' => (new \DateTime('now'))->getTimestamp(),
));
from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adsinsights import AdsInsights
import time
fields = [
AdsInsights.Field.impressions,
AdsInsights.Field.inline_link_clicks,
AdsInsights.Field.spend,
]
params = {
'end_time': int(time.time()),
}
campaign = Campaign(<CAMPAIGN_ID>)
insights = campaign.get_insights(fields=fields, params=params)
APINodeList<AdsInsights> adsInsightss = new Campaign(<CAMPAIGN_ID>, context).getInsights()
.setParam("end_time", end_time)
.requestField("impressions")
.requestField("inline_link_clicks")
.requestField("spend")
.execute();
curl -G \
-d 'end_time=1517287567' \
-d 'fields=impressions,inline_link_clicks,spend' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<CAMPAIGN_ID>/insights
الأهداف هي الإجراءات التي تريد من الأشخاص أن يتخذوها عند مشاهدة إعلانك. يتعين عليك تحديد الهدف الذي اخترته أثناء إنشاء الحملة.
تحديد الهدف بشكل صريح تترتب عليه العديد من المزايا:
الحد الأدنى لاستدعاء API المطلوب لإنشاء حملة إعلانية هو:
curl -X POST \
-F 'name="My First Campaign"' \
-F 'objective="OUTCOME_ENGAGEMENT"' \
-F 'status="PAUSED"' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
المجموعات الإعلانية عبارة عن مجموعات من الإعلانات، ويتم استخدامها لتكوين الميزانية والفترة التي يجب عرض الإعلانات خلالها. يجب أن يكون لجميع الإعلانات الموجودة ضمن المجموعة الإعلانية خصائص الاستهداف نفسها والميزانية والفوترة وهدف التحسين والمدة.
curl -X POST \
-F 'name="My First AdSet"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2024-11-28T06:54:48-0800"' \
-F 'end_time="2024-12-05T06:54:48-0800"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=500' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="POST_ENGAGEMENT"' \
-F 'targeting={
"age_min": 20,
"age_max": 24,
"behaviors": [
{
"id": 6002714895372,
"name": "All travelers"
}
],
"genders": [
1
],
"geo_locations": {
"countries": [
"US"
],
"regions": [
{
"key": "4081"
}
],
"cities": [
{
"key": "777934",
"radius": 10,
"distance_unit": "mile"
}
]
},
"interests": [
{
"id": "<INTEREST_ID>",
"name": "<INTEREST_NAME>"
}
],
"life_events": [
{
"id": 6002714398172,
"name": "Newlywed (1 year)"
}
],
"facebook_positions": [
"feed"
],
"publisher_platforms": [
"facebook",
"audience_network"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/adsets
يمكنك إدراج جميع المجموعات الإعلانية ضمن الحملة عن طريق إرسال طلب إلى المسار التالي، مع تحديد الحقول والحالات التي تريدها:
curl -X GET \
-d 'fields="name,start_time,end_time,daily_budget,lifetime_budget"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<AD_CAMPAIGN_ID>/adsets
يحتوي كائن الإعلان على جميع المعلومات اللازمة لعرض إعلان على فيسبوك، بما في ذلك التصميم.
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/v21.0/act_<AD_ACCOUNT_ID>/ads
لعرض معاينة لإعلانك، راجع الدليل.
أخيرًا، إذا كنت تريد إدراج جميع الإعلانات الخاصة بمجموعة إعلانية، فيمكنك إرسال طلب إلى المسار التالي، مع تحديد الحقول التي تريد استردادها:
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Values\ArchivableCrudObjectEffectiveStatuses;
use FacebookAds\Object\Fields\AdFields;
$adset = new AdSet(<AD_SET_ID>);
$ads = $adset->getAds(array(
AdFields::NAME,
AdFields::CONFIGURED_STATUS,
AdFields::EFFECTIVE_STATUS,
AdFields::CREATIVE,
), array(
AdFields::EFFECTIVE_STATUS => array(
ArchivableCrudObjectEffectiveStatuses::ACTIVE,
ArchivableCrudObjectEffectiveStatuses::PAUSED,
ArchivableCrudObjectEffectiveStatuses::PENDING_REVIEW,
ArchivableCrudObjectEffectiveStatuses::PREAPPROVED,
),
));
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.ad import Ad
fields = [
Ad.Field.name,
Ad.Field.configured_status,
Ad.Field.effective_status,
Ad.Field.creative,
]
params = {
Ad.Field.effective_status: [
'ACTIVE',
'PAUSED',
'PENDING_REVIEW',
'PREAPPROVED',
],
}
ad_set = AdSet(<AD_SET_ID>)
ads = ad_set.get_ads(fields=fields, params=params)
APINodeList<Ad> ads = new AdSet(<AD_SET_ID>, context).getAds()
.setEffectiveStatus("[\"ACTIVE\",\"PAUSED\",\"PENDING_REVIEW\",\"PREAPPROVED\"]")
.requestNameField()
.requestConfiguredStatusField()
.requestEffectiveStatusField()
.requestCreativeField()
.execute();
curl -G \
--data-urlencode 'effective_status=[
"ACTIVE",
"PAUSED",
"PENDING_REVIEW",
"PREAPPROVED"
]' \
-d 'fields=name,configured_status,effective_status,creative' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<AD_SET_ID>/ads
قد تجد أن العدد الإجمالي للإعلانات أكبر من العدد الذي تريد عرضه في صفحة واحدة. في هذه الحالة يجب أن تحدد حقل limit
كعدد العناصر التي تريد استردادها، ثم تقسيم العناصر المتبقية إلى صفحات.
يتم تنفيذ تقسيم الصفحات باستخدام المؤشرات التي تم إرجاعها كجزء من الاستجابة:
"paging": { "previous" : "https://graph.facebook.com/...", "next": "https://graph.facebook.com/...", "cursors": { "before": "NjAxNjc3NTU1ODMyNw==", "after": "NjAxMTc0NTU2MjcyNw==" }
إذا كانت هناك صفحات إضافية لاستردادها، فإن الاستجابة ستتضمن الحقلين previous
وnext
، ويمكن استدعاء عناوين URL هذه لاسترداد صفحات البيانات هذه. اقرأ المزيد عن تقسيم الصفحات استنادًا إلى المؤشر.