Asosiy mazmunga o'tish
Socialift
Texnik qo'llanma

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.

verify.py
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).

← Blogga qaytish

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.

Manbalar

  1. Meta: Getting started with webhooks
  2. Meta: Instagram webhooks

Bog'liq sahifalar