Přeskočit na hlavní obsah
Vývojáři Karty zpráv

Navrhni karty zpráv

Všechno, co bot zveřejní, ať přes webhook, v odpovědi na příkaz, nebo v aktualizaci po stisku tlačítka, je karta. Dobrá karta na první pohled řekne, co se stalo: barevný okraj, nadpis, stav a pod tím podrobnosti.

Co s tím můžeš dělat

  • Ukaž stavBarevný štítek jako Open, Merged nebo Passing, s přidanými a odebranými řádky.
  • Vypiš podrobnostiŘádky s popiskem a hodnotou, které členové zkopírují jedním klepnutím.
  • Piš v markdownuTučné písmo, inline kód, bloky kódu, citace a zaškrtávací políčka.
  • Ukaž, že pracuješSpinner, zatímco bot přemýšlí, a potom jeho uvažování schované za přepínačem.

V aplikaci

Čtyři karty tak, jak je vidí členové. Každá je pár řádků JSONu.

Stavba karty

Části karty, shora dolů. Co nepotřebuješ, vynech: i karta jen s nadpisem je v pořádku.

  1. Záhlaví„Message from“ a jméno: jméno webhooku, nebo u odpovědi na příkaz jméno tvé komunity. Odpověď může přidat badge, třeba repozitář.
  2. Nadpis a stavtitle, který se stane odkazem, když nastavíš title_url, a vedle něj štítek status.
  3. PodnadpisDruhý tučný řádek, sub_title.
  4. PopisTělo karty, v markdownu.
  5. PoleŘádky s popiskem a hodnotou a s tlačítkem pro kopírování.
  6. PatičkaČas a přidané a odebrané řádky, pokud je pošleš.
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
  }
}

Všechna pole

Tato pole patří do message_container. Karta potřebuje popis, nebo loader. Pole označená „Odpovědi na příkazy“ se zahodí, když posíláš přes webhook.

PoleTypCo dělá
typestringembed_message (výchozí) nebo system_message.
badgestringMalý štítek za jménem v záhlaví, třeba acme/web. Odpovědi na příkazy
avatar_urlstringObrázek přes ikonu karty.
colorstringBarva okraje. Viz barvy níže.
titlestringTučný první řádek.
title_urlstringUdělá z nadpisu odkaz.
sub_titlestringDruhý tučný řádek pod nadpisem.
descriptionstringTělo karty, v markdownu.
fieldsarray[{ "field": "…", "value": "…" }]: řádky s popiskem a hodnotou.
image_url, image_base64stringObrázek na kartě.
imagesarray[{ "image_url": "…" }]: galerie několika obrázků.
statusobject nebo stringBarevný štítek vedle nadpisu. Viz níže. Odpovědi na příkazy
additions, deletions, files_changednumberStatistiky diffu v patičce. Odpovědi na příkazy
loader, loader_text, loader_sub_textboolean, stringSpinner místo těla karty.
thinkingstringUvažování schované za přepínačem Show thinking. Odpovědi na příkazy
Popis i thinking rozumí markdownu: **bold**, _italic_, ~~strike~~, `inline code`, bloky kódu ve trojitých backtickách, > quotes, zaškrtávací políčka - [x], @zmínky a :emoji:.

Stav a statistiky diffu

Štítek stavu řekne, o co jde, dřív, než si kdokoli přečte text. Je vedle nadpisu, nebo v patičce, když nadpis chybí; statistiky diffu se ukážou vedle času. Obojí funguje v odpovědích na příkazy a používá to vestavěná integrace s GitHubem. Webhook je zahodí.

json
{
  "message_container": {
    "color": "red",
    "title": "Build failed on main",
    "status": { "label": "Failing", "color": "red" },
    "description": "`search.test.js`: 2 of 212 tests failed."
  }
}
PoleTypCo dělá
statusobject nebo stringSamotný string je popisek: "status": "Open".
status.labelstringText štítku. Bez něj žádný štítek není.
status.colorstringgreen, purple, red, orange, yellow, blue nebo gray.
status.iconstringVolitelná ikona ze seznamu níže.
additionsnumberPřidané řádky, zobrazené zeleně jako +86.
deletionsnumberOdebrané řádky, zobrazené červeně jako -12.
files_changednumberZměněné soubory, zobrazené jako 3 files.

Ikony

HodnotaIkonaTypické použití
pull_requestgit-pull-requestOtevřený pull request
pull_request_closedgit-pull-request-closedZavřený bez sloučení
merge, mergedgit-mergeSloučeno
commitgit-commitPushnutý commit
issuecircle-dotOtevřené issue
issue_closedcircle-checkZavřené issue
checkcircle-checkTesty prošly, úloha uspěla

Mapování, které funguje pro GitHub

Vestavěná integrace s GitHubem používá tyto hodnoty; zkopíruj si je pro vlastní nástroje.

UdálostPopisekBarvaIkona
Otevřený pull requestOpengreenpull_request
KonceptDraftgraypull_request
SloučenýMergedpurplemerged
Zavřený bez sloučeníClosedredpull_request_closed
Otevřené issueOpengreenissue
Zavřené issueClosedpurpleissue_closed
Pushnutý commitCommitgraycommit
Testy prošlyPassinggreencheck
Testy selhalyFailingredžádná

Loader a uvažování

U všeho, co chvíli trvá, třeba u odpovědi AI nebo dlouhé úlohy, nejdřív zveřejni kartu se spinnerem a pak ji nahraď výsledkem. Loader funguje u webhooků i odpovědí na příkazy. V odpovědi na příkaz můžeš navíc dát uvažování modelu do thinking: členové místo stěny textu uvidí přepínač Show thinking.

assistant
System
Message from Assistant
Přemýšlím…Čtu posledních 50 zpráv

Nejdřív: loader

assistant
System
Message from Assistant

maya: kdy je standup?

Standup je v 09:30, v #daily.
Zkontrolovány připnuté zprávy a opakovaná událost v #daily.

Potom: odpověď, uvažování sbalené

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…"
  }
}
PoleTypCo dělá
loaderbooleantrue zobrazí spinner místo těla karty.
loader_textstringŘádek vedle spinneru, třeba „Přemýšlím…“.
loader_sub_textstringMenší řádek pod ním.
thinkingstringSbalené uvažování pod popisem, v markdownu.

Když chceš loader vyměnit za odpověď, aktualizuj zprávu novou kartou bez loader. Jak na to, popisují živé aktualizace.

Dlouhé popisy

Popis může mít až 50 000 bajtů. Po prvních 1 000 členové uvidí začátek a tlačítko Show more, které načte zbytek, takže dlouhý report nezaplaví kanál.

Systémové zprávy

Nastav "type": "system_message" pro oznámení místo příspěvku bota: plánovanou údržbu, změny pravidel a cokoli, co mluví za samotnou komunitu. Bere stejná pole i tlačítka.

json
{
  "message_container": {
    "type": "system_message",
    "color": "orange",
    "title": "Maintenance tonight",
    "description": "The build servers are down from 22:00 to 23:00."
  }
}

Barvy

Barva okraje je na kartě nejrychlejší signál. Pro stejný druh zpráv používej pokaždé stejnou barvu.

BarvaNa co ji použít
greenÚspěch: prošlo, nasazeno, hotovo
redNeúspěch: selhalo, výpadek, zamítnuto
orangeVarování, na které je potřeba se podívat
yellowČeká se na někoho: schválení, otázky
blueInformace, výchozí barva
purpleUdálosti v kódu nebo něco zvláštního

Postav si svůj embed

Uprav pole nebo JSON payload: obojí zůstává synchronizované. Náhled ukazuje zprávu přesně tak, jak se objeví v kanálu. Tohle je skutečné tělo webhooku; zkopíruj ho, až bude vše sedět.

Šablony
Tlačítka
Náhled
Tělo webhooku

Tvoř dál