Skip to content

Webhook'lar

Webhook'lar, SetGet'te olaylar gerçekleştiğinde dış servislere gerçek zamanlı HTTP bildirimleri göndermenizi sağlar. Bir iş öğesi oluşturulduğunda, yorum gönderildiğinde, döngü başladığında veya izlenen başka bir olay gerçekleştiğinde SetGet, belirttiğiniz URL'ye JSON yükü gönderir. SetGet'i CI/CD boru hatlarına, izleme panolarına, özel botlara veya HTTP geri çağrılarını kabul eden herhangi bir servise bağlamak için webhook'ları kullanın.

Webhook'lar nasıl çalışır

  1. SetGet'te bir webhook oluşturup URL, gizli anahtar ve dinlemek istediğiniz olayları belirtirsiniz.
  2. Eşleşen bir olay gerçekleştiğinde SetGet, olayı açıklayan bir JSON yükü oluşturur.
  3. SetGet, gövdesinde yük ve başlıklarında imza bulunan HTTP POST isteğini URL'nize gönderir.
  4. Sunucunuz yükü işler ve HTTP 2xx durum koduyla yanıt verir.
  5. İletim başarısız olursa SetGet üstel geri çekilme ile yeniden dener.

Webhook oluşturma

  1. Ayarlar > Webhook'lar (çalışma alanı düzeyi) veya Proje Ayarları > Webhook'lar (proje düzeyi) bölümüne gidin.
  2. Webhook Oluştur'a tıklayın.
  3. Alanları doldurun:
AlanZorunluAçıklama
URLEvetPOST isteklerini alacak uç nokta
Gizli anahtarÖnerilirDoğrulama için yükleri imzalamakta kullanılan paylaşımlı gizli anahtar
OlaylarEvetAbone olunacak bir veya daha fazla olay türü
AçıklamaHayırWebhook'un amacına ilişkin okunabilir not
AktifEvetSilmeden etkinleştirmek veya devre dışı bırakmak için geçiş
  1. Kaydet'e tıklayın.

İPUCU

Her zaman webhook gizli anahtarı belirleyin. Olmadan, gelen isteklerin gerçekten SetGet'ten geldiğini doğrulayamazsınız.

Olay türleri

İş öğesi olayları

OlayTetikleyici
work_item.createdYeni bir iş öğesi oluşturuldu
work_item.updatedİş öğesinin alanları değişti (durum, öncelik, sorumlu, etiketler, tarihler, başlık, açıklama)
work_item.deletedBir iş öğesi silindi
work_item.archivedBir iş öğesi arşivlendi
work_item.unarchivedBir iş öğesi arşivden geri yüklendi

Yorum olayları

OlayTetikleyici
comment.createdBir iş öğesine yorum eklendi
comment.updatedBir yorum düzenlendi
comment.deletedBir yorum kaldırıldı

Döngü olayları

OlayTetikleyici
cycle.createdYeni bir döngü oluşturuldu
cycle.updatedDöngünün tarihleri, başlığı veya durumu değişti
cycle.startedDöngünün başlangıç tarihine ulaşıldı
cycle.completedDöngünün bitiş tarihine ulaşıldı veya manuel olarak tamamlandı
cycle.deletedBir döngü silindi

Modül olayları

OlayTetikleyici
module.createdYeni bir modül oluşturuldu
module.updatedModülün alanları değişti
module.deletedBir modül silindi

Proje olayları

OlayTetikleyici
project.createdÇalışma alanında yeni bir proje oluşturuldu
project.updatedBir projenin ayarları değişti
project.deletedBir proje silindi

Üye olayları

OlayTetikleyici
member.invitedÇalışma alanına yeni bir üye davet edildi
member.joinedDavet edilen üye kabul edip katıldı
member.removedBir üye çalışma alanından çıkarıldı
member.role_changedBir üyenin rolü güncellendi

Etiket olayları

OlayTetikleyici
label.createdYeni bir etiket oluşturuldu
label.updatedBir etiket yeniden adlandırıldı veya rengi değişti
label.deletedBir etiket silindi

Sayfa olayları

OlayTetikleyici
page.createdYeni bir sayfa oluşturuldu
page.updatedSayfanın içeriği veya başlığı değişti
page.deletedBir sayfa silindi

Intake olayları

OlayTetikleyici
intake.submittedYeni bir intake isteği gönderildi
intake.acceptedBir intake isteği kabul edildi ve iş öğesine dönüştürüldü
intake.declinedBir intake isteği reddedildi

Yük formatı

Tüm webhook yükleri aynı JSON yapısını izler:

json
{
  "event": "work_item.created",
  "timestamp": "2026-03-29T14:30:00Z",
  "workspace": {
    "id": "ws_abc123",
    "slug": "my-workspace"
  },
  "project": {
    "id": "proj_def456",
    "name": "Web App",
    "identifier": "WEB"
  },
  "data": {
    "id": "wi_ghi789",
    "title": "Fix dashboard loading issue",
    "state": "Backlog",
    "priority": "High",
    "assignees": ["alice@example.com"],
    "labels": ["bug", "frontend"],
    "created_at": "2026-03-29T14:30:00Z",
    "updated_at": "2026-03-29T14:30:00Z"
  },
  "actor": {
    "id": "user_jkl012",
    "email": "bob@example.com",
    "display_name": "Bob"
  }
}

Alan açıklamaları

AlanTürAçıklama
eventstringOlay türü (ör. work_item.created)
timestampstring (ISO 8601)Olayın gerçekleştiği zaman
workspaceobjectÇalışma alanı tanımlayıcıları
projectobjectProje tanımlayıcıları (çalışma alanı düzeyi olaylar için null)
dataobjectOlayla ilgili tam varlık verisi
actorobjectOlayı tetikleyen kullanıcı (sistem olayları için null)

Güncelleme yükleri

*.updated olaylarında data nesnesi bir changes alanı içerir:

json
{
  "event": "work_item.updated",
  "data": {
    "id": "wi_ghi789",
    "title": "Fix dashboard loading issue",
    "changes": {
      "state": {
        "old": "Backlog",
        "new": "In Progress"
      },
      "assignees": {
        "old": [],
        "new": ["alice@example.com"]
      }
    }
  }
}

Webhook iletimi

İstek formatı

SetGet, webhook'ları aşağıdaki başlıklarla HTTP POST istekleri olarak gönderir:

BaşlıkDeğer
Content-Typeapplication/json
X-SetGet-EventOlay türü (ör. work_item.created)
X-SetGet-SignatureYük gövdesinin HMAC-SHA256 imzası
X-SetGet-Timestampİletim girişiminin Unix zaman damgası
X-SetGet-Delivery-IDBu iletim için benzersiz tanımlayıcı
User-AgentSetGet-Webhook/1.0

Yeniden deneme politikası

Uç noktanız 10 saniye içinde HTTP 2xx durum koduyla yanıt vermezse SetGet yeniden dener:

GirişimBaşarısızlık sonrası bekleme
1. yeniden deneme1 dakika
2. yeniden deneme5 dakika
3. yeniden deneme30 dakika
4. yeniden deneme2 saat
5. yeniden deneme12 saat

5 başarısız yeniden denemeden sonra (toplamda 6 girişim) iletim başarısız olarak işaretlenir. Sürekli başarısız olan webhook'lar, 3 ardışık olay tüm yeniden denemeleri geçtikten sonra otomatik olarak devre dışı bırakılır.

UYARI

Uç noktanızın 10 saniye içinde yanıt verdiğinden emin olun. Uzun süren işlemler, 200 yanıtı gönderdikten sonra eş zamansız olarak gerçekleştirilmelidir.

İletim sıralaması

Webhook iletileri, olayların gerçekleşme sırasına göre gönderilir; ancak ağ koşulları ve yeniden denemeler nedeniyle uç noktanız bunları sırasız alabilir. Doğru sırayı belirlemek için timestamp alanını kullanın.

Webhook'ları test etme

Yerleşik test

  1. Webhook yapılandırma sayfasına gidin.
  2. Test Gönder'e tıklayın.
  3. SetGet, URL'nize örnek verilerle bir test olayı gönderir.
  4. Yanıtı görmek için iletim günlüğünü kontrol edin.

Genel inceleme aracı kullanma

İlk testler için, webhook'u üretim uç noktanıza yönlendirmeden önce yükleri yakalamak ve incelemek üzere https://webhook.site veya https://requestbin.com gibi bir servis kullanın.

Webhook kayıtları

Her webhook iletimi günlüğe kaydedilir. Günlükleri görüntülemek için:

  1. Ayarlar > Webhook'lar veya Proje Ayarları > Webhook'lar'a gidin.
  2. Webhook'a tıklayın.
  3. İletim Günlüğü sekmesini açın.

Her günlük girişi şunları gösterir:

SütunAçıklama
OlayOlay türü
DurumBaşarılı (2xx), başarısız veya yeniden deneme bekliyor
Yanıt koduUç noktanızın döndürdüğü HTTP durum kodu
Zaman damgasıİletim girişiminin zamanı
SüreMilisaniye cinsinden yanıt süresi
İletim Kimliğiİzleme için benzersiz tanımlayıcı

Tam istek yükünü ve yanıt gövdesini görmek için günlük girişine tıklayın.

İPUCU

Entegrasyon sorunlarını ayıklamak için iletim günlüklerini kullanın. Uç noktanız 4xx veya 5xx hatası döndürürse yanıt gövdesi günlükte yakalanır.

Webhook düzenleme

  1. Webhook listesine gidin.
  2. Düzenlemek istediğiniz webhook'a tıklayın.
  3. URL, gizli anahtar, olaylar veya aktif durumu değiştirin.
  4. Kaydet'e tıklayın.

Değişiklikler gelecekteki olaylar için hemen geçerli olur.

Webhook silme

  1. Webhook listesine gidin.
  2. Webhook'un yanındaki Sil düğmesine (veya çöp kutusu simgesine) tıklayın.
  3. Silme işlemini onaylayın.

Bir webhook'u silmek gelecekteki tüm iletileri durdurur ve iletim günlüğü geçmişini kaldırır.

Güvenlik -- İmza doğrulama

Her webhook isteği, HMAC-SHA256 imzası içeren bir X-SetGet-Signature başlığı içerir. İsteğin SetGet'ten geldiğini doğrulamak için bu imzayı sunucunuzda kontrol edin.

Doğrulama adımları

  1. X-SetGet-Signature başlık değerini çıkarın.
  2. Webhook gizli anahtarınızı anahtar olarak kullanarak ham istek gövdesinin HMAC-SHA256'sını hesaplayın.
  3. Hesaplanan imzayı başlık değeriyle sabit zamanlı bir karşılaştırma işleviyle karşılaştırın.
  4. Eşleşirlerse istek gerçektir. Eşleşmezse reddedin.

Örnek (Go)

go
func verifySignature(body []byte, secret, signature string) bool {
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write(body)
    expected := hex.EncodeToString(mac.Sum(nil))
    return hmac.Equal([]byte(expected), []byte(signature))
}

Örnek (Node.js)

javascript
const crypto = require("crypto");

function verifySignature(body, secret, signature) {
  const expected = crypto.createHmac("sha256", secret).update(body).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

UYARI

Üretimde imza doğrulamasını asla atlamamayın. Olmadan, webhook URL'nizi bilen herhangi bir taraf sahte olaylar gönderebilir.

En iyi uygulamalar

  • HTTPS kullanın — Yük ele geçirilmesini önlemek için her zaman HTTPS uç noktası kullanın.
  • Hızlı yanıt verin — Hemen 200 döndürün ve yükü eş zamansız olarak işleyin.
  • Yinelemeleri yönetin — Aynı olay iki kez alınırsa tekilleştirmek için X-SetGet-Delivery-ID başlığını kullanın.
  • Gizli anahtarları döndürün — Webhook gizli anahtarınızı periyodik olarak değiştirin ve SetGet'te güncelleyin.
  • İletim günlüklerini izleyin — Otomatik devre dışı bırakılmadan önce başarısız webhook'ları tespit etmek için günlükleri düzenli olarak kontrol edin.

İlgili sayfalar