Meta reklama (Marketing API) Python SDK ma'lumotnomasi
Socialift Python SDK'dagi Ads klienti Meta Marketing API bilan ishlaydi: reklama kabinetlari, targeting qidiruvi va qamrovni baholash, kampaniya, ad set, kreativ va reklamalar, custom va lookalike auditoriyalar, statistika. Kampaniya, ad set va reklamalar PAUSED holatda yaratiladi — set_status(..., "ACTIVE") chaqirilmaguncha pul sarflanmaydi. Barcha metodlar asinxron va foydalanuvchi access token'ini oladi.
from socialift import Ads35 ta metodsocialift 1.3.0 bo'yichaYangilangan:
Ads klientini qanday yaratish kerak?
Ads Meta app secret'ini app_secret sifatida oladi; u berilsa har so'rovga appsecret_proof qo'shiladi. Ads.from_env() uni FACEBOOK_APP_SECRET dan (bu nomni Facebook.from_env() ham o'qiydi), API versiyasini esa META_GRAPH_VERSION dan oladi. Boshqa klientlardan farqli o'laroq secret topilmasa xato chiqmaydi — u bo'sh qoladi va so'rovlar appsecret_proof siz ketadi. Litsenziya kaliti SOCIALIFT_LICENSE_KEY dan olinadi.
Metodlar foydalanuvchi access token'ini oladi (Page token emas): o'qish uchun ads_read, yaratish va o'zgartirish uchun ads_management ruxsati kerak. Production'da Meta ikkala ruxsat uchun ham App Review talab qiladi.
Pul xavfsizligi: kampaniya, ad set, reklama va boost_post() obyektlari PAUSED holatda yaratiladi, delivery_estimate() esa hech narsa sarflamaydi. _major bilan tugaydigan byudjet argumentlari reklama kabineti valyutasida beriladi va yuborishdan oldin CURRENCY_OFFSET (100) ga ko'paytiriladi. Meta ba'zi valyutalarda (JPY, KRW, IDR, VND, HUF va boshqalar) offset 1 ishlatadi — bunday kabinetlar uchun summani avval 100 ga bo'ling. UZS Meta'ning reklama kabineti valyutalari ro'yxatida yo'q.
Standart API versiyasi — DEFAULT_GRAPH_VERSION (v26.0). Meta har bir versiyani chiqarilganidan keyin kamida ikki yil qo'llab-quvvatlaydi, keyingisi chiqqach esa eskisining muddati yana ikki yildan so'ng tugaydi; muddati o'tgan versiyaga chaqiruvlar avtomatik ravishda hali qo'llab-quvvatlanayotgan eng eski versiyaga yo'naltiriladi. Boshqa versiya kerak bo'lsa graph_version= bilan bering va sanani Meta versiyalar sahifasidan tekshiring.
import asyncio
import os
from socialift import Ads
# Muhitdan: ads = Ads.from_env()
# (FACEBOOK_APP_SECRET, META_GRAPH_VERSION)
ads = Ads(
app_secret=os.environ["FACEBOOK_APP_SECRET"],
graph_version="v26.0", # Meta versiyalar sahifasida tekshiring
)
async def main():
# o'zingizning o'zgaruvchingiz: ads_read ruxsatli foydalanuvchi token'i
user_token = os.environ["META_USER_TOKEN"]
async with ads:
for account in await ads.ad_accounts(user_token):
print(account.id, account.name, account.currency, account.is_active)
asyncio.run(main())Klient va kalitlar
Klientni yaratish va Meta app secret'ini muhit o'zgaruvchilaridan olish.
from_env
classmethodKlientni muhit o'zgaruvchilaridan yaratadi: FACEBOOK_APP_SECRET (appsecret_proof uchun) va META_GRAPH_VERSION. Qo'shimcha argumentlar (timeout, retry, session, license_key) konstruktorga uzatiladi.
Ads.from_env(**kwargs) -> Ads- Boshqa klientlardan farqli o'laroq bo'sh kalitda xato bermaydi:
FACEBOOK_APP_SECRETbo'lmasaapp_secretbo'sh qoladi va so'rovlargaappsecret_proofqo'shilmaydi. Meta app sozlamalarida app secret talab qilinsa, bunday so'rovlar rad etiladi. META_GRAPH_VERSIONberilmasa SDK'dagi standart versiya ishlatiladi; kerakli versiyaniAds.from_env(graph_version="...")bilan ustidan yozish mumkin.- Access token bu yerda o'qilmaydi — u har bir metodga argument bo'lib beriladi.
Reklama kabinetlari va piksellar
Qaysi kabinetda ishlashni va unga ulangan piksellarni aniqlash.
ad_accounts
asyncFoydalanuvchi token'i kira oladigan reklama kabinetlarini id, name, currency va holati bilan AdAccount ro'yxati sifatida qaytaradi. Odatda birinchi chaqiruv: boshqa metodlarning ko'pchiligiga ad_account_id kerak.
await ads.ad_accounts(token: str) -> list[socialift.ads.AdAccount]- Foydalanuvchi access token'i (Page token emas) va
ads_readkerak. - Bitta sahifa, 50 tagacha kabinet qaytadi.
is_activeMeta'ningaccount_statusqiymati 1 bo'lgandaTrue.- Byudjetlar kabinet valyutasida (
currency); UZS Meta'ning reklama kabineti valyutalari ro'yxatida yo'q.
Kerakli ruxsatlar:ads_read
for account in await ads.ad_accounts(user_token):
print(account.id, account.currency)pixels
asyncReklama kabinetiga ulangan Meta piksellarini last_fired_time bilan qaytaradi. Konversiya ad set'lari (promoted_object) va sayt auditoriyalari uchun piksel ID'si kerak bo'ladi.
await ads.pixels(token: str, *, ad_account_id: str) -> list[dict]- Bitta sahifa, 50 tagacha piksel;
ads_readkerak.
Kerakli ruxsatlar:ads_read
pixels = await ads.pixels(user_token, ad_account_id="act_123")Targeting va baholash
Targeting variantlarini qidirish, spetsifikatsiya yig'ish va qamrovni baholash — pul sarflanmaydi.
build_targetingdelivery_estimatesearch_interestssearch_localessearch_locationssearch_targetingtargeting_suggestionsvalidate_targeting
build_targeting
staticmethodOddiy argumentlardan Meta targeting spetsifikatsiyasini (dict) yig'adi: joylashuv, yosh, jins, til, qiziqish, xatti-harakat, custom auditoriyalar, joylashuvlar (placements). Sof funksiya: tarmoq so'rovi ham, token ham yo'q.
Ads.build_targeting(
*,
countries: Optional[list[str]] = None,
regions: Optional[list[Any]] = None,
cities: Optional[list[Any]] = None,
zips: Optional[list[Any]] = None,
excluded_countries: Optional[list[str]] = None,
excluded_cities: Optional[list[Any]] = None,
age_min: Optional[int] = None,
age_max: Optional[int] = None,
genders: Optional[list[Any]] = None,
locales: Optional[list[int]] = None,
interests: Optional[list[Any]] = None,
behaviors: Optional[list[Any]] = None,
demographics: Optional[list[Any]] = None,
life_events: Optional[list[Any]] = None,
excluded_interests: Optional[list[Any]] = None,
custom_audiences: Optional[list[str]] = None,
excluded_custom_audiences: Optional[list[str]] = None,
platforms: Optional[list[str]] = None,
facebook_positions: Optional[list[str]] = None,
instagram_positions: Optional[list[str]] = None,
devices: Optional[list[str]] = None,
connections: Optional[list[str]] = None,
excluded_connections: Optional[list[str]] = None,
flexible_spec: Optional[list[dict]] = None,
advantage_audience: bool = True,
) -> dict[str, Any]interestsichidagi elementlar YOKI bilan birlashadi; "VA" kerak bo'lsaflexible_specbering — uning har bir elementi alohida VA sharti.genders1/2yoki"male"/"female"qabul qiladi; hammani nishonga olish uchun umuman bermang. Yosh 13–65 oralig'iga keltiriladi.advantage_audiencestandartTrue. Advantage+ audience yoqilganda Metaage_maxni 65 ga qotiradi vaage_minni faqat 18–25 oralig'ida qabul qiladi — qat'iy yosh chegarasi uchunadvantage_audience=Falsebering.- Meta ad set targeting'ida joylashuvni talab qiladi; bu yordamchi buni tekshirmaydi, shuning uchun
countries,regions,citiesyokizipsbering.
targeting = ads.build_targeting(countries=["UZ"], age_min=18, age_max=45, interests=[{"id": "6003107902433"}], advantage_audience=False)delivery_estimate
asyncTargeting spetsifikatsiyasi va optimizatsiya maqsadi uchun auditoriya hajmini hech narsa yaratmasdan va pul sarflamasdan baholaydi. Juda kichik yoki juda keng auditoriyani ad set yaratishdan oldin aniqlash uchun.
await ads.delivery_estimate(
token: str,
*,
ad_account_id: str,
targeting: dict[str, Any],
optimization_goal: str = 'REACH',
promoted_object: Optional[dict] = None,
) -> dict- Faqat o'qish: hech narsa yaratilmaydi, hech narsa hisobga yozilmaydi.
- Meta javobidagi birinchi baholash qatorini dict sifatida qaytaradi (bo'lmasa bo'sh dict).
optimization_goalstandartiREACH; ad set uchun rejalashtirgan maqsadni bering.ads_readkerak.
Kerakli ruxsatlar:ads_read
estimate = await ads.delivery_estimate(user_token, ad_account_id="act_123", targeting=targeting)search_interests
asyncMeta qiziqish (interest) targeting variantlarini nom bo'yicha qidiradi: id, name, auditoriya hajmi chegaralari va path qaytadi. ID'larni build_targeting(interests=...) da ishlating.
await ads.search_interests(token: str, query: str, *, limit: int = 25) -> list[dict]limitstandarti 25;ads_readkerak.- Meta qiziqishlarni vaqt o'tishi bilan eskirgan deb belgilaydi — saqlangan ID'larni
validate_targeting()bilan tekshiring.
Kerakli ruxsatlar:ads_read
interests = await ads.search_interests(user_token, "fitness", limit=25)
cities = await ads.search_locations(user_token, "Tosh", country_code="UZ")search_locales
asyncMeta til (locale) targeting variantlarini qidiradi va build_targeting(locales=...) uchun raqamli kalitlarni qaytaradi. Auditoriyani joylashuv emas, til bo'yicha ajratish kerak bo'lganda ishlating.
await ads.search_locales(token: str, query: str, *, limit: int = 25) -> list[dict]search_locations
asyncMeta joylashuvlarini (davlat, viloyat, shahar) nom bo'yicha qidiradi; javobdagi key targeting kutadigan identifikator. Natijani country_code bilan toraytiring.
await ads.search_locations(
token: str,
query: str,
*,
location_types: tuple[str, ...] = ('city', 'region', 'country'),
country_code: Optional[str] = None,
limit: int = 25,
) -> list[dict]location_typesstandarti:city,region,country; pochta indekslari uchunzipqo'shing.- Shaharga radius berish mumkin:
{"key": "...", "radius": 25, "distance_unit": "kilometer"}; Meta 17–80 km (10–50 mil) oralig'ini qabul qiladi. ads_readkerak.
Kerakli ruxsatlar:ads_read
interests = await ads.search_interests(user_token, "fitness", limit=25)
cities = await ads.search_locations(user_token, "Tosh", country_code="UZ")search_targeting
asyncBitta sinfdagi targeting kategoriyalarini ro'yxatlaydi yoki qidiradi: behaviors, demographics, life_events, industries, income va boshqalar. query bo'lmasa butun sinf qaytadi — masalan, tanlash ro'yxatini yasash uchun.
await ads.search_targeting(
token: str,
*,
target_class: str = 'interests',
query: Optional[str] = None,
limit: int = 50,
) -> list[dict]target_classTARGETING_CLASSESdan biri bo'lishi kerak, aks holda so'rovdan oldinConfigurationError.
Berilgan targeting variantlariga o'xshashlarini (masalan, yaqin qiziqishlarni) taklif qiladi. Juda tor chiqqan auditoriyani kengaytirishning tez yo'li.
await ads.targeting_suggestions(
token: str,
*,
ad_account_id: str,
targeting_list: list[dict],
limit: int = 25,
) -> list[dict]targeting_listformati:[{"type": "interests", "id": "..."}];ads_readkerak.
Kerakli ruxsatlar:ads_read
similar = await ads.targeting_suggestions(user_token, ad_account_id="act_123", targeting_list=[{"type": "interests", "id": "6003107902433"}])validate_targeting
asyncSaqlangan targeting elementlari (qiziqish ID'lari va boshqalar) shu kabinet uchun hali yaroqli ekanini tekshiradi. Eski targeting'ni yangi ad set'da qayta ishlatishdan oldin chaqiring.
await ads.validate_targeting(
token: str,
*,
ad_account_id: str,
targeting_list: list[dict],
) -> list[dict]- Meta targeting variantlarini vaqt o'tishi bilan eskirgan deb chiqaradi, shuning uchun oylar oldin saqlangan ID endi ishlamasligi mumkin.
ads_readkerak.
Kerakli ruxsatlar:ads_read
result = await ads.validate_targeting(user_token, ad_account_id="act_123", targeting_list=[{"type": "interests", "id": "6003107902433"}])Kampaniya, ad set va reklamalar
Uch qavatni yaratish va boshqarish. Standart holatda hammasi PAUSED yaratiladi.
adsadsetadsetsboost_postcampaigncampaignscreate_adcreate_adsetcreate_campaigndeleteset_statusupdate_budgetupdate_targeting
ads
asyncReklamalarni kreativi, holati va oldindan ko'rish havolasi bilan qaytaradi — bitta ad set, bitta kampaniya yoki butun kabinet bo'yicha.
await ads.ads(
token: str,
*,
ad_account_id: Optional[str] = None,
adset_id: Optional[str] = None,
campaign_id: Optional[str] = None,
limit: int = 100,
) -> list[dict]- Ustuvorlik:
adset_id, keyincampaign_id, keyinad_account_id; hech biri bo'lmasaConfigurationError. limitgacha bitta sahifa;ads_readkerak.
Kerakli ruxsatlar:ads_read
items = await ads.ads(user_token, adset_id="120200000000001")adset
asyncBitta ad set'ni ID bo'yicha targeting, byudjetlar, bid, optimizatsiya maqsadi va jadvali bilan oladi.
await ads.adset(token: str, adset_id: str) -> dictadsets
asyncKampaniyaning (campaign_id) yoki butun reklama kabinetining (ad_account_id) ad set'larini targeting, byudjet va optimizatsiya maydonlari bilan qaytaradi.
await ads.adsets(
token: str,
*,
ad_account_id: Optional[str] = None,
campaign_id: Optional[str] = None,
limit: int = 100,
) -> list[dict]- Ikkalasi berilsa
campaign_idustun; hech biri berilmasaConfigurationError. limit(standart 100) gacha bitta sahifa;ads_readkerak.
Kerakli ruxsatlar:ads_read
adsets = await ads.adsets(user_token, campaign_id="120200000000000")boost_post
asyncMavjud Instagram postini bitta chaqiruvda reklamaga aylantiradi: kampaniya, ad set, postdan kreativ va reklamani yaratadi — hammasi PAUSED. ID'larini qaytaradi; set_status(..., "ACTIVE") chaqirilmaguncha pul sarflanmaydi.
await ads.boost_post(
token: str,
*,
ad_account_id: str,
ig_user_id: str,
media_id: str,
name: str,
daily_budget_major: float,
goal: str = 'traffic',
page_id: Optional[str] = None,
link: Optional[str] = None,
targeting: Optional[dict[str, Any]] = None,
currency: Optional[str] = None,
cleanup_on_error: bool = True,
) -> dict[str, str]goal:traffic,engagement,reachyokimessages(OUTCOME_*maqsad va optimizatsiyaga moslanadi);messagesuchunpage_idmajburiy. Kampaniya bo'shspecial_ad_categoriesbilan yaratiladi — uy-joy, ish, moliya yoki siyosat reklamasi uchun ishlatmang.daily_budget_majorkabinet valyutasida vaCURRENCY_OFFSET(100) ga ko'paytiriladi; Meta offset 1 ishlatadigan valyutalarda (JPY, KRW, IDR, VND, HUF ...) summani avval 100 ga bo'ling.targetingberilmasadefault_targeting()ishlatiladi: UZ, 18–55 yosh, Instagram joylashuvlari, Advantage+ audience yoqilgan.- To'rt obyekt ketma-ket yaratiladi: keyingi qadam xato bersa, oldingilari kabinetda (PAUSED) qoladi — ularni o'chiring. Mualliflik huquqi bilan himoyalangan musiqa yoki filtr kabi interaktiv elementli postni ko'tarib bo'lmaydi.
Kerakli ruxsatlar:ads_managementinstagram_basic
result = await ads.boost_post(user_token, ad_account_id="act_123", ig_user_id="1784...", media_id="1790...", name="Reels boost", daily_budget_major=10, goal="traffic")campaign
asyncBitta kampaniyani ID bo'yicha campaigns() dagi maydonlar bilan oladi: maqsad, holat, byudjetlar, bid strategiyasi, maxsus reklama kategoriyalari.
await ads.campaign(token: str, campaign_id: str) -> dictcampaigns
asyncReklama kabinetidagi kampaniyalarni byudjet, maqsad va holat maydonlari bilan qaytaradi. statuses bilan filtrlang, masalan ["ACTIVE", "PAUSED"].
await ads.campaigns(
token: str,
*,
ad_account_id: str,
statuses: Optional[list[str]] = None,
limit: int = 100,
) -> list[dict]statusesMeta'gaeffective_statusfiltri sifatida yuboriladi.limit(standart 100) gacha bitta sahifa qaytadi, avtomatik sahifalash yo'q.ads_readkerak.
Kerakli ruxsatlar:ads_read
campaigns = await ads.campaigns(user_token, ad_account_id="act_123", statuses=["ACTIVE", "PAUSED"])create_ad
asyncAd set ichida tayyor creative_id yoki ichma-ich creative spetsifikatsiyasidan reklama yaratadi. Standart holatda PAUSED.
await ads.create_ad(
token: str,
*,
ad_account_id: str,
name: str,
adset_id: str,
creative_id: Optional[str] = None,
creative: Optional[dict] = None,
status: str = 'PAUSED',
**extra: Any,
) -> dictcreative_idyokicreativedan biri kerak; ikkalasi berilsacreative_idishlatiladi.- Qo'shimcha Meta maydonlari
**extraorqali satr yoki son sifatida beriladi (dict'larni o'zingiz JSON qiling).
Kerakli ruxsatlar:ads_management
ad = await ads.create_ad(user_token, ad_account_id="act_123", name="Banner A", adset_id="120200000000001", creative_id="120200000000002")create_adset
asyncAd set yaratadi: reklamani kim ko'radi (targeting), qanday optimizatsiya qilinadi va — kampaniyada byudjet bo'lmasa — qancha sarflanadi. Standart holatda PAUSED yaratiladi.
await ads.create_adset(
token: str,
*,
ad_account_id: str,
name: str,
campaign_id: str,
targeting: dict[str, Any],
optimization_goal: str = 'LINK_CLICKS',
billing_event: str = 'IMPRESSIONS',
status: str = 'PAUSED',
daily_budget_major: Optional[float] = None,
lifetime_budget_major: Optional[float] = None,
bid_amount_major: Optional[float] = None,
start_time: Optional[str] = None,
end_time: Optional[str] = None,
promoted_object: Optional[dict] = None,
destination_type: Optional[str] = None,
currency: Optional[str] = None,
**extra: Any,
) -> dicttargetingbo'sh bo'lmasligi kerak —build_targeting()yokidefault_targeting()bilan yig'ing.optimization_goalvabilling_eventOPTIMIZATION_GOALSvaBILLING_EVENTSbo'yicha tekshiriladi.daily_budget_major,lifetime_budget_majorvabid_amount_majorCURRENCY_OFFSET(100) ga ko'paytiriladi; offset 1 valyutalarda (JPY, KRW, IDR, VND, HUF ...) avval 100 ga bo'ling.lifetime_budget_majorbilanend_timemajburiy. Yaratishda Meta faqatACTIVEyokiPAUSEDholatini qabul qiladi.- Ba'zi maqsadlar
promoted_objectni talab qiladi, masalan konversiyalar uchun{"pixel_id": "...", "custom_event_type": "PURCHASE"}.
Kerakli ruxsatlar:ads_management
adset = await ads.create_adset(user_token, ad_account_id="act_123", name="Toshkent 18-45", campaign_id="120200000000000", targeting=targeting, daily_budget_major=15)create_campaign
asyncKampaniya yaratadi — maqsadni va ixtiyoriy ravishda kampaniya byudjetini belgilaydigan yuqori qavat. Standart holatda PAUSED yaratiladi.
await ads.create_campaign(
token: str,
*,
ad_account_id: str,
name: str,
objective: str = 'OUTCOME_TRAFFIC',
status: str = 'PAUSED',
daily_budget_major: Optional[float] = None,
lifetime_budget_major: Optional[float] = None,
bid_strategy: Optional[str] = None,
special_ad_categories: Optional[list[str]] = None,
special_ad_category_country: Optional[list[str]] = None,
is_adset_budget_sharing_enabled: Optional[bool] = None,
currency: Optional[str] = None,
**extra: Any,
) -> dictobjectiveOBJECTIVESdagiOUTCOME_*qiymatlardan biri bo'lishi kerak; eski nomlarConfigurationErrorberadi.special_ad_categorieshar doim yuboriladi (berilmasa bo'sh ro'yxat): Meta har bir kampaniyadan kategoriyani e'lon qilishni talab qiladi, masalanHOUSING,EMPLOYMENT,FINANCIAL_PRODUCTS_SERVICES,ISSUES_ELECTIONS_POLITICS.- Byudjet yo shu yerda (
daily_budget_majoryokilifetime_budget_major, bittasi), yo ad set'larda beriladi, ikkalasida emas. SummaCURRENCY_OFFSET(100) ga ko'paytiriladi — JPY, KRW kabi offset 1 valyutalarda avval 100 ga bo'ling. - Marketing API v24.0 dan boshlab o'z byudjeti yo'q kampaniya
is_adset_budget_sharing_enabledni talab qiladi; uni**extraorqali satr ko'rinishida bering ("false"yoki"true").
Kerakli ruxsatlar:ads_management
campaign = await ads.create_campaign(user_token, ad_account_id="act_123", name="Kuz aksiyasi", objective="OUTCOME_TRAFFIC", daily_budget_major=20)delete
asyncKampaniya, ad set, reklama yoki boshqa Marketing API obyektini ID bo'yicha HTTP DELETE bilan o'chiradi. Sarfni to'xtatib, obyektni saqlab qolish uchun set_status(..., "PAUSED") ishlating.
await ads.delete(token: str, node_id: str) -> bool- Meta'ning
successbelgisini qaytaradi;ads_managementkerak.
Kerakli ruxsatlar:ads_management
await ads.delete(user_token, node_id)set_status
asyncKampaniya, ad set yoki reklama holatini o'zgartiradi. ACTIVE sarfni boshlaydi; PAUSED ko'rsatishni to'xtatadi va reklamani o'chirishning xavfsiz usuli.
await ads.set_status(token: str, node_id: str, status: str) -> bool- Qabul qilinadigan qiymatlar:
ACTIVE,PAUSED,ARCHIVED,DELETED; boshqasiConfigurationError. - Kampaniya yoki ad set to'xtatilgan bo'lsa, ichidagi reklamaning effektiv holati
CAMPAIGN_PAUSEDyokiADSET_PAUSEDbo'ladi. ads_managementkerak.
Kerakli ruxsatlar:ads_management
await ads.set_status(user_token, campaign_id, "ACTIVE")update_budget
asyncAd set'ga yangi kunlik byudjet o'rnatadi. Ishlab turgan reklamaga darhol ta'sir qiladi, shuning uchun summani ikki marta tekshiring.
await ads.update_budget(
token: str,
adset_id: str,
daily_budget_major: float,
*,
currency: Optional[str] = None,
ad_account_id: Optional[str] = None,
) -> booldaily_budget_majornoldan katta bo'lishi kerak vaCURRENCY_OFFSET(100) ga ko'paytiriladi; offset 1 valyutalarda avval 100 ga bo'ling.ads_managementkerak.
Kerakli ruxsatlar:ads_management
await ads.update_budget(user_token, adset_id, daily_budget_major=25)update_targeting
asyncMavjud ad set targeting'ini berilgan spetsifikatsiya bilan almashtiradi. O'zgarish emas, to'liq yangi spetsifikatsiyani bering.
await ads.update_targeting(token: str, adset_id: str, targeting: dict[str, Any]) -> bool- Bo'sh
targetingConfigurationErrorberadi;ads_managementkerak. - Advantage+ audience yosh qoidalari bu yerda ham amal qiladi (
build_targeting()ga qarang).
Kerakli ruxsatlar:ads_management
await ads.update_targeting(user_token, adset_id, targeting)Kreativlar va rasmlar
Reklama ko'rinishi: rasm yuklash, kreativ yaratish, oldindan ko'rish.
create_creativepreviewupload_image
create_creative
asyncPage, havola, matn va yuklangan rasm (image_hash) yoki video (video_id) dan havolali reklama kreativini yaratadi. Mavjud post emas (boost_post()), reklama uchun alohida kreativ kerak bo'lganda ishlating.
await ads.create_creative(
token: str,
*,
ad_account_id: str,
name: str,
page_id: str,
link: str,
message: Optional[str] = None,
headline: Optional[str] = None,
description: Optional[str] = None,
image_hash: Optional[str] = None,
video_id: Optional[str] = None,
call_to_action: str = 'LEARN_MORE',
instagram_user_id: Optional[str] = None,
**extra: Any,
) -> dict- SDK
object_story_spec.link_datani yig'adi:headline—namega,call_to_action(standartLEARN_MORE) —typega tushadi. - Reklama Instagram akkaunti nomidan chiqishi uchun
instagram_user_idbering;page_idhar doim majburiy. image_hashniupload_image()dan oling.ads_managementkerak.
Kerakli ruxsatlar:ads_management
creative = await ads.create_creative(user_token, ad_account_id="act_123", name="Kuz", page_id="1111", link="https://siz.uz", message="Chegirma 30%", image_hash=image_hash)preview
asyncReklamaning tanlangan joylashuvda qanday ko'rinishini HTML (body ichida iframe) sifatida qaytaradi. Reklamani yoqishdan oldin odamga ko'rsatish uchun.
await ads.preview(
token: str,
ad_id: str,
*,
ad_format: str = 'MOBILE_FEED_STANDARD',
) -> list[dict]ad_formatstandartiMOBILE_FEED_STANDARD;DESKTOP_FEED_STANDARDva boshqa formatlar Meta'ning ad preview hujjatida.ads_readkerak.
Kerakli ruxsatlar:ads_read
previews = await ads.preview(user_token, ad_id, ad_format="INSTAGRAM_STANDARD")upload_image
asyncRasm baytlarini reklama kabinetining rasm kutubxonasiga yuklaydi va {"hash", "url", "raw"} qaytaradi. Kreativlar rasmga aynan shu hash orqali murojaat qiladi.
await ads.upload_image(
token: str,
*,
ad_account_id: str,
image: bytes,
filename: str = 'ad.jpg',
) -> dictimage— yo'l emas, xombytes;filenamefaqat yuklashdagi fayl nomi.ads_managementkerak.
Kerakli ruxsatlar:ads_management
with open("banner.jpg", "rb") as f:
image = await ads.upload_image(user_token, ad_account_id="act_123", image=f.read(), filename="banner.jpg")Auditoriyalar
Custom, lookalike va saqlangan auditoriyalar.
add_audience_userscreate_custom_audiencecreate_lookalikecustom_audiencessaved_audiences
add_audience_users
asyncMijozlar ro'yxati auditoriyasiga email va/yoki telefon bo'yicha odam qo'shadi. Qiymatlar serveringizda normallashtirilib SHA-256 bilan xeshlanadi — ochiq kontakt ma'lumoti serverdan chiqmaydi.
await ads.add_audience_users(
token: str,
audience_id: str,
*,
emails: Optional[list[str]] = None,
phones: Optional[list[str]] = None,
phone_country: Optional[str] = None,
batch_size: int = 10000,
) -> dict- Normallashtirish: email bo'shliqlardan tozalanib kichik harfga o'tkaziladi; telefonda faqat raqamlar qoladi. Boshidagi nollar olib tashlanmaydi va davlat kodi qo'shilmaydi — raqamni xalqaro formatda bering, masalan
+998901234567. - Meta bir so'rovda 10 000 tagacha yozuv qabul qiladi; katta ro'yxatni bir necha chaqiruvga bo'ling.
- Ikkala ro'yxat berilsa ular qatorma-qator bitta odam deb birlashtiriladi: uzunligi va tartibi bir xil bo'lsin (ortiqcha elementlar tashlab yuboriladi).
ads_managementkerak.
Kerakli ruxsatlar:ads_management
await ads.add_audience_users(user_token, audience_id, emails=["ali@example.com"], phones=["+998901234567"])Bo'sh custom auditoriya yaratadi — standart holatda mijozlar ro'yxati (subtype="CUSTOM"), keyin u add_audience_users() bilan to'ldiriladi.
await ads.create_custom_audience(
token: str,
*,
ad_account_id: str,
name: str,
subtype: str = 'CUSTOM',
description: Optional[str] = None,
customer_file_source: str = 'USER_PROVIDED_ONLY',
rule: Optional[dict] = None,
**extra: Any,
) -> dict- Mijozlar ro'yxati uchun kabinet Meta'ning Custom Audience Terms shartlarini qabul qilgan bo'lishi kerak, aks holda Meta shartlar qabul qilinmagani haqida xato qaytaradi.
customer_file_sourcema'lumot manbasini e'lon qiladi:USER_PROVIDED_ONLY(standart),PARTNER_PROVIDED_ONLYyokiBOTH_USER_AND_PARTNER_PROVIDED.ruleJSON qilib yuboriladi; boshqa Meta maydonlari**extraorqali.ads_managementkerak.
Kerakli ruxsatlar:ads_management
audience = await ads.create_custom_audience(user_token, ad_account_id="act_123", name="Mijozlar")create_lookalike
asyncManba auditoriyadan bitta davlat uchun o'xshash (lookalike) auditoriya yaratadi. ratio qancha kichik bo'lsa, o'xshashlik shuncha yuqori va auditoriya shuncha kichik.
await ads.create_lookalike(
token: str,
*,
ad_account_id: str,
name: str,
origin_audience_id: str,
country: str = 'UZ',
ratio: float = 0.01,
) -> dictratio0.01 dan 0.20 gacha (davlatdagi eng o'xshash 1–20%); standart 0.01,countrystandartiUZ.- Manba auditoriyada bitta davlatdan kamida 100 kishi bo'lishi kerak.
- Lookalike to'lishi 1–6 soat oladi; shu vaqtda undan foydalanadigan ad set yaratish mumkin.
ads_managementkerak.
Kerakli ruxsatlar:ads_management
lookalike = await ads.create_lookalike(user_token, ad_account_id="act_123", name="1% UZ", origin_audience_id="1202...", country="UZ", ratio=0.01)custom_audiences
asyncReklama kabinetidagi custom auditoriyalarni turi (subtype), taxminiy hajm chegaralari va yetkazish/ishlov holati bilan qaytaradi.
await ads.custom_audiences(
token: str,
*,
ad_account_id: str,
limit: int = 100,
) -> list[dict]limit(standart 100) gacha bitta sahifa;ads_readkerak.
Kerakli ruxsatlar:ads_read
custom = await ads.custom_audiences(user_token, ad_account_id="act_123")
saved = await ads.saved_audiences(user_token, ad_account_id="act_123")saved_audiences
asyncAds Manager'da saqlangan auditoriyalarni (targeting shablonlari) targeting spetsifikatsiyasi va taxminiy hajmi bilan qaytaradi.
await ads.saved_audiences(
token: str,
*,
ad_account_id: str,
limit: int = 100,
) -> list[dict]limitgacha bitta sahifa;ads_readkerak.
Kerakli ruxsatlar:ads_read
custom = await ads.custom_audiences(user_token, ad_account_id="act_123")
saved = await ads.saved_audiences(user_token, ad_account_id="act_123")Statistika
Sarf va natijalar: umumiy yoki kesimlar bo'yicha.
insights
asyncKampaniya, ad set, reklama yoki kabinet bo'yicha sarf va natijalarni AdInsights (spend, impressions, reach, clicks, link_clicks, cpc, ctr, frequency) sifatida qaytaradi. Tezkor umumiy ko'rsatkichlar kartasi uchun.
await ads.insights(
token: str,
node_id: str,
*,
since: Optional[str] = None,
until: Optional[str] = None,
) -> socialift.ads.AdInsightssincevauntilikkalasini ham bering (YYYY-MM-DD); aks holda butun davr (date_preset=maximum) olinadi.- Faqat birinchi qator o'qiladi; kesimlar uchun
insights_rows()ni ishlating. ads_readkerak.
insights_rows
asyncTanlangan level dagi xom statistika qatorlarini ixtiyoriy breakdowns (age, gender, country, publisher_platform kabi) bilan qaytaradi. Qaysi segmentda natija arzonroq ekanini topish uchun.
await ads.insights_rows(
token: str,
node_id: str,
*,
level: str = 'campaign',
date_preset: Optional[str] = 'last_30d',
since: Optional[str] = None,
until: Optional[str] = None,
breakdowns: Optional[list[str]] = None,
action_breakdowns: Optional[list[str]] = None,
fields: Optional[str] = None,
limit: int = 200,
) -> list[dict]- Meta kesimlarning faqat ba'zi kombinatsiyalarini qo'llab-quvvatlaydi:
age+genderishlaydi,age+countryishlamaydi. since+untilberilsadate_preset(standartlast_30d) o'rniga ishlatiladi.limit(standart 200) gacha bitta sahifa;ads_readkerak.
Kerakli ruxsatlar:ads_read
rows = await ads.insights_rows(user_token, "act_123", level="campaign", date_preset="last_7d", breakdowns=["age", "gender"])Past darajadagi chaqiruvlar
SDK o'ramagan Marketing API yo'llariga to'g'ridan-to'g'ri murojaat.
call
asyncMarketing API'ning istalgan yo'lini SDK imzolashi (access_token, appsecret_proof), qayta urinishlar va xato tasnifi bilan chaqiradi. O'rami yo'q endpoint'lar, masalan avtomatik qoidalar uchun.
await ads.call(token: str, path: str, *, method: str = 'GET', **params: Any) -> Any- Argumentlar tartibi
token, path;methodstandartiGET.GET/DELETEdan boshqa hamma narsaPOSTbo'lib ketadi va haqiqiy obyektlarni o'zgartiradi. dict/listqiymatlar avtomatik JSON qilinadi; mantiqiy qiymatlarni satr sifatida bering ("true"/"false").
Kerakli ruxsatlar:ads_read
data = await ads.call(user_token, "act_123/adcreatives", method="GET", fields="id,name")Barcha klientlarda umumiy metodlar
Har bir HTTP klient (Telegram, Facebook, Instagram, LinkedIn, TikTok, Ads) shu past darajadagi metodlarga ega: SDK'da hali o'rab olinmagan endpoint'ni chaqirish yoki sahifalab o'qish uchun. async with bloki tugaganda ulanish o'zi yopiladi.
request
asyncIstalgan HTTP so'rovni yuboradi va JSON javobni qaytaradi — SDK'da hali alohida metodi yo'q endpoint uchun. Token va imzo parametrlarini (access_token, Meta uchun appsecret_proof — socialift.crypto.appsecret_proof) o'zingiz params yoki headers ga qo'shasiz.
await ads.request(
method: str,
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
data: Optional[Any] = None,
json: Optional[Any] = None,
headers: Optional[Mapping[str, str]] = None,
) -> AnyparamsdagiNoneqiymatlar yuborilmaydi.- Limit (
RateLimitError) va vaqtinchalik server xatolarida (HTTP 429, 500, 502, 503, 504)RetryPolicybo'yicha qayta uriniladi;Retry-Aftersarlavhasi bo'lsa, shuncha kutiladi. Tarmoq uzilishiTransportErrorbo'lib chiqadi.
get
asyncrequest("GET", ...) ning qisqa shakli.
await ads.get(url: str, **kw) -> Anypost
asyncrequest("POST", ...) ning qisqa shakli.
await ads.post(url: str, **kw) -> Anydelete
asyncrequest("DELETE", ...) ning qisqa shakli.
await ads.delete(url: str, **kw) -> Anypaginate
asyncMeta'ning kursorli sahifalashi (paging.next) bo'yicha yurib, barcha data elementlarini bitta ro'yxatga yig'ib qaytaradi.
await ads.paginate(
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
max_items: int = 500,
page_size: int = 100,
) -> list[dict]max_items(standart 500) — himoya chegarasi: yirik akkauntda ro'yxat o'n minglab yozuv bo'lishi mumkin.page_size— bitta so'rovdagilimit.
close
asyncSDK o'zi yaratgan HTTP sessiyasini yopadi (tashqaridan berilgan sessiyaga tegmaydi). async with Client(...) ishlatilsa, o'zi chaqiriladi.
await ads.close() -> NoneKo'p so'raladigan savollar
SDK orqali kampaniya yaratilsa pul sarflanadimi?
O'z-o'zidan yo'q. create_campaign, create_adset va create_ad standart status="PAUSED" bilan ishlaydi, boost_post() esa to'rtala obyektni to'xtatilgan holda yaratadi. Kampaniya yoki ad set to'xtatilgan bo'lsa reklamaning effektiv holati CAMPAIGN_PAUSED yoki ADSET_PAUSED bo'ladi, shuning uchun kampaniya, ad set va reklamani set_status() bilan ACTIVE qiling.
Meta reklama byudjeti qaysi valyutada beriladi?
Reklama kabineti valyutasida (AdAccount.currency). _major bilan tugaydigan argumentlar yuborishdan oldin CURRENCY_OFFSET (100) ga ko'paytiriladi. Meta ba'zi valyutalarda (JPY, KRW, IDR, VND, HUF va boshqalar) offset 1 ishlatadi — bunday kabinet uchun summani avval 100 ga bo'ling. UZS Meta'ning reklama kabineti valyutalari ro'yxatida yo'q.
Meta Marketing API uchun qanday ruxsatlar kerak?
Foydalanuvchi access token'i: kabinet, targeting va statistikani o'qish uchun ads_read, kampaniya va auditoriyalarni yaratish yoki o'zgartirish uchun ads_management. boost_post() uchun instagram_basic ham ko'rsatilgan. Production'da Meta bu ruxsatlar uchun App Review talab qiladi.
Reklamani ishga tushirishdan oldin auditoriya hajmini qanday bilaman?
Spetsifikatsiyani build_targeting() bilan yig'ing va delivery_estimate() ga bering. Bu faqat o'qish: hech narsa yaratilmaydi va hech narsa hisobga yozilmaydi. optimization_goal sifatida ad set uchun rejalashtirgan maqsadni bering.
Auditoriyaga mijozlar yuklanganda ma'lumot Meta'ga ochiq ketadimi?
Yo'q. add_audience_users() email va telefonlarni normallashtirib, so'rovdan oldin serveringizda SHA-256 bilan xeshlaydi. Meta bir so'rovda 10 000 tagacha yozuv qabul qiladi, katta ro'yxatni bir necha chaqiruvga bo'ling.