Webhook'lar
Yoklamayı bırak — Afilipost seni arar, doğrulayabileceğin bir imzayla.
Durumu yoklamak yerine panelden (Bildirimler ekranı) bir adres kaydet; Afilipost seni arasın. Her isteği imzalayan sır, oluşturulurken bir kez gösterilir.
Olaylar
| Olay | Ne zaman |
|---|---|
post.published | Bir hedef yayına girdi — veri, permalink ve platform gönderi kimliğini taşır. |
post.failed | Bir hedef kalıcı olarak düştü ya da deneme hakkı bitti; data.error sebebini söyler. |
account.expired | Bağlı bir hesabın oturumu öldü, yeniden bağlanması gerekiyor. |
dm.received | Bir DM geldi — kural eşleşse de eşleşmese de. Cevap ucuyla birleştir; kendi yapay zekân gelen kutuyu yönetsin. |
comment.received | Bağlı hesabın bir gönderisine yorum geldi. |
webhook.test | Panelin test düğmesiyle gönderilir. |
Alacağın istek
POST <senin-adresin>
Content-Type: application/json
X-Afilipost-Signature: t=1756120800,v1=9f2c…c1
{ "type": "post.failed",
"createdAt": "2026-08-25T12:40:00.000Z",
"data": {
"postId": "0f7a…42",
"targetId": "3b1d…9e",
"accountId": "8b1e…7d",
"platform": "youtube",
"error": "YouTube günlük yükleme hakkı doldu…" } } 10 saniye içinde herhangi bir 2xx ile cevapla. Gerisi başarısızlık sayılır.
İmzayı doğrulama
v1, sırrınla `${t}.${ham gövde}` üzerinden HMAC-SHA256'dır. Zaman damgası imzanın içindedir; yakalanan bir istek sonradan tekrar oynatılamaz:
import hashlib, hmac, time
def verify(secret, body, header, tolerance=300):
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > tolerance:
return False # eski istek — tekrar oynatma koruması
mac = hmac.new(secret.encode(),
f"{parts['t']}.{body}".encode(),
hashlib.sha256).hexdigest()
return hmac.compare_digest(mac, parts["v1"]) Teslimat ve tekrar denemeler
- Her olay üç kez denenir: hemen, 5 sn sonra, 30 sn sonra.
- 20 üst üste başarısız olaydan sonra uç kendini kapatır; panel son hatayı gösterir. Adresi düzeltip yeniden ekle.
- Teslimat yayını asla bloklamaz — yavaş bir webhook kuyruğunu yavaşlatamaz.