Gå til hovedindhold
Udviklere Beskedkort

Design beskedkort

Alt, hvad en bot poster, fra en webhook, et kommandosvar eller en opdatering fra en knap, er et kort. Et godt kort siger med ét blik, hvad der skete: en farvet kant, en titel, en status og detaljerne nedenunder.

Det kan du

  • Vis en statusEn farvet pille som Åben, Merget eller Bestået, med tilføjede og fjernede linjer.
  • Vis detaljerneRækker med etiket og værdi, som medlemmerne kan kopiere med ét tryk.
  • Skriv i markdownFed skrift, inline-kode, kodeblokke, citater og afkrydsningsfelter.
  • Vis, at du arbejderEn spinner, mens din bot tænker, og bagefter dens ræsonnement bag en knap.

I appen

Fire kort, som medlemmerne ser dem. Hvert af dem er et par linjer JSON.

Et korts opbygning

Kortets dele, oppefra og ned. Udelad det, du ikke har brug for: et kort med kun en titel er fint.

  1. Header"Besked fra" og et navn: webhookens navn, eller dit fællesskabs navn ved et kommandosvar. Et svar kan tilføje et badge, som repositoriet.
  2. Titel og statusFeltet title, der bliver et link, når du sætter title_url, med status-pillen ved siden af.
  3. UndertitelEn anden linje i fed skrift, sub_title.
  4. BeskrivelseBrødteksten, i markdown.
  5. FelterRækker med etiket og værdi, med en kopiknap.
  6. BundTidspunktet, og tilføjede og fjernede linjer, hvis du sender dem.
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
  }
}

Alle felter

De her hører til i message_container. Et kort skal have en beskrivelse eller en loader. Felter markeret "kommandosvar" fjernes, når du poster gennem en webhook.

FeltTypeHvad det gør
typestringembed_message (standard) eller system_message.
badgestringEn lille chip efter navnet i headeren, som acme/web. Kommandosvar
avatar_urlstringEt billede oven på kortets ikon.
colorstringKantens farve. Se farver nedenfor.
titlestringFørste linje, i fed skrift.
title_urlstringGør titlen til et link.
sub_titlestringEn anden linje i fed skrift under titlen.
descriptionstringBrødteksten, i markdown.
fieldsarray[{ "field": "…", "value": "…" }]: rækker med etiket og værdi.
image_url, image_base64stringEt billede på kortet.
imagesarray[{ "image_url": "…" }]: et galleri med flere billeder.
statusobject eller stringEn farvet pille ved siden af titlen. Se nedenfor. Kommandosvar
additions, deletions, files_changednumberDiff-statistik i bunden. Kommandosvar
loader, loader_text, loader_sub_textboolean, stringEn spinner i stedet for brødteksten.
thinkingstringRæsonnement bag en Vis tænkning-knap. Kommandosvar
Beskrivelsen og thinking forstår markdown: **bold**, _italic_, ~~strike~~, `inline code`, kodeblokke med hegn, > quotes, afkrydsningsfelter med - [x], @omtaler og :emoji:.

Status og diff-statistik

En statuspille fortæller historien, før nogen læser teksten. Den sidder ved siden af titlen, eller i bunden, når der ikke er nogen titel; diff-statistikken vises ved siden af tidspunktet. Begge virker i kommandosvar, og den indbyggede GitHub-integration bruger dem. En webhook fjerner dem.

json
{
  "message_container": {
    "color": "red",
    "title": "Build failed on main",
    "status": { "label": "Failing", "color": "red" },
    "description": "`search.test.js`: 2 of 212 tests failed."
  }
}
FeltTypeHvad det gør
statusobject eller stringEn ren string er etiketten: "status": "Open".
status.labelstringTeksten i pillen. Uden den er der ingen pille.
status.colorstringgreen, purple, red, orange, yellow, blue eller gray.
status.iconstringEt valgfrit ikon fra listen nedenfor.
additionsnumberTilføjede linjer, vist som grøn +86.
deletionsnumberFjernede linjer, vist som rød -12.
files_changednumberBerørte filer, vist som 3 files.

Ikoner

VærdiIkonTypisk brug
pull_requestgit-pull-requestEn pull request er oprettet
pull_request_closedgit-pull-request-closedLukket uden merge
merge, mergedgit-mergeMerget
commitgit-commitEt pushet commit
issuecircle-dotEt issue er oprettet
issue_closedcircle-checkEt issue er lukket
checkcircle-checkTests bestået, et job lykkedes

En mapping, der virker til GitHub

Den indbyggede GitHub-integration bruger disse; kopiér dem til dine egne værktøjer.

HændelseEtiketFarveIkon
Pull request oprettetOpengreenpull_request
KladdeDraftgraypull_request
MergetMergedpurplemerged
Lukket uden mergeClosedredpull_request_closed
Issue oprettetOpengreenissue
Issue lukketClosedpurpleissue_closed
Commit pushetCommitgraycommit
Tests beståetPassinggreencheck
Tests fejletFailingredintet

Loader og tænkning

Til alt, der tager et øjeblik, som et AI-svar eller et langt job, poster du først et kort med en spinner og erstatter det så med resultatet. Loaderen virker fra webhooks og kommandosvar. I et kommandosvar kan du også lægge modellens ræsonnement i thinking: medlemmerne ser en Vis tænkning-knap i stedet for en mur af tekst.

assistant
System
Besked fra Assistant
Tænker…Læser de sidste 50 beskeder

Først: loaderen

assistant
System
Besked fra Assistant

maya: hvornår er standup?

Standup er kl. 09:30 i #daily.
Tjekkede de fastgjorte beskeder og den tilbagevendende begivenhed i #daily.

Så: svaret, med ræsonnementet foldet sammen

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…"
  }
}
FeltTypeHvad det gør
loaderbooleantrue viser spinneren i stedet for brødteksten.
loader_textstringLinjen ved siden af spinneren, som "Tænker…".
loader_sub_textstringEn mindre linje under den.
thinkingstringSammenfoldet ræsonnement under beskrivelsen, i markdown.

For at skifte loaderen ud med svaret opdaterer du beskeden med et nyt kort uden loader. Hvordan står under liveopdateringer.

Lange beskrivelser

En beskrivelse kan være op til 50.000 bytes. Efter de første 1.000 ser medlemmerne starten og en Vis mere-knap, der henter resten, så en lang rapport ikke oversvømmer kanalen.

Systembeskeder

Sæt "type": "system_message" for en meddelelse i stedet for et botopslag: vedligeholdelsesvinduer, ændrede regler, alt, der taler på vegne af selve fællesskabet. Den tager de samme felter og knapper.

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

Farver

Kantens farve er det hurtigste signal på et kort. Brug den samme farve til den samme slags nyhed, hver gang.

FarveBrug den til
greenSucces: bestået, deployet, færdig
redFejl: fejlet, nede, afvist
orangeEn advarsel, der skal kigges på
yellowVenter på nogen: godkendelser, spørgsmål
blueInformation, standarden
purpleKodehændelser, eller noget særligt

Byg dit embed

Rediger felterne eller JSON-payloaden. De holdes synkroniseret. Se beskeden blive vist præcis som i en kanal. Det her er den rigtige webhook-body; kopiér den, når den ser rigtig ud.

Skabeloner
Knapper
Forhåndsvisning
Webhook-body

Byg videre