Afilipost ← Ana sayfaya dön

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