Test Raporunu Slack Kanalına Otomatik Olarak İletmek
Testleri çalıştırdık nihayetinde rapor oluştu. İlgili raporu, ekibin haberi olsun diye slack kanalına otomatik olarak yollamak istiyoruz diyelim. Toplam 5 adımda bunu yapabilmek mümkün, adımlar şöyle:
Test otomasyon raporunun iletileceği slack kanalının oluşturulması.
İlgili kanala raporları yollayacak bot/app oluşturulması.
Bot’a, kanal üzerinde işlem yapabilmesi için yetki verilmesi
Bot’un slack kanalına davet edilmesi.
Slack API’leri kullanarak, raporun kanala iletilmesi.
Slack Kanalı Oluşturma
Slack uygulaması üzerinden:
- Channels → Add channels → Create a new channel butonuna tıklanır.
Gelen ekranda:
Project starter kit
Team support
1-1 Coaching
gibi çeşitli templateler var. Size uyan herhangi bir template varsa seçebilirsiniz, aksi durumda Blank channel seçip, kanala bir isim verip kaydettikten sonra kanalınız açılmış demektir.
Kanal oluşturduktan sonra, kanalın ID’sini mutlaka bir yere not etmelisiniz. Kanal ID’sine erişmek için şu adımları takip edebilirsin.
Uygulama üzerinden Slack kanalına git
Kanalın üzerine tıkla ve kanal detaylarına git
Detaylar arasında Channel ID’yi bul.
Channel ID genellikle C harfi ile başlıyor.
Örnek: C0931HQTPE1
Bot Oluşturmak
https://api.slack.com/ adresine gidelim ve Slack hesabımıza login olalım.
Gelen ekranda:
- Your Apps butonuna tıklanır.
Create New App → From scratch seçilir. Akabinde Name app & choose workspace ekranı gelecektir.
App Name kısmına, botunuzun adını verin. Örn: Ulak
Pick a workspace to develop your app in: kısmına oluşturduğunuz kanal hangi workspace’de ise onu seçin.
- Create App diyerek botu oluşturalım. Yeni botumuz hayırlı olsun 🎉😀🎉
Slack Botuna Yetkilerin Verilmesi
Şimdi, botun ayarlarına gidelim. Features kısmından önce Incoming Webhooks’u aktif edelim sonrasında OAuth & Permissions sekmesine gidip “Install to size_ait_olan_workspace“ butonu olması gerekli ona tıklayalım.
Akabinde Scopes bölümünde bota şu yetkileri verelim:
chat:write
files:write
files:read
incoming-webhook
Bot’un Slack Kanalına Davet Edilmesi
Slack kanalını oluşturduk, peşinden botu oluşturup yetkilerini verdik. Sırada ilgili botun kanala davet edilmesi kaldı. Bot’un kanala davet edilmesi önemli, aksi durumda ilgili kanala rapor yollayamayız.
Bot’u kanala davet etmek için, ilgili kanalda mesaj attığımız kutucuğa gelip şu komutu çalıştırmalısınız:
/invite @senin-test-otomasyon-botunun-ismi
Dosya’nın Slack Kanalına Gönderilmesi
Bu bölüme uyarıyla başlayalım. Slack’in dokümanda bahsettiği gibi dosya gönderimi için files.upload
metodunu kullanıyorsanız 11 Mart 2025 tarihine kadar yeni yönteme geçmeniz gerekmekte. Biz yeni yöntemle ilerliyor olacağız.
Slack’in bahsettiği yeni yöntemle dosya gönderim işini 3 adımda yapabileceğiz. Bu 3 adım kısaca şöyle:
files.getUploadURLExternal
end-pointine git. Dosya adı ve dosya boyutuyla(byte cinsinden) alakalı bilgi ver.İlk adımdan dönen cevapta, dosyayı upload etmen gereken
URL
ve dosyaya atananID
bilgisi verilecek. Dosyayı ilgili URL’ye upload et.Son aşama olan
files.completeUploadExternal
end-pointine git. Dosyanın hangi kanala, hangi isimle ve açıklamayla atılacağını söyle.
Dosya gönderme işleminin 3 aşamayı bölünmesi hız ve güvenlik kaygılarından dolayı ortaya çıkmış. Bu aşamalar sayesinde büyük boyutlu dosyalar hızlı biçimde taranabilir ve gönderme işlemi yapılabilir.
Birinci Adım
curl --location 'https://slack.com/api/files.getUploadURLExternal' \
--header 'Authorization: Bearer xoxb-senin-token-buraya-gelecek' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'filename=rapor.tar.gz' \
--data-urlencode 'length=185988'
İlk istekte dikkat edilmesi gereken alanlar:
Authorization: buraya botunuza ait olan token bilgisi gelmelidir. İlgili token’ı
api.slack.com
adresinden, botunuza ait OAuth & Permissions → OAuth Tokens sekmesi altında bulabilirsiniz.Content-type: mutlaka x-www-form-urlencoded olmalıdır.
Filename: dosyanızın adını uzantısıyla birlikte yazmalısınız
Length: dosyanızın byte cinsinden boyutu. Örneğin 186KB’lık dosya için 185988 şeklinde yazdım.
Bu bilgileri doldurduktan sonra POST
işlemi yapmanız gerekmekte.
Dönen cevap şuna benzemeli:
upload_url
'ye ikinci adımda, file_id
'ye üçüncü adımda ihtiyacımız olacak.
İkinci Adım
Birinci adımdan elde ettiğimiz upload_url’ye POST
işlemi yapacağız. isteği form
olarak yapıp dosya path
’ini belirtmemiz gerekmekte.
curl --location 'https://files.slack.com/upload/v1/sana-verilen-url' \
--form '=@"/Users/zaferdu/Downloads/dosya-adi.tar.gz"'
İkinci adımda bir şeyleri yanlış yapsanız bile 200 cevabı dönebiliyor. Bu nedenle cevap olarak hem 200 hem de dosya boyutunuzu byte cinsinden döndüğünden emin olun.
Üçüncü Adım
curl --location 'https://slack.com/api/files.completeUploadExternal' \
--header 'Authorization: Bearer xoxb-senin-token-buraya-gelecek' \
--header 'Content-Type: application/json; charset=utf-8;' \
--data '{
"files": [
{
"id": "F08849C1WGN",
"title": "test-otomasyon-rapor.tar-gz"
}
],
"channel_id": "C2874HQNPE1",
"initial_comment": "init comment"
}'
Dikkat edilmesi gereken parametreler:
Authorization: ilk adımda da lazım olmuştu, token’ı nereden alacağınızı biliyorsunuz.
Id: ilk isteği attıktan sonra dönen cevapta dosyanızın
id
'si veriliyor. Buraya o id’yi yazmalısınız.Title: dosyanızın slack kanalında hangi isimle görünmesini istiyorsanız, onu yazabilirsiniz. İlk adımda belirttiğiniz dosya isminden farklı olabilir.
Channel_id: dosyayı hangi kanala yollacacaksanız onun ID bilgisi gerekmekte. Birden fazla kanala yollamak istiyorsanız aralarına virgül koyabilirsiniz.
Initial_comment: dosyayı hangi açıklamayla atmak istiyorsanız o bilgiyi girebilirsiniz.
Tüm bu bilgileri doldurup files.completeUploadExternal
end-pointine POST
işlemi yapmalısınız.
Her şey yolunda gittiyse, dosya kanala gitmiş olmalı.
Bundan Sonrası
Dosyanın Slack Kanalına Gönderilmesi akışını cURL
üzerinden anlatmayı tercih ettim. Sebebi; tüm ekipler için ortak bir dil olabilir şeklinde düşünmemdir. Kullandığınız pipeline Azure, Github, Gitlab vb. olabilir ve rapor ortaya çıktıktan sonra bu işlemleri yapmak için Bash, Java, JS gibi farklı programlama dillerini kullanabilirsiniz. Dolayısıyla cURL
bu programlama dillerinin ortasında duruyor, siz hangi programlama dili kullanıyorsanız ona göre implemente edebilirsiniz.
Bir sonraki yazıda görüşmek üzere, şimdilik hoşça kalın 👋👋