Webhook integratsiyasi
Webhook — platforma hodisa yuz berganda sizga o'zi yuboradigan HTTP so'rov. Socialift Python SDK endpointingiz uchun Meta webhooklarining asosiy qismlarini beradi: verify_challenge GET tekshiruviga javob beradi, verify_request X-Hub-Signature-256 imzosini xom tanaga qarab tekshiradi, parse_events yetkazishni alohida hodisalarga ajratadi, dedupe_key esa takrorlarni tashlash uchun barqaror kalit beradi. Hodisani CRM'ga yozish — sizning kodingizda.
Yangilangan:
Webhook nima va u API'dan nimasi bilan farq qiladi?
Webhook — hodisa yuz berganda serverdan sizning manzilingizga yuboriladigan HTTP so'rov. Oddiy API'da siz so'rovni o'zingiz yuborasiz va javob kutasiz; webhookda esa aksincha — platforma sizni chaqiradi. Shu sababli yangi Direct xabari yoki to'ldirilgan lead haqida davriy so'rov yubormasdan, hodisadan keyin tez orada xabar topasiz.
Meta uchun bu ikki bosqichli: avval GET so'rov bilan manzil tasdiqlanadi (hub.mode, hub.verify_token, hub.challenge), keyin hodisalar POST bilan keladi va X-Hub-Signature-256 sarlavhasida HMAC-SHA256 imzo bo'ladi.
Amaliy qiyinchilik imzoni to'g'ri hisoblashda: HMAC xom bayt oqimi bo'yicha hisoblanadi. Agar siz JSON'ni pars qilib qayta serializatsiya qilsangiz, bo'shliqlar va maydonlar tartibi o'zgaradi va imzo mos kelmaydi.
Meta webhookini ulash
Endpoint oching
HTTPS manzil kerak. GET va POST metodlarini qo'llab-quvvatlashi shart.
Tasdiqlash so'roviga javob bering
GET so'rovda hub.verify_token sizdagi qiymatga mos kelsa, hub.challenge qiymatini oddiy matn sifatida qaytaring.
Imzoni tekshiring
X-Hub-Signature-256 sarlavhasidagi qiymatni ilova sirining HMAC-SHA256 hisobi bilan solishtiring — xom tanaga qarab.
Hodisalarni ajrating
Bitta yetkazishda bir nechta obyekt va bir nechta o'zgarish kelishi mumkin. Har birini alohida hodisaga aylantiring.
Dedupe qiling
Meta hodisa ID yubormaydi va yetkazishni qayta yuborishi mumkin. Kalitni mazmundan yig'ing (
leadgen_id, xabarmid, izoh ID) — SDK'dadedupe_key(event)— va uni unikal ustunga yozing.Tez javob qaytaring
200 ni darhol qaytaring va og'ir ishni navbatga qo'ying — aks holda Meta yetkazishni muvaffaqiyatsiz deb hisoblaydi.
Imzoni to'g'ri tekshirish
Quyidagi kod Meta hujjatidagi standart tekshiruvni SDK'siz ko'rsatadi. Socialift SDK'da xuddi shu tekshiruv verify_request(app_secret, body, headers) funksiyasida — uni endpointingizda o'zingiz chaqirasiz.
import hmac, hashlib
def verify(raw_body: bytes, header: str, app_secret: str) -> bool:
# header ko'rinishi: "sha256=abcdef..."
if not header or not header.startswith("sha256="):
return False
expected = hmac.new(
app_secret.encode(), raw_body, hashlib.sha256
).hexdigest()
# doimiy vaqtli solishtirish — timing hujumidan himoya
return hmac.compare_digest(expected, header.split("=", 1)[1])E'tibor bering: raw_body — bu framework bergan xom baytlar. json.dumps(request.json) natijasi bilan hisoblansa, imzo deyarli har doim mos kelmaydi.
Socialift SDK nimani beradi
Imzo tekshiruvi
verify_request(app_secret, body, headers) X-Hub-Signature-256 ni doimiy vaqtda tekshiradi va imzo yo'q yoki noto'g'ri bo'lsa False qaytaradi — bunday so'rovga 403 bering.
Hodisalarni ajratish
entry/changes/messaging tuzilmasi yagona hodisalar oqimiga tekislanadi.
Takrorlarni yo'q qilish
Meta hodisa ID bermaydi; dedupe_key(event) mazmundan barqaror kalit yig'adi. Uni unikal ustunga yozsangiz, CRM'da dubl bitim paydo bo'lmaydi.
Meta qayta yuboradi
Javob bermagan endpointga Meta hodisani 36 soatgacha qayta yuboradi — dedupe_key bilan idempotent bo'ling. SDK'dagi RetryPolicy faqat chiquvchi API so'rovlariga tegishli; hodisani CRM'ga uzatish va qayta urinish sizning kodingizda.
Lead mazmunini to'ldirish
leadgen hodisasida faqat ID'lar bor (leadgen_id, form_id, page_id). Javoblarni fb.lead(leadgen_id, page_token) bilan oling va socialift.leads.normalize() bilan ism/telefon/emailga keltiring. Kabinetda ulangan sahifalar uchun server buni o'zi bajaradi — leadlar Playground'dagi GET /crm/leads da ko'rinadi.
Diagnostika
Kabinetdagi «Statistika» SDK aktivatsiyalari va API/Playground chaqiruvlarini xatolar soni bilan ko'rsatadi. Webhook yetkazishlari u yerda ko'rinmaydi — ularni endpointingizda log qiling.
Qaysi hodisalar keladi
| Hodisa | Odatiy CRM harakati | ||
|---|---|---|---|
| Yangi Instagram Direct xabari | bor | yo'q | Kontakt + bitim yaratish yoki yangilash |
| Post ostidagi izoh | bor | bor | Vazifa yaratish, javob navbatiga qo'yish |
| Lead Ads formasi to'ldirildi | bor | bor | Lead yaratish, menejerga biriktirish |
| Ruxsat bekor qilindi | bor | bor | Ulanishni «uzilgan» deb belgilash |
boryo'qJadvalni yon tomonga suring
Izohlar va cheklovlar
Instagram izoh webhooklari uchun ilova Live rejimda, comments uchun Advanced Access bo'lishi va akkaunt ochiq (public) bo'lishi kerak. Instagram reklamasidan kelgan leadlar Facebook sahifasining leadgen hodisasi bilan keladi. LinkedIn webhooklari faqat tasdiqlangan use case'li ilovalar uchun; Socialift LinkedIn klienti ularni qayta ishlamaydi — ma'lumot so'rov bilan olinadi.
Webhook endpointi uchun xavfsizlik ro'yxati
- Imzosi tekshirilmagan so'rovni hech qachon ishlamang.
- verify_token va app_secret'ni kodga yozmang — muhit o'zgaruvchisida saqlang.
- Endpoint faqat HTTPS orqali ochiq bo'lsin.
- So'rov tanasi hajmini cheklang va JSON parsni himoyalang.
- Hodisalarni navbatga qo'ying: yetkazish javobi 200 bo'lishi kerak, ishlov keyinroq.
- Dedupe kaliti va vaqt tamg'asini (
entry.time) saqlang — takrorni ushlash va audit uchun.
Ko'p so'raladigan savollar
Webhook qanday ishlaydi?
Platformada hodisa yuz berganda u sizning HTTPS manzilingizga POST so'rov yuboradi. So'rov tanasida hodisa mazmuni, sarlavhada esa imzo bo'ladi. Siz imzoni tekshirib, hodisani qabul qilganingizni bildirish uchun 200 javobini qaytarasiz.
Nega webhook imzosi mos kelmayapti?
Eng ko'p uchraydigan sabab — imzo xom tana o'rniga qayta serializatsiya qilingan JSON bo'yicha hisoblanishi. Ikkinchi sabab — noto'g'ri ilova siri (app secret). Uchinchisi — proksi yoki framework tanani o'zgartirib yuborishi.
Bir xil hodisa ikki marta kelishi mumkinmi?
Ha. Meta muvaffaqiyatsiz yetkazishni 36 soatgacha qayta yuboradi, shuning uchun takror — normal holat. Meta hodisa ID bermaydi: kalitni mazmundan yig'ing (SDK'da dedupe_key) va unikal ustunda saqlang.
Webhook o'rniga davriy so'rov (polling) yuborsa bo'ladimi?
Texnik jihatdan mumkin, lekin bu limitlarni tez sarflaydi va javob vaqtini oshiradi. Xabarlar va leadlar uchun webhook to'g'ri yechim; polling faqat zaxira mexanizm sifatida ma'noli.
Manbalar
Bog'liq sahifalar
Webhooklarni bugun ulang
Token oling va birinchi Meta hodisasining imzosini verify_request bilan tekshiring.
Bepul token olish →