Ana içeriğe geç
Geliştiriciler Mesaj kartları

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.

  1. Ü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 badge ekleyebilir.
  2. Başlık ve durumtitle_url ayarladığında bağlantıya dönüşen title ve yanında status kapsülü.
  3. Alt başlıkİkinci bir kalın satır, sub_title.
  4. AçıklamaMarkdown ile yazılan gövde.
  5. AlanlarKopyalama düğmeli etiket ve değer satırları.
  6. Alt bilgiSaat ve gönderirsen eklenen ve silinen satırlar.
json
{
  "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.

AlanTürNe yapar
typestringembed_message (varsayılan) ya da system_message.
badgestringÜst bilgide adın ardından gelen küçük bir rozet, örneğin acme/web. Komut yanıtları
avatar_urlstringKartın simgesinin üzerine gelen bir görsel.
colorstringKenar rengi. Aşağıdaki renklere bak.
titlestringKalın ilk satır.
title_urlstringBaşlığı bir bağlantıya dönüştürür.
sub_titlestringBaşlığın altında ikinci bir kalın satır.
descriptionstringMarkdown ile yazılan gövde.
fieldsarray[{ "field": "…", "value": "…" }]: etiket ve değer satırları.
image_url, image_base64stringKartta bir görsel.
imagesarray[{ "image_url": "…" }]: birkaç görselden oluşan bir galeri.
statusobject ya da stringBaşlığın yanında renkli bir kapsül. Aşağıya bak. Komut yanıtları
additions, deletions, files_changednumberAlt bilgide diff istatistikleri. Komut yanıtları
loader, loader_text, loader_sub_textboolean, stringGövde yerine dönen bir yükleme simgesi.
thinkingstringBir Show thinking düğmesinin arkasındaki akıl yürütme. Komut yanıtları
Açıklama ve 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.

json
{
  "message_container": {
    "color": "red",
    "title": "Build failed on main",
    "status": { "label": "Failing", "color": "red" },
    "description": "`search.test.js`: 2 of 212 tests failed."
  }
}
AlanTürNe yapar
statusobject ya da stringDüz bir string etikettir: "status": "Open".
status.labelstringKapsülün metni. Bu olmadan kapsül de olmaz.
status.colorstringgreen, purple, red, orange, yellow, blue ya da gray.
status.iconstringAşağıdaki listeden isteğe bağlı bir simge.
additionsnumberEklenen satırlar, yeşil +86 olarak gösterilir.
deletionsnumberSilinen satırlar, kırmızı -12 olarak gösterilir.
files_changednumberDeğişen dosyalar, 3 files olarak gösterilir.

Simgeler

DeğerSimgeTipik kullanım
pull_requestgit-pull-requestBir pull request açıldı
pull_request_closedgit-pull-request-closedBirleştirilmeden kapatıldı
merge, mergedgit-mergeBirleştirildi
commitgit-commitPush edilmiş bir commit
issuecircle-dotBir issue açıldı
issue_closedcircle-checkBir issue kapatıldı
checkcircle-checkTestler 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.

OlayEtiketRenkSimge
Pull request açıldıOpengreenpull_request
TaslakDraftgraypull_request
BirleştirildiMergedpurplemerged
Birleştirilmeden kapatıldıClosedredpull_request_closed
Issue açıldıOpengreenissue
Issue kapatıldıClosedpurpleissue_closed
Commit push edildiCommitgraycommit
Testler geçtiPassinggreencheck
Testler başarısızFailingredyok

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.

assistant
System
Message from Assistant
Düşünüyorum…Son 50 mesajı okuyorum

Önce: yükleme göstergesi

assistant
System
Message from Assistant

maya: standup ne zaman?

Standup saat 09:30’da, #daily kanalında.
Sabitlenmiş mesajları ve #daily kanalındaki tekrarlayan etkinliği kontrol ettim.

Sonra: yanıt, akıl yürütme katlanmış halde

json
{
  "message_container": {
    "type": "embed_message",
    "color": "blue",
    "loader": true,
    "loader_text": "Thinking…",
    "loader_sub_text": "Reading the last 50 messages"
  }
}
json
{
  "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…"
  }
}
AlanTürNe yapar
loaderbooleantrue, gövde yerine yükleme simgesini gösterir.
loader_textstringYükleme simgesinin yanındaki satır, örneğin “Düşünüyorum…”.
loader_sub_textstringAltında daha küçük bir satır.
thinkingstringAçı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.

json
{
  "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.

RenkNe için kullanılır
greenBaşarı: geçti, yayına alındı, tamam
redHata: başarısız, çöktü, reddedildi
orangeGöz atılması gereken bir uyarı
yellowBirini bekliyor: onaylar, sorular
blueBilgi, varsayılan
purpleKod 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.

Hazır şablonlar
Düğmeler
Önizleme
Webhook gövdesi

Geliştirmeye devam et