Asosiy mazmunga o'tish
Socialift
Qo'llanma

Facebook sahifa tokeni (Page access token) qanday olinadi

Facebook Page access token olish uchun foydalanuvchi Facebook Login orqali pages_show_list va kerakli pages_* ruxsatlarini beradi, siz serverda qisqa muddatli user tokenni uzoq muddatliga (taxminan 60 kun) almashtirasiz va /me/accounts so'rovidan har bir sahifa tokenini olasiz. Uzoq muddatli user tokendan olingan page tokenning tugash sanasi yo'q, lekin u bekor qilinishi mumkin.

Yangilangan:

Qisqacha: Page access token qanday olinadi?

Page token to'g'ridan-to'g'ri berilmaydi — u foydalanuvchi tokenidan olinadi. Oqim: Facebook Login → code → qisqa muddatli user token → serverda fb_exchange_token bilan uzoq muddatli user token → GET /me/accounts. Javobdagi har bir sahifada access_token bor. Agar /me/accounts uzoq muddatli token bilan chaqirilgan bo'lsa, sahifa tokenining tugash sanasi bo'lmaydi.

Asosiy xato — sahifalar ro'yxatini qisqa muddatli token bilan olish. Bunda page token ham bir necha soatda tugaydi va integratsiya ertasi kuniyoq "o'z-o'zidan" uziladi.

Ikkinchi xato — "muddatsiz" so'zini "abadiy" deb tushunish. Meta hujjati aniq yozadi: bunday tokenlar faqat ma'lum sharoitlarda tugaydi yoki bekor qilinadi. Shuning uchun kod token xatosini kutishi va akkauntni qayta ulashga tayyor bo'lishi kerak.

Meta token turlari va muddatlari

Qaysi token kim nomidan ishlaydi va qancha yashaydi — Meta hujjatlari bo'yicha.

Meta token turlari va muddatlari — Platformalar bo'yicha imkoniyatlar jadvali
TokenKim nomidanMuddatiQanday olinadi
Qisqa muddatli user tokenFoydalanuvchiOdatda 1–2 soatFacebook Login'dan keyin code almashinuvi
Uzoq muddatli user tokenFoydalanuvchiTaxminan 60 kunServerda grant_type=fb_exchange_token
Page token (qisqa user tokendan)SahifaSoatlar/me/accounts — qisqa token bilan
Page token (uzoq user tokendan)SahifaTugash sanasi yo'q, lekin bekor bo'lishi mumkin/me/accounts — uzoq token bilan
System user tokenBiznes portfeli (Business Manager)Muddatsiz yoki 60 kun (set_token_expires_in_60_days=true)Business Settings yoki POST /{system-user-id}/access_tokens
App tokenIlovaIlova sozlamalari va xizmat so'rovlari uchunApp secret bilan serverda; masalan debug_token uchun

Meta ogohlantiradi: bu muddatlar oldindan xabarsiz o'zgarishi yoki token erta tugashi mumkin. Kodingiz muddatga emas, API xatosiga tayansin.

Muddatsiz Page token olish: 5 qadam

  1. Ilovani sozlang

    Meta App Dashboard'da Facebook Login'ni qo'shing va redirect URI'ni aniq kiriting. Business turidagi app'da (Facebook Login for Business) ruxsatlar konfiguratsiyada tanlanadi va login havolasiga scope o'rniga config_id uzatiladi.

  2. Foydalanuvchini login'ga yuboring

    Havolaga tasodifiy state qo'shing (CSRF himoyasi) va uni sessiyada saqlang. Minimal ruxsat: pages_show_list, qolganlari — vazifangizga qarab (post uchun pages_manage_posts va h.k.).

  3. codeni serverda almashtiring

    Callback'da stateni solishtiring, codeni qisqa muddatli user tokenga, keyin fb_exchange_token bilan uzoq muddatli tokenga almashtiring. App secret faqat serverda bo'ladi — Meta ham tokenni server tomonida yaratishni talab qiladi.

  4. Sahifa tokenlarini oling

    Uzoq muddatli user token bilan GET /me/accounts so'rang. Har bir sahifa uchun id, name, access_token va foydalanuvchi bajara oladigan vazifalar (tasks) keladi.

  5. Tekshiring va shifrlab saqlang

    Access Token Debugger yoki debug_token orqali expires_at, data_access_expires_at va scopesni ko'ring. Tokenni bazaga shifrlab yozing, frontendga va log'ga chiqarmang.

Python'da: login'dan page token'gacha

Socialift SDK'da butun oqim to'rtta metod: login_url, exchange_code, granted_scopes, pages.

facebook_pages.py
import secrets
from socialift import Facebook

REDIRECT = "https://example.uz/facebook/callback"
SCOPES = ["pages_show_list", "pages_read_engagement", "pages_manage_posts"]

def login_link(fb: Facebook) -> tuple[str, str]:
    state = secrets.token_urlsafe(32)  # sessiyada saqlang
    return fb.login_url(redirect_uri=REDIRECT, state=state, scopes=SCOPES), state

async def on_callback(code: str) -> None:
    async with Facebook.from_env() as fb:
        user = await fb.exchange_code(code, redirect_uri=REDIRECT)  # ~60 kun
        granted = await fb.granted_scopes(user.access_token)
        missing = set(SCOPES) - set(granted)
        if missing:
            raise RuntimeError(f"Rad etilgan ruxsatlar: {missing}")
        for page in await fb.pages(user.access_token):
            save_page(page.id, page.name, page.access_token)  # shifrlab

exchange_code ikki so'rovni bajaradi: code → qisqa token → uzoq muddatli token. redirect_uri login havolasidagi bilan belgi-ma-belgi bir xil bo'lishi shart.

granted_scopes tokenga haqiqatda berilgan ruxsatlarni debug_token orqali o'qiydi: foydalanuvchi dialogda ba'zi ruxsatlarni o'chirib qo'yishi mumkin.

Business turidagi app'da scopes o'rniga config_id beriladi. save_page — sizning saqlash funksiyangiz: SDK hech narsani saqlamaydi.

Sahifa bilan ishlash uchun qaysi ruxsatlar kerak

Permissions Reference'dagi bog'liqliklar: asosiy ruxsatni so'rasangiz, bog'liqlarini ham so'rash kerak.

Sahifa bilan ishlash uchun qaysi ruxsatlar kerak — Platformalar bo'yicha imkoniyatlar jadvali
RuxsatNima beradiBog'liq ruxsatlar
pages_show_listFoydalanuvchi boshqaradigan sahifalar ro'yxatiyo'q
pages_read_engagementSahifa postlari, rasm va videolar, obunachi ma'lumoti, metadatapages_show_list
pages_manage_postsSahifada post yaratish, tahrirlash va o'chirishpages_read_engagement, pages_show_list
pages_read_user_contentFoydalanuvchilar yozgan post, izoh va baholarni o'qishpages_show_list
pages_manage_engagementSahifadagi izohlarni yaratish, tahrirlash, o'chirishpages_read_user_content, pages_show_list
pages_manage_metadataWebhook obunasi va sahifa sozlamalaripages_show_list
read_insightsSahifa statistikasipages_read_engagement, pages_show_list

boryo'q

Standard Access holatida bularni faqat app'da roli bor odamlar bera oladi. Begona sahifalar uchun Advanced Access kerak — u App Review va Business Verification orqali olinadi.

Ruxsat bor, lekin post chiqmayapti: sahifadagi vazifalar

Token faqat ruxsatlar bilan emas, foydalanuvchining sahifadagi vazifalari (tasks) bilan ham cheklanadi. Meta Pages API hujjatiga ko'ra: CREATE_CONTENT — sahifa nomidan kontent e'lon qilish, MODERATE — izohlarga javob berish va o'chirish, ANALYZE — statistika, ADVERTISE — reklama, MESSAGING — xabar yuborish, MANAGE — vazifalarni taqsimlash.

Amaliy qoida: ulash paytida /me/accounts javobidagi tasks ro'yxatini saqlang va interfeysda ko'rsating. Masalan, faqat ANALYZE vazifasi bor xodim sahifani ulasa, statistika ishlaydi, post e'lon qilish esa rad etiladi — va bu kod xatosi emas.

Page token nega ishlamay qoladi

Graph API token muammolarini error_subcode bilan ajratadi. Eng ko'p uchraydiganlari:

Page token nega ishlamay qoladi — Platformalar bo'yicha imkoniyatlar jadvali
SubkodSababNima qilish kerak
460Foydalanuvchi parolini o'zgartirganQayta login so'rang, yangi tokenlarni oling
463Token muddati o'tgan yoki bekor qilinganQayta login; eski tokenni o'chiring
467Token yaroqsiz (bekor qilingan, muddati o'tgan)Qayta login
458Foydalanuvchi ilovani o'chirganUlanishni "uzilgan" deb belgilang
492Token egasining sahifadagi roli yetarli emasSahifa adminidan rol so'rang yoki boshqa admin orqali ulang

Asosiy kod odatda 190 bo'ladi. Socialift SDK'da 190 kodi AuthError sifatida keladi — uni ushlab, akkauntni "qayta ulash kerak" holatiga o'tkazing.

Ma'lumotga kirish muddati (90 kun) — alohida tushuncha

User token muddatidan tashqari Meta'da ma'lumotga kirish muddati ham bor: foydalanuvchi so'nggi 90 kun ichida faol bo'lmasa, u tizimga kira oladi, lekin ilova uning ma'lumotlariga kirish huquqini yo'qotadi. Bu token muddatidan mustaqil mexanizm.

Server tomonida bu sanani debug_token javobidagi data_access_expires_at maydonidan ko'rasiz. Tiklash uchun foydalanuvchidan qayta ruxsat so'raladi (auth_type=reauthorize).

System user token: odam ishtirokisiz server integratsiyasi

System user — biznes portfelidagi dasturiy "foydalanuvchi". Uning tokeni xodimning paroli yoki login holatiga bog'liq emas, shuning uchun o'z kompaniyangiz sahifalari va reklama kabinetlari bilan avtomatik ishlash uchun qulay.

Ikki turi bor: admin system user (boshqa system user'lar yaratadi va ruxsat taqsimlaydi — Meta uni aktivlar bilan ishlash uchun ishlatmaslikni tavsiya qiladi) va oddiy system user (faqat unga berilgan aktivlarga kiradi). Standard Access'da 1 ta oddiy va 1 ta admin, Advanced Access'da 10 ta oddiy va 1 ta admin system user yaratish mumkin.

Token Business Settings'da yoki API orqali (POST /{system-user-id}/access_tokens) yaratiladi. App o'sha biznesga tegishli bo'lishi va so'ralgan ruxsatlar App Review'dan o'tgan bo'lishi kerak. Token muddatsiz yoki set_token_expires_in_60_days=true bilan 60 kunlik bo'ladi; Meta integratsiyalar uchun muddatli tokenni tavsiya qiladi va uni fb_exchange_token bilan yangilash mumkin. Bekor qilish — /oauth/revoke.

Qachon qaysi: mijozlarning sahifalari bilan ishlaydigan SaaS — Facebook Login (Facebook Login for Business'da "Business Integration System User" tokeni ham tanlanadi, u sukut bo'yicha muddatsiz). Faqat o'z biznesingiz aktivlari — system user.

Ulanishni uzish: tokenni to'g'ri bekor qilish

Tokenni faqat bazadan o'chirish yetarli emas — ruxsat Facebook tomonida saqlanib qoladi.

disconnect.py
from socialift import AuthError, Facebook

async def disconnect(user_token: str, account_id: int) -> None:
    async with Facebook.from_env() as fb:
        print("Berilgan ruxsatlar:", await fb.granted_scopes(user_token))
        try:
            await fb.revoke(user_token)  # DELETE /me/permissions
        except AuthError:
            pass  # token allaqachon yaroqsiz — Meta tomonida ulanish yo'q
    delete_tokens(account_id)  # user va page tokenlarni bazadan o'chiring

Barcha ruxsatlar bekor qilinganda foydalanuvchining user tokenlari yaroqsiz bo'ladi va keyingi ulanishda u ruxsatlarni qaytadan beradi.

Qo'lda tekshirish uchun Access Token Debugger (developers.facebook.com/tools/debug/accesstoken) tokenning egasi, muddati va ruxsatlarini ko'rsatadi.

Ishlab chiqarish uchun tekshiruv ro'yxati

  • Page tokenni faqat uzoq muddatli user tokendan oling.
  • granted_scopes bilan foydalanuvchi rad etgan ruxsatlarni aniqlang va interfeysda ko'rsating.
  • Tokenlarni shifrlab saqlang; frontendga, log'ga va xato hisobotlariga chiqarmang.
  • Har so'rovga appsecret_proof qo'shilsin (SDK buni avtomatik qiladi).
  • 190 xatosida akkauntni "qayta ulash kerak" holatiga o'tkazing va egasiga xabar bering.
  • Uzishda revoke chaqiring va tokenlarni bazadan o'chiring.

← Blogga qaytish

Ko'p so'raladigan savollar

Muddatsiz Facebook page token bormi?

Ha: uzoq muddatli user tokendan olingan page tokenning tugash sanasi yo'q. Lekin parol o'zgarishi, sahifadagi rol yo'qolishi yoki ilova o'chirilishi bilan u bekor bo'ladi, shuning uchun token xatosini kuzatish shart.

Page token nega 1–2 soatda tugayapti?

Siz uni qisqa muddatli user token bilan olgansiz. Avval user tokenni serverda fb_exchange_token bilan uzoq muddatliga almashtiring, keyin /me/accountsni qayta chaqiring.

Graph API Explorer'dan olingan token production uchun yaraydimi?

Explorer — sinov vositasi. Production'da token OAuth oqimi orqali serverda olinishi kerak: app secret brauzerga chiqmasligi lozim va har bir mijozning o'z tokeni bo'ladi.

System user token va page token farqi nima?

Page token sahifani boshqaradigan odamning ruxsatidan olinadi va u odam rolini yo'qotsa ishlamay qoladi. System user token biznes portfeliga tegishli, xodimga bog'liq emas va o'z biznesingiz aktivlari bilan avtomatik ishlash uchun mo'ljallangan.

Tokenni bazadan o'chirsam, ruxsat bekor bo'ladimi?

Yo'q. Ruxsat Facebook tomonida saqlanib qoladi. DELETE /{user-id}/permissions (SDK'da fb.revoke) chaqiring, keyin tokenni bazadan o'chiring.

Manbalar

  1. Meta: Access Token Guide
  2. Meta: Long-Lived Access Tokens
  3. Meta: System user tokens
  4. Meta: Permissions Reference
  5. Meta: Graph API error handling
  6. Meta: Authentication vs Data Access

Bog'liq sahifalar