Hoppa till huvudinnehållet
Utvecklare Meddelandekort

Designa meddelandekort

Allt en bot postar, från en webhook, ett kommandosvar eller en knappuppdatering, är ett kort. Ett bra kort visar vad som har hänt med en blick: en färgad kant, en rubrik, en status och detaljerna under.

Det här kan du göra

  • Visa en statusEn färgad pill som Öppen, Mergad eller Godkänd, med tillagda och borttagna rader.
  • Lista detaljernaRader med etikett och värde som medlemmarna kan kopiera med ett tryck.
  • Skriv i markdownFetstil, inline-kod, kodblock, citat och kryssrutor.
  • Visa att du arbetarEn spinner medan din bot tänker, och dess resonemang bakom en växlare efteråt.

I appen

Fyra kort som medlemmarna ser dem. Vart och ett är några rader JSON.

Ett korts anatomi

Kortets delar, uppifrån och ned. Utelämna det du inte behöver: ett kort med bara en rubrik går bra.

  1. Sidhuvud"Meddelande från" och ett namn: webhookens namn, eller din communitys namn för ett kommandosvar. Ett svar kan lägga till ett badge, som repot.
  2. Rubrik och statustitle, en länk när du anger title_url, med status-pillen bredvid.
  3. UnderrubrikEn andra rad i fetstil, sub_title.
  4. BeskrivningBrödtexten, i markdown.
  5. FältRader med etikett och värde, med en kopieringsknapp.
  6. SidfotTiden, och tillagda och borttagna rader om du skickar 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
  }
}

Alla fält

De här ligger i message_container. Ett kort behöver en beskrivning, eller ett laddningsläge. Fält som är märkta "Kommandosvar" tas bort när du postar via en webhook.

FältTypVad det gör
typestringembed_message (standard) eller system_message.
badgestringEtt litet märke efter namnet i sidhuvudet, som acme/web. Kommandosvar
avatar_urlstringEn bild ovanpå kortets ikon.
colorstringKantens färg. Se färger nedan.
titlestringDen första raden, i fetstil.
title_urlstringGör rubriken till en länk.
sub_titlestringEn andra rad i fetstil under rubriken.
descriptionstringBrödtexten, i markdown.
fieldsarray[{ "field": "…", "value": "…" }]: rader med etikett och värde.
image_url, image_base64stringEn bild på kortet.
imagesarray[{ "image_url": "…" }]: ett galleri med flera bilder.
statusobject eller stringEn färgad pill bredvid rubriken. Se nedan. Kommandosvar
additions, deletions, files_changednumberDiff-statistik i sidfoten. Kommandosvar
loader, loader_text, loader_sub_textboolean, stringEn spinner i stället för brödtexten.
thinkingstringResonemang bakom en Visa tänkande-växlare. Kommandosvar
Beskrivningen och thinking förstår markdown: **bold**, _italic_, ~~strike~~, `inline code`, kodblock med staket, > quotes, kryssrutor med - [x], @omnämnanden och :emoji:.

Status och diff-statistik

En statuspill berättar historien innan någon har läst texten. Den sitter bredvid rubriken, eller i sidfoten när det inte finns någon rubrik; diff-statistiken visas bredvid tiden. Båda fungerar i kommandosvar, och den inbyggda GitHub-integrationen använder dem. En webhook tar bort 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."
  }
}
FältTypVad det gör
statusobject eller stringEn ensam sträng är etiketten: "status": "Open".
status.labelstringTexten i pillen. Utan den blir det ingen pill.
status.colorstringgreen, purple, red, orange, yellow, blue eller gray.
status.iconstringEn valfri ikon ur listan nedan.
additionsnumberTillagda rader, visas som grönt +86.
deletionsnumberBorttagna rader, visas som rött -12.
files_changednumberÄndrade filer, visas som 3 files.

Ikoner

VärdeIkonTypisk användning
pull_requestgit-pull-requestEn pull request har öppnats
pull_request_closedgit-pull-request-closedStängd utan merge
merge, mergedgit-mergeMergad
commitgit-commitEn pushad commit
issuecircle-dotEn issue har öppnats
issue_closedcircle-checkEn issue har stängts
checkcircle-checkTesterna gick igenom, ett jobb lyckades

En mappning som fungerar för GitHub

Den inbyggda GitHub-integrationen använder de här etiketterna; kopiera dem till dina egna verktyg.

HändelseEtikettFärgIkon
Pull request öppnadOpengreenpull_request
UtkastDraftgraypull_request
MergadMergedpurplemerged
Stängd utan mergeClosedredpull_request_closed
Issue öppnadOpengreenissue
Issue stängdClosedpurpleissue_closed
Commit pushadCommitgraycommit
Testerna gick igenomPassinggreencheck
Testerna misslyckadesFailingredingen

Laddning och tänkande

För allt som tar en stund, som ett AI-svar eller ett långt jobb, postar du först ett kort med en spinner och ersätter det sedan med resultatet. Laddningsläget fungerar från webhooks och kommandosvar. I ett kommandosvar kan du också lägga modellens resonemang i thinking: medlemmarna ser en Visa tänkande-växlare i stället för en vägg av text.

assistant
System
Meddelande från Assistant
Tänker…Läser de senaste 50 meddelandena

Först: laddningskortet

assistant
System
Meddelande från Assistant

maya: när är standupen?

Standupen är 09:30, i #daily.
Kollade de fästa meddelandena och den återkommande händelsen i #daily.

Sedan: svaret, med resonemanget hopfällt

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…"
  }
}
FältTypVad det gör
loaderbooleantrue visar spinnern i stället för brödtexten.
loader_textstringRaden bredvid spinnern, som "Tänker…".
loader_sub_textstringEn mindre rad under den.
thinkingstringHopfällt resonemang under beskrivningen, i markdown.

För att byta laddningskortet mot svaret uppdaterar du meddelandet med ett nytt kort utan loader. Hur det går till står under liveuppdateringar.

Långa beskrivningar

En beskrivning kan vara upp till 50 000 byte. Efter de första 1 000 ser medlemmarna början och en Visa mer-knapp som laddar resten, så att en lång rapport inte översvämmar kanalen.

Systemmeddelanden

Ange "type": "system_message" för ett meddelande som talar för communityn snarare än ett botinlägg: underhållsfönster, ändrade regler, allt där communityn själv har ordet. Det tar samma fält och knappar.

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

Färger

Kantens färg är den snabbaste signalen på ett kort. Använd samma färg för samma sorts nyhet, varje gång.

FärgAnvänd den för
greenLyckat: godkänt, driftsatt, klart
redMisslyckat: fel, nere, avvisat
orangeEn varning som behöver en titt
yellowVäntar på någon: godkännanden, frågor
blueInformation, standard
purpleKodhändelser, eller något speciellt

Bygg din embed

Redigera fälten eller JSON-payloaden. Båda hålls synkade. Se meddelandet visas exakt som i en kanal. Det här är den riktiga webhook-bodyn; kopiera den när den ser rätt ut.

Mallar
Knappar
Förhandsvisning
Webhook-body

Bygg vidare