Instagram webhook qanday ishlaydi
Meta webhooki ikki bosqichdan iborat: manzilni tasdiqlash (GET) va hodisalarni yetkazish (POST). Har bir POST so'rov X-Hub-Signature-256 sarlavhasida HMAC-SHA256 imzo bilan keladi va imzo xom tana bo'yicha hisoblanadi. Instagram hodisalari kelishi uchun esa ilova Live rejimida, akkaunt subscribed_apps orqali obuna qilingan va izohlar uchun Advanced Access olingan bo'lishi kerak.
Nashr etilgan: Yangilangan:
Qisqacha: oqim qanday ketadi
Siz Meta App Dashboard'da callback URL va verify token ko'rsatasiz. Meta GET so'rov yuboradi: hub.mode=subscribe va hub.verify_token mos kelsa, hub.challenge qiymatini aynan o'zini qaytarasiz. Shundan keyin hodisalar POST bilan keladi (bir so'rovda 1000 tagacha): imzoni tekshirasiz, hodisalarni ajratasiz, dedupe qilasiz va darhol 200 qaytarasiz.
Imzoni tekshirish
Bu platforma darajasidagi standart tekshiruv — SDK ishlatmasangiz ham xuddi shu mantiq amal qiladi.
import hmac, hashlib
def verify(raw_body: bytes, header: str, app_secret: str) -> bool:
if not header or not header.startswith("sha256="):
return False
expected = hmac.new(app_secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, header.split("=", 1)[1])raw_body — frameworkdan olingan xom baytlar bo'lishi shart. Qayta serializatsiya qilingan JSON imzoni buzadi.
Socialift SDK'da xuddi shu mantiq verify_request(app_secret, body, headers) funksiyasida, GET tekshiruvi esa verify_challenge da.
Nima uchun bir hodisa ikki marta keladi
Meta yetkazishni «kamida bir marta» tamoyilida bajaradi. Sizning endpointingiz sekin javob qaytarsa yoki xato bersa, yetkazish qayta urinadi — natijada bir hodisa ikki marta yetib borishi mumkin.
Meta hodisa ID bermaydi, shuning uchun to'g'ri yechim — mazmundan barqaror kalit yasash (xabar uchun mid, lead uchun leadgen_id, izoh uchun comment_id) va takrorlanishni tashlab yuborish. Aks holda CRM'da dubl bitim yoki dubl lead paydo bo'ladi. SDK'da bu dedupe_key().
Ikkinchi qoida — 200 javobni tez qaytarish. Og'ir ishlov (CRM'ga yozish, bildirishnoma yuborish) navbatga qo'yilishi kerak.
Ishlab chiqarish uchun tekshiruv ro'yxati
- Imzosi noto'g'ri so'rovlarni 401/403 bilan rad eting va logga yozing.
- Meta hodisa ID bermaydi: mazmundan kalit yasang (xabar uchun mid, lead uchun leadgen_id, izoh uchun comment_id) va uni yetkazish vaqti bilan unikal ustunda saqlang.
- Navbat ishlatmasangiz ham, javobni bloklamang.
- verify_token va app_secret'ni muhit o'zgaruvchisida saqlang.
- HTTPS sertifikati haqiqiy bo'lsin — self-signed sertifikat qo'llab-quvvatlanmaydi.
- Ilova App Dashboard'da Live rejimida bo'lsin — aks holda Instagram webhooklari kelmaydi.
- comments va live_comments hodisalari uchun Advanced Access kerak; izoh va @mention hodisalari faqat ochiq (public) akkaunt media'lari uchun keladi.
- Akkauntni obuna qiling: POST /me/subscribed_apps, subscribed_fields=messages,comments,... (Facebook Login yo'lida sahifa tokeni bilan).
Ko'p so'raladigan savollar
Webhook imzosi doim mos kelmayapti, nima qilay?
Avval xom tanani ishlatayotganingizni tekshiring — ko'p frameworklar tanani avtomatik pars qiladi. Keyin app secret to'g'riligini va oldingi proksi tanani o'zgartirmayotganini tekshiring.
Webhook o'rniga polling ishlatsam bo'ladimi?
Zaxira mexanizm sifatida — ha. Asosiy oqim sifatida — yo'q: polling limitlarni tez sarflaydi va javob vaqtini oshiradi.
Meta necha marta qayta uradi?
Meta muvaffaqiyatsiz yetkazishni darhol, keyin kamayib boruvchi chastotada 36 soat davomida qayta yuboradi; 36 soatdan keyin tasdiqlanmagan hodisa tashlab yuboriladi. Shuning uchun 200 ni tez qaytaring va takrorlarni dedupe qiling.
Instagram webhook nega kelmayapti?
Eng ko'p uchraydigan sabablar: ilova Live rejimida emas, akkaunt /me/subscribed_apps orqali obuna qilinmagan, izohlar uchun Advanced Access yo'q yoki akkaunt yopiq. Endpoint self-signed sertifikat ishlatsa ham Meta hodisani yetkazmaydi.
Bitta so'rovda nechta hodisa keladi?
Meta hodisalarni to'plab yuboradi: bitta POST'da 1000 tagacha o'zgarish bo'lishi mumkin. Shuning uchun entry ichidagi changes va messaging massivlarini to'liq aylanib chiqing — Socialift SDK'da parse_events() har birini alohida WebhookEvent qilib beradi.