Mesaj kartları tasarla
Bir botun gönderdiği her şey, ister bir webhook’tan, ister bir komut yanıtından, ister bir düğme güncellemesinden gelsin, bir karttır. İyi bir kart ne olduğunu tek bakışta anlatır: renkli bir kenar, bir başlık, bir durum ve altında ayrıntılar.
Neler yapabilirsin
- Durum gösterOpen, Merged ya da Passing gibi renkli bir kapsül, eklenen ve silinen satırlarla birlikte.
- Ayrıntıları listeleÜyelerin tek dokunuşla kopyalayabildiği etiket ve değer satırları.
- Markdown ile yazKalın, satır içi kod, kod blokları, alıntılar ve onay kutuları.
- Çalıştığını gösterBotun düşünürken dönen bir yükleme simgesi, ardından bir aç/kapa düğmesinin arkasında akıl yürütmesi.
Uygulamada
Üyelerin gördüğü haliyle dört kart. Her biri birkaç satır JSON.
Bir kartın anatomisi
Bir kartın bölümleri, yukarıdan aşağıya. İhtiyacın olmayanı çıkar: yalnızca başlığı olan bir kart da olur.
- Üst bilgi“Message from” ve bir ad: webhook’un adı ya da bir komut yanıtında topluluğunun adı. Bir yanıt, örneğin depo adı gibi bir
badgeekleyebilir. - Başlık ve durum
title_urlayarladığında bağlantıya dönüşentitleve yanındastatuskapsülü. - Alt başlıkİkinci bir kalın satır,
sub_title. - AçıklamaMarkdown ile yazılan gövde.
- AlanlarKopyalama düğmeli etiket ve değer satırları.
- Alt bilgiSaat ve gönderirsen eklenen ve silinen satırlar.
{
"message_container": {
"type": "embed_message",
"badge": "acme/web",
"color": "purple",
"title": "Pull request #212 opened",
"title_url": "https://github.com/acme/web/pull/212",
"status": { "label": "Open", "color": "green", "icon": "pull_request" },
"sub_title": "Faster search in the channel list",
"description": "Search now runs **per keystroke** with a 120 ms debounce.",
"fields": [
{ "field": "Author", "value": "maya" },
{ "field": "Reviewers", "value": "dani, sam" }
],
"additions": 86,
"deletions": 12,
"files_changed": 3
}
}Tüm alanlar
Bunlar message_container içine girer. Bir kartın bir açıklamaya ya da bir yükleme göstergesine ihtiyacı vardır. “Komut yanıtları” olarak işaretlenen alanlar, webhook üzerinden gönderdiğinde atılır.
| Alan | Tür | Ne yapar |
|---|---|---|
type | string | embed_message (varsayılan) ya da system_message. |
badge | string | Üst bilgide adın ardından gelen küçük bir rozet, örneğin acme/web. Komut yanıtları |
avatar_url | string | Kartın simgesinin üzerine gelen bir görsel. |
color | string | Kenar rengi. Aşağıdaki renklere bak. |
title | string | Kalın ilk satır. |
title_url | string | Başlığı bir bağlantıya dönüştürür. |
sub_title | string | Başlığın altında ikinci bir kalın satır. |
description | string | Markdown ile yazılan gövde. |
fields | array | [{ "field": "…", "value": "…" }]: etiket ve değer satırları. |
image_url, image_base64 | string | Kartta bir görsel. |
images | array | [{ "image_url": "…" }]: birkaç görselden oluşan bir galeri. |
status | object ya da string | Başlığın yanında renkli bir kapsül. Aşağıya bak. Komut yanıtları |
additions, deletions, files_changed | number | Alt bilgide diff istatistikleri. Komut yanıtları |
loader, loader_text, loader_sub_text | boolean, string | Gövde yerine dönen bir yükleme simgesi. |
thinking | string | Bir Show thinking düğmesinin arkasındaki akıl yürütme. Komut yanıtları |
thinking markdown anlar: **bold**, _italic_, ~~strike~~, `inline code`, üç ters tırnakla açılan kod blokları, > quotes, - [x] onay kutuları, @bahsetmeler ve :emoji:.Durum ve diff istatistikleri
Durum kapsülü, kimse metni okumadan hikâyeyi anlatır. Başlığın yanında, başlık yoksa alt bilgide durur; diff istatistikleri saatin yanında görünür. İkisi de komut yanıtlarında çalışır ve yerleşik GitHub entegrasyonu da bunları kullanır. Bir webhook ise bunları atar.
{
"message_container": {
"color": "red",
"title": "Build failed on main",
"status": { "label": "Failing", "color": "red" },
"description": "`search.test.js`: 2 of 212 tests failed."
}
}| Alan | Tür | Ne yapar |
|---|---|---|
status | object ya da string | Düz bir string etikettir: "status": "Open". |
status.label | string | Kapsülün metni. Bu olmadan kapsül de olmaz. |
status.color | string | green, purple, red, orange, yellow, blue ya da gray. |
status.icon | string | Aşağıdaki listeden isteğe bağlı bir simge. |
additions | number | Eklenen satırlar, yeşil +86 olarak gösterilir. |
deletions | number | Silinen satırlar, kırmızı -12 olarak gösterilir. |
files_changed | number | Değişen dosyalar, 3 files olarak gösterilir. |
Simgeler
| Değer | Simge | Tipik kullanım |
|---|---|---|
pull_request | git-pull-request | Bir pull request açıldı |
pull_request_closed | git-pull-request-closed | Birleştirilmeden kapatıldı |
merge, merged | git-merge | Birleştirildi |
commit | git-commit | Push edilmiş bir commit |
issue | circle-dot | Bir issue açıldı |
issue_closed | circle-check | Bir issue kapatıldı |
check | circle-check | Testler geçti, bir iş başarıyla tamamlandı |
GitHub için işe yarayan bir eşleme
Yerleşik GitHub entegrasyonu bunları kullanır; kendi araçların için kopyala.
| Olay | Etiket | Renk | Simge |
|---|---|---|---|
| Pull request açıldı | Open | green | pull_request |
| Taslak | Draft | gray | pull_request |
| Birleştirildi | Merged | purple | merged |
| Birleştirilmeden kapatıldı | Closed | red | pull_request_closed |
| Issue açıldı | Open | green | issue |
| Issue kapatıldı | Closed | purple | issue_closed |
| Commit push edildi | Commit | gray | commit |
| Testler geçti | Passing | green | check |
| Testler başarısız | Failing | red | yok |
Yükleme ve akıl yürütme
Bir yapay zekâ yanıtı ya da uzun bir iş gibi biraz zaman alan her şey için önce dönen bir yükleme simgesi olan bir kart gönder, sonra onu sonuçla değiştir. Yükleme göstergesi webhook’larda ve komut yanıtlarında çalışır. Bir komut yanıtında modelin akıl yürütmesini thinking içine de koyabilirsin: üyeler bir metin duvarı yerine bir Show thinking düğmesi görür.
Önce: yükleme göstergesi
Sonra: yanıt, akıl yürütme katlanmış halde
{
"message_container": {
"type": "embed_message",
"color": "blue",
"loader": true,
"loader_text": "Thinking…",
"loader_sub_text": "Reading the last 50 messages"
}
}{
"message_container": {
"type": "embed_message",
"color": "blue",
"sub_title": "maya: when is the standup?",
"description": "Standup is at **09:30**, in #daily.",
"thinking": "Checked the pinned messages and the recurring event in #daily…"
}
}| Alan | Tür | Ne yapar |
|---|---|---|
loader | boolean | true, gövde yerine yükleme simgesini gösterir. |
loader_text | string | Yükleme simgesinin yanındaki satır, örneğin “Düşünüyorum…”. |
loader_sub_text | string | Altında daha küçük bir satır. |
thinking | string | Açıklamanın altında katlanmış akıl yürütme, markdown ile. |
Yükleme göstergesini yanıtla değiştirmek için mesajı loader içermeyen yeni bir kartla güncelle. Nasıl yapılacağı canlı güncellemeler sayfasında.
Uzun açıklamalar
Bir açıklama 50.000 bayta kadar olabilir. İlk 1.000 bayt aşıldığında üyeler başlangıcı ve geri kalanını yükleyen bir Show more düğmesi görür, böylece uzun bir rapor kanalı doldurmaz.
Sistem mesajları
Bir bot gönderisi yerine bir duyuru için "type": "system_message" ayarla: bakım aralıkları, kural değişiklikleri, topluluğun kendisi adına konuşan her şey. Aynı alanları ve düğmeleri kabul eder.
{
"message_container": {
"type": "system_message",
"color": "orange",
"title": "Maintenance tonight",
"description": "The build servers are down from 22:00 to 23:00."
}
}Renkler
Kenar rengi, bir karttaki en hızlı sinyaldir. Aynı tür haber için her seferinde aynı rengi kullan.
| Renk | Ne için kullanılır |
|---|---|
green | Başarı: geçti, yayına alındı, tamam |
red | Hata: başarısız, çöktü, reddedildi |
orange | Göz atılması gereken bir uyarı |
yellow | Birini bekliyor: onaylar, sorular |
blue | Bilgi, varsayılan |
purple | Kod olayları ya da özel bir şey |
Embed’ini oluştur
Alanları ya da JSON payload’ını düzenle: ikisi birlikte değişir. Önizleme, mesajı tam olarak bir kanalda görüneceği gibi gösterir. Bu gerçek webhook gövdesidir; her şey doğru göründüğünde kopyala.