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.
| Token | Kim nomidan | Muddati | Qanday olinadi |
|---|---|---|---|
| Qisqa muddatli user token | Foydalanuvchi | Odatda 1–2 soat | Facebook Login'dan keyin code almashinuvi |
| Uzoq muddatli user token | Foydalanuvchi | Taxminan 60 kun | Serverda grant_type=fb_exchange_token |
| Page token (qisqa user tokendan) | Sahifa | Soatlar | /me/accounts — qisqa token bilan |
| Page token (uzoq user tokendan) | Sahifa | Tugash sanasi yo'q, lekin bekor bo'lishi mumkin | /me/accounts — uzoq token bilan |
| System user token | Biznes portfeli (Business Manager) | Muddatsiz yoki 60 kun (set_token_expires_in_60_days=true) | Business Settings yoki POST /{system-user-id}/access_tokens |
| App token | Ilova | Ilova sozlamalari va xizmat so'rovlari uchun | App 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
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
scopeo'rnigaconfig_iduzatiladi.Foydalanuvchini login'ga yuboring
Havolaga tasodifiy
stateqo'shing (CSRF himoyasi) va uni sessiyada saqlang. Minimal ruxsat:pages_show_list, qolganlari — vazifangizga qarab (post uchunpages_manage_postsva h.k.).codeni serverda almashtiringCallback'da
stateni solishtiring,codeni qisqa muddatli user tokenga, keyinfb_exchange_tokenbilan uzoq muddatli tokenga almashtiring. App secret faqat serverda bo'ladi — Meta ham tokenni server tomonida yaratishni talab qiladi.Sahifa tokenlarini oling
Uzoq muddatli user token bilan
GET /me/accountsso'rang. Har bir sahifa uchunid,name,access_tokenva foydalanuvchi bajara oladigan vazifalar (tasks) keladi.Tekshiring va shifrlab saqlang
Access Token Debugger yoki
debug_tokenorqaliexpires_at,data_access_expires_atvascopesni 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.
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) # shifrlabexchange_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.
| Ruxsat | Nima beradi | Bog'liq ruxsatlar |
|---|---|---|
pages_show_list | Foydalanuvchi boshqaradigan sahifalar ro'yxati | yo'q |
pages_read_engagement | Sahifa postlari, rasm va videolar, obunachi ma'lumoti, metadata | pages_show_list |
pages_manage_posts | Sahifada post yaratish, tahrirlash va o'chirish | pages_read_engagement, pages_show_list |
pages_read_user_content | Foydalanuvchilar yozgan post, izoh va baholarni o'qish | pages_show_list |
pages_manage_engagement | Sahifadagi izohlarni yaratish, tahrirlash, o'chirish | pages_read_user_content, pages_show_list |
pages_manage_metadata | Webhook obunasi va sahifa sozlamalari | pages_show_list |
read_insights | Sahifa statistikasi | pages_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:
| Subkod | Sabab | Nima qilish kerak |
|---|---|---|
| 460 | Foydalanuvchi parolini o'zgartirgan | Qayta login so'rang, yangi tokenlarni oling |
| 463 | Token muddati o'tgan yoki bekor qilingan | Qayta login; eski tokenni o'chiring |
| 467 | Token yaroqsiz (bekor qilingan, muddati o'tgan) | Qayta login |
| 458 | Foydalanuvchi ilovani o'chirgan | Ulanishni "uzilgan" deb belgilang |
| 492 | Token egasining sahifadagi roli yetarli emas | Sahifa 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.
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'chiringBarcha 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_scopesbilan foydalanuvchi rad etgan ruxsatlarni aniqlang va interfeysda ko'rsating.- Tokenlarni shifrlab saqlang; frontendga, log'ga va xato hisobotlariga chiqarmang.
- Har so'rovga
appsecret_proofqo'shilsin (SDK buni avtomatik qiladi). - 190 xatosida akkauntni "qayta ulash kerak" holatiga o'tkazing va egasiga xabar bering.
- Uzishda
revokechaqiring va tokenlarni bazadan o'chiring.
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.