# Bildirimler ve webhook'lar

> Deploy'ları, site kesintilerini ve sunucu alarmlarını Slack, Discord, Telegram ya da kendi imzalı webhook'unuza gönderin.

**Ayarlar → Bildirimler** altında organizasyonunuzdan olay alacak kanallar ekleyin.

## Kanallar

| Kanal | Nasıl kurulur |
| --- | --- |
| Slack | Slack'te: Apps → Incoming Webhooks → Add to a channel; ardından webhook adresini yapıştırın. |
| Discord | Discord'da: kanal ayarları → Entegrasyonlar → Webhook'lar → Yeni webhook → Webhook URL'sini kopyala. |
| Telegram | @BotFather ile bir bot oluşturun, grubunuza ya da kanalınıza ekleyin, bot token'ını ve chat id'yi girin. |
| Webhook (imzalı) | Zefily kendi sistemleriniz için HTTPS uç noktanıza imzalı JSON gönderir (POST). |

Webhook adresleri ve bot token'ları gizli (şifreli) tutulur.

## Olaylar

Her kanalın hangi olayları alacağını seçin. Alarmlar bir sohbet kanalına yalnızca o kanalın olayları arasında seçiliyse gider; sahipler ve yöneticiler bunları ayrıca e-postayla ve bildirim zilinde alır.

| Olay | Ne zaman |
| --- | --- |
| Deploy bitti | Bir deploy ya da geri alma bitti (başarılı ya da başarısız) |
| Site erişilemiyor | Bir uptime kontrolü siteyi erişilemez buldu |
| Site erişilebilir | Erişilemeyen bir site yeniden yanıt veriyor |
| Sunucu alarmı açıldı | Bir sunucu çevrimdışı oldu, bir disk eşiğinizi geçti, servisler başarısız oldu, bellek, CPU ya da yük yüksek kaldı veya ajan sertifikasında sorun var |
| Sunucu alarmı kapandı | O alarm ortadan kalktı |

**Test gönder** bir test mesajı gönderir. **Son gönderimler** her gönderimin durumunu (**Teslim edildi**, **Yeniden denenecek**, **Başarısız**) ve deneme sayısını gösterir; başarısız gönderimler yeniden denenir. Sürekli hata veren bir kanal **… tarihinden beri hata veriyor** gösterir. **Devre dışı bırak** bir kanalı duraklatır.

## İmzalı webhook'ları doğrulama

Her istek bir `Zefily-Signature` başlığı taşır: `t=<unix zamanı>,v1=<imza>`. İmza, imzalama anahtarınızla `t.gövde` (zaman damgası, bir nokta, ham gövde) değerinin HMAC-SHA256'sıdır. Anahtar webhook'u oluşturduğunuzda **yalnızca bir kez** gösterilir; **Yeni anahtar** onu yeniler.

```php
[$t, $v1] = sscanf($header, 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t.'.'.$body, $secret);
$valid = hash_equals($expected, $v1) && abs(time() - $t) < 300;
```

Sabit zamanlı karşılaştırın ve eski zaman damgalarını reddedin.

---
Kaynak: https://zefily.com/tr/docs/bildirimler
