# Slack entegrasyonu

> Sorgu taleplerini Slack'ten etkileşimli düğmelerle onaylayıp reddedin — uçtan uca HMAC-SHA256 imzalarıyla doğrulanır.

- Dokümantasyon: Kılavuzlar
- Güncelleme: 2026-10-13
- Kaynak: https://queryproxy.com/tr/docs/slack-entegrasyonu/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Slack entegrasyonuyla yeni sorgu talepleri bir kanala **Approve / Reject**
düğmeleriyle duyurulur; kararlar QueryProxy'ye geri akar — webdekiyle aynı
kurallarla (rol denetimi, kendine onay yok) ve kriptografik doğrulamayla.

## Kurulum

1. [api.slack.com/apps](https://api.slack.com/apps) adresinden çalışma alanınız
   için bir **Slack uygulaması** oluşturun.
2. **Incoming Webhooks**'u etkinleştirin ve onay kanalınız (ör. `#db-approvals`)
   için bir webhook ekleyin.
3. **Interactivity**'yi etkinleştirin ve istek URL'sini şuna ayarlayın:

   ```
   https://queryproxy-sunucunuz/webhooks/slack/interactions
   ```

4. QueryProxy'de **ChatOps**'u açın; **webhook URL'sini** ve uygulamanın
   **signing secret**'ını yapıştırın. İkisi de şifreli saklanır. İlk kurulum
   secret'sız kaydedilemediği için bu adımı **bir sistem yöneticisi** yapar;
   sonrasında webhook URL'sini ve açık/kapalı bayrağını takımın DBA'leri
   güncellemeye devam eder. Webhook URL'si `https://` olmalı ve host'u izin
   listesinde bulunmalıdır (varsayılan olarak `hooks.slack.com`,
   `*.webhook.office.com` ve `*.logic.azure.com`; liste sohbet sağlayıcıları
   arasında ortaktır; `QUERYPROXY_CHAT_WEBHOOK_ALLOWED_HOSTS` ile genişletin).
5. Sistem yöneticisi olarak **Teams & Users → Manage users** ekranını açın ve her onaylayıcının **Slack üye kimliğini** girin
   (ör. `U0123ABC` — Slack profilinde *Copy member ID* ile görünür). Bu eşleme,
   Slack tıklamalarını QueryProxy kullanıcılarına bağlar.

> **Kırıcı değişiklik — signing secret'ı yalnızca sistem yöneticisi
> belirleyebilir.** Bir DBA artık secret'ı giremez ya da döndüremez; webhook
> URL'si ve enabled bayrağı DBA'lerde kalır. Mevcut secret'ı değiştirmek için
> yönetici, **yürürlükteki secret'ı da girmek zorundadır** — secret bilgisi,
> rotasyonu uçtan devralmadan ayıran tek şeydir. Gerekçe: HMAC yalnızca
> "çağıranın secret'ı bildiğini" kanıtlar, "şu kişi onayladı" demez; secret'ı
> kendi seçebilen bir DBA, kendi talebini bir meslektaşı adına onaylayıp denetim
> izine o kişinin adını yazdırabiliyordu. ChatOps'u zaten kurmuş kurulumlarda
> secret'ın yükseltmeden sonra **bir kez döndürülmesi** önerilir.
>
> Aynı gerekçeyle entegrasyonu **silmek de yalnızca sistem yöneticisinin
> işidir**: yeniden kurmak için gereken secret'ı ancak bir yönetici girebildiği
> için, silme düğmesi bir DBA'in elinde takımın ChatOps'tan tek yönlü çıkışı
> olurdu. DBA'in gündelik, geri alınabilir kontrolü **Enabled** bayrağını
> kapatıp kaydetmektir.

## Nasıl görünür

Bir talep gönderildiğinde QueryProxy; talep sahibi, bağlantı, SQL önizlemesi (400
karakterde kesilir; `QUERYPROXY_CHAT_INCLUDE_SQL=false` ile kapatılır) ve
üç aksiyonla bir mesaj yayınlar: **Approve**, **Reject** ve **Open in
QueryProxy**. Karardan sonra mesaj yerinde güncellenir — düğmeler kaybolur ve
sonuç görünür; bayat bir mesajdan ikinci kez karar verilemez.

Slack'ten yapılan redler "Rejected via Slack by &lt;isim&gt;" genel gerekçesini
kaydeder. Yazılı gerekçe için web arayüzünden reddedin.

> **Kırıcı değişiklik — bu sürümden önce gönderilmiş mesajlardaki düğmeler
> çalışmaz.** Her **Approve** / **Reject** düğmesi artık, yalnızca o talebe bağlı,
> **24 saat** ömürlü ve **tek kullanımlık** bir aksiyon token'ı taşır. Eski
> mesajlarda böyle bir token yoktur; tıklama doğrulanamadı mesajıyla geri
> çevrilir. O talepleri web arayüzünden karara bağlayın — yeni gönderilen
> talepler token'lı düğmelerle gelir.

## Güvenlik

Slack'ten gelen her geri çağrı, herhangi bir şey olmadan önce doğrulanır:

- **İmza** — `X-Slack-Signature` başlığı
  `v0=HMAC_SHA256("v0:{timestamp}:{raw_body}", signing_secret)` ile sabit
  zamanlı karşılaştırmayla eşleşmelidir.
- **Tekrar koruması** — `X-Slack-Request-Timestamp`'e göre **±5 dakikadan**
  eski istekler reddedilir.
- **Aksiyon token'ı** — düğmenin taşıdığı token canlı, kullanılmamış ve tam
  olarak o talebe bağlı olmalıdır. Böylece geri çağrı, QueryProxy'nin gerçekten
  yayınladığı bir mesajı yanıtlar ve her mesaj **yalnızca bir kez** karar verir;
  secret'ı elinde tutmak tek başına yoktan bir karar uydurmaya ya da yakalanmış
  bir tıklamayı yeniden oynatmaya yetmez. Token karar gerçekten kaydedildikten
  sonra yakılır — yetkilendirmeye takılan bir tıklama kanalın hakkını harcamaz.
- **Kimlik** — tıklayan Slack kullanıcısı, bir yöneticinin oluşturduğu eşleme
  üzerinden bir QueryProxy kullanıcısına çözülmeli; bu kullanıcı ya
  **entegrasyonun takımına üye** olup o takımda DBA rolünü taşımalı ya da
  admin olmalıdır. Eşlenmemiş veya yetkisiz kullanıcılar özel bir hata mesajı
  görür; hiçbir şey değişmez.
- **Kurallar** — kendine onay Slack'te de aynen engellidir. Webde olduğu gibi
  admin'ler DBA rolü kuralını ve kendine onay engelini aşabilir; kuralı aşan
  bir admin onayı denetim günlüğünde işaretlenir.

Sahte veya bayat bir geri çağrı `401` döner ve hiçbir durumu değiştirmez.
Webhook ucu ayrıca hız sınırlıdır.
