Instagram Messaging API: Direct xabarlar bo'yicha texnik qo'llanma
Instagram Messaging API professional akkauntga Direct xabarlarni webhook orqali qabul qilish va POST /<IG_ID>/messages bilan javob berish imkonini beradi. Mijoz birinchi yozishi shart; shundan keyin javob uchun 24 soat bor, jonli operator esa App Review talab qiladigan HUMAN_AGENT tegi bilan 7 kungacha javob bera oladi. Instagram Login'da instagram_business_manage_messages kerak, Facebook Login esa Messenger Platform orqali ishlaydi.
Yangilangan:
Instagram DM API qanday ishlaydi?
Suhbatni doim Instagram foydalanuvchisi boshlaydi — profil, post, story eslatmasi yoki boshqa kirish nuqtasi orqali. Meta messages webhook'ini yuboradi, unda yuboruvchining Instagram-scoped ID si (IGSID) bo'ladi. Serveringiz shu IGSID ga Send API orqali 24 soat ichida javob beradi. Tarix Conversations API orqali, profil ma'lumoti esa foydalanuvchi sizga yozgandan keyin User Profile API orqali olinadi.
Bu maqola API mexanikasiga bag'ishlangan. Biznes va sotuv nuqtai nazaridan nima mumkinligi — Instagram Direct'ni avtomatlashtirish maqolasida, Socialift xom endpointlar ustiga nima qo'shishi esa Instagram Direct API sahifasida.
Login turiga ko'ra talablar
| Instagram Login | Facebook Login (Messenger Platform) | |
|---|---|---|
| Host | graph.instagram.com | graph.facebook.com |
| Token | Instagram User access token | Page access token (MESSAGE vazifasiga ega odamdan) |
| Ruxsatlar | instagram_business_basic, instagram_business_manage_messages | instagram_basic, instagram_manage_messages, pages_manage_metadata |
| Xabar yuborish | POST /<IG_ID>/messages | POST /<PAGE_ID>/messages |
| Suhbatlar ro'yxati | GET /me/conversations | GET /<PAGE_ID>/conversations?platform=instagram |
| Webhook obunasi | POST /me/subscribed_apps | App Dashboard'da instagram obyekti + bog'langan sahifa obunasi |
| Standard Access bilan | Faqat o'zingiz boshqaradigan akkauntlar | Faqat ilovada rolga ega odamlarga xabar |
Izohlar va cheklovlar
Facebook Login yo'lida Meta Instagram ilovasida "Allow access to messages" tugmasini ham yoqishni talab qiladi (Sozlamalar → Xabarlar va story javoblari → Xabar nazorati → Ulangan vositalar).
24 soatlik oyna va HUMAN_AGENT tegi
Ilovangiz Instagram foydalanuvchisiga faqat u professional akkauntga yozganidan keyin xabar yubora oladi. Foydalanuvchining oxirgi xabaridan boshlab javob uchun 24 soat bor va shu oyna ichidagi javobda reklama mazmuni ham bo'lishi mumkin.
Jamoangizdagi odamga ko'proq vaqt kerak bo'lsa — biznes dam olish kunlari yopiq yoki masala bir kundan ko'p vaqt talab qiladi — javob HUMAN_AGENT xabar tegi bilan foydalanuvchi xabaridan keyin 7 kungacha yuborilishi mumkin. Teg jonli operatorning qo'lda yozgan javobi uchun mo'ljallangan; Human Agent funksiyasi App Review va biznes verifikatsiyasini talab qiladi.
Bu oynalardan tashqarida API orqali foydalanuvchiga yetib borish yo'li yo'q: Messenger'dagi One-Time Notification, News Messaging va Sponsored Messages Instagram Messaging API uchun mavjud emas.
Socialift SDK'da send_message tegsiz oddiy matnli javob yuboradi. Oyna yopilgan bo'lsa Meta so'rovni rad etadi va SDK PermissionError ko'taradi — uni ushlang va qayta urinish o'rniga suhbatni jonli operatorga yo'naltiring.
Instagram xabarlari uchun webhook maydonlari
Faqat qayta ishlaydigan maydonlaringizga obuna bo'ling. Instagram Login'da ular instagram_business_basic va instagram_business_manage_messages ni talab qiladi, ilova esa Live rejimida bo'lishi kerak.
| Maydon | Qachon keladi |
|---|---|
| messages | Foydalanuvchi xabar yuborganda; payload'da sender.id (IGSID), recipient.id, timestamp, message.mid va matn yoki biriktirma |
| message_echoes | Biznes akkaunt xabar yuborganda (Instagram Login maydoni); Messenger Platform yo'lida bunday xabarlar messages ichida is_echo bilan keladi |
| message_reactions | Foydalanuvchi xabarga reaksiya bildirganda |
| messaging_postbacks | Foydalanuvchi icebreaker yoki tugmani bosganda |
| messaging_seen | Foydalanuvchi xabarni o'qiganda |
| messaging_referral | Foydalanuvchi suhbatni ig.me havolasi orqali ochganda |
| message_edit | Foydalanuvchi xabarni tahrirlaganda (2025-yil 10-sentabrdan) |
Xabarlarni qabul qilish: webhook handler
Socialift webhook yordamchilari X-Hub-Signature-256 ni tekshiradi, ikkala payload formatini tekislaydi va barqaror dedupe kalitini yasaydi.
import json, os
from socialift.webhooks import dedupe_key, parse_events, verify_request
APP_SECRET = os.environ["WEBHOOK_APP_SECRET"] # webhook'ni qabul qiluvchi ilova siri
def handle_instagram_webhook(raw_body: bytes, headers, seen: set) -> int:
if not verify_request(APP_SECRET, raw_body, headers):
return 403
for event in parse_events(json.loads(raw_body)):
key = dedupe_key(event)
if event.field != "messages" or key in seen:
continue
seen.add(key)
message = event.value.get("message") or {}
if message.get("is_echo"):
continue # o'zimiz yuborgan xabar
igsid = event.value["sender"]["id"]
print("DM:", igsid, message.get("text")) # navbatga qo'ying, shu yerda ishlamang
return 200200 javobni tez qaytaring va ishlovni navbatga o'tkazing: Meta'ning Messenger Platform hujjati 5 soniya ichida 200 OK kutadi, bir soat davomida muvaffaqiyatsiz yetkazilgan webhook esa o'chiriladi.
seen — bazangizdagi unikal ustun o'rnida: Meta bir hodisani bir necha marta yetkazishi mumkin.
Suhbatlarni o'qish va SDK bilan javob berish
import asyncio, os
from socialift import Instagram, PermissionError as MetaPermissionError
async def main():
token = os.environ["IG_USER_TOKEN"]
async with Instagram.from_env() as ig:
chats = await ig.conversations(token, limit=10)
for chat in chats["data"]:
contact = chat["contact"] or {}
history = await ig.messages(chat["id"], token, limit=20)
print(contact.get("username"), len(history["data"]))
igsid = os.environ["CUSTOMER_IGSID"]
print(await ig.contact(igsid, token))
try:
await ig.send_message(igsid, token, "Rahmat! Menejer tez orada javob beradi.")
except MetaPermissionError:
print("24 soatlik oyna yopilgan: jonli operatorga yo'naltiring")
asyncio.run(main())conversations data (har birida id va contact) va paging qaytaradi; keyingi sahifa uchun after= bering. enrich=True (standart) bo'lsa suhbatdosh profillari parallel olinadi.
contact(igsid, token) User Profile API'ni chaqiradi va profil o'qilmasa istisno o'rniga available: False qaytaradi.
Facebook Login: Instagram.via_facebook(app_secret=...), keyin ig.conversations(page_token, page_id=..., ig_user_id=...) va ig.send_message(igsid, page_token, text, page_id=...) — platform=instagram ni SDK o'zi qo'shadi.
send_message matnni qamrab oladi; biriktirmalar, quick reply, shablonlar, xabar teglari va private reply uchun Graph API to'g'ridan-to'g'ri chaqiriladi.
Izohlarga private reply
Private reply akkauntning posti, Reels, story, Live efiri yoki reklama postiga izoh qoldirgan odamga Direct xabar yuboradi. Chaqiruv — POST /<IG_ID>/messages, faqat recipient ichida IGSID o'rniga comment_id beriladi.
Qoidalar: izohdan keyin 7 kun ichida javob bering (Live uchun — faqat efir davomida); bitta izohga faqat bitta xabar; keyingi xabarlar faqat foydalanuvchi javob bersa va 24 soat ichida yuboriladi. Xabar foydalanuvchining akkauntni kuzatishiga qarab Inbox yoki Requests papkasiga tushadi.
Ruxsatlar oddiy xabarlardan farq qiladi: Instagram Login'da instagram_business_basic va instagram_business_manage_comments; Facebook Login'da instagram_basic, instagram_manage_comments va pages_read_engagement. Limit — post va Reels uchun soatiga 750 ta, Live izohlari uchun soniyasiga 100 ta chaqiruv.
Instagram xabarlari limitlari
| Nima | Limit |
|---|---|
| Conversations API | Professional akkaunt uchun soniyasiga 2 ta chaqiruv |
| Send API: matn, havola, reaksiya, stiker | Akkaunt uchun soniyasiga 100 ta chaqiruv |
| Send API: audio va video | Akkaunt uchun soniyasiga 10 ta chaqiruv |
| Xabar matni | UTF-8, 1000 baytgacha |
| Bitta xabardagi rasmlar | 10 tagacha |
| Biriktirma hajmi | Rasm 8 MB; audio, video va PDF 25 MB |
| Conversations API orqali xabar tafsilotlari | Suhbatdagi faqat oxirgi 20 ta xabar |
| Requests papkasi | 30 kun faol bo'lmagan suhbatlar qaytarilmaydi |
Loyihalashda hisobga olinadigan cheklovlar
- Birinchi bo'lib yozib bo'lmaydi: foydalanuvchi birinchi yozishi shart.
- Guruh chatlari yo'q — bitta suhbatda bitta mijoz.
- Inbox papkalarini (Primary, General, Requests) API orqali boshqarib bo'lmaydi.
- Faqat oxirgi 20 ta xabar tafsiloti olinadi — webhook'dan kelgan xabarlarni o'zingiz saqlang.
- User Profile API ma'lumotlari (name, username, profile_pic, follower_count, is_user_follow_business, is_business_follow_user, is_verified_user) faqat foydalanuvchi yozgan yoki icebreaker bosgandan keyin ochiladi; profile_pic havolasi bir necha kunda eskiradi.
- Foydalanuvchi biznesni bloklagan bo'lsa, uning profilini o'qib bo'lmaydi.
- Xabarda ulashiladigan media va postlar biznes akkauntga tegishli bo'lishi kerak.
- Webhook'lar faqat ilova Live rejimida bo'lganda keladi.
Ko'p so'raladigan savollar
Instagram API orqali foydalanuvchiga birinchi bo'lib yozish mumkinmi?
Yo'q. Suhbat faqat Instagram foydalanuvchisi professional akkauntga yozganda (private reply uchun — kontentiga izoh qoldirganda) boshlanadi. Instagram Messaging API orqali sovuq xabar va ommaviy tarqatma yuborib bo'lmaydi.
24 soatlik oyna yopilgandan keyin nima bo'ladi?
Oddiy javoblar rad etiladi. Jonli operator foydalanuvchining oxirgi xabaridan keyin 7 kungacha HUMAN_AGENT tegi bilan javob bera oladi, buning uchun Human Agent funksiyasi App Review'dan o'tgan bo'lishi kerak. Avtomatik xabarlar bu tegga to'g'ri kelmaydi.
Instagram DM API limitlari qanday?
Send API matn, havola, reaksiya va stikerlar uchun akkauntga soniyasiga 100 ta, audio va video uchun 10 ta chaqiruvga ruxsat beradi. Conversations API — soniyasiga 2 ta, private reply — post va Reels uchun soatiga 750 ta.
Instagram Messaging API uchun Facebook sahifasi kerakmi?
Yo'q. Instagram Login bilan graph.instagram.com ga instagram_business_manage_messages ruxsati orqali murojaat qilasiz. Sahifa faqat Facebook Login yo'lida kerak — u yerda Instagram xabarlari Messenger Platform orqali Page token bilan ishlaydi.
Nega mijoz profilini o'qib bo'lmayapti?
User Profile API ma'lumotni faqat foydalanuvchi akkauntingizga yozgan, icebreaker yoki doimiy menyuni bosgandan keyin beradi. Foydalanuvchi faqat izoh qoldirgan yoki sizni bloklagan bo'lsa Meta xato qaytaradi — Socialift SDK'ning contact metodi bunda available: False qaytaradi.