Към основното съдържание
Разработчици Карти на съобщения

Оформете карти на съобщения

Всичко, което публикува бот, от уебхук, като отговор на команда или при обновяване след натиснат бутон, е карта. Добрата карта показва какво се е случило от пръв поглед: цветен ръб, заглавие, статус и подробностите отдолу.

Какво можете да направите

  • Покажете статусЦветен етикет като Open, Merged или Passing, с добавените и премахнатите редове.
  • Изброете подробноститеРедове с етикет и стойност, които членовете копират с едно докосване.
  • Пишете в markdownУдебелен текст, код в реда, блокове код, цитати и отметки.
  • Покажете, че работитеИндикатор за зареждане, докато ботът мисли, а след това разсъжденията му зад превключвател.

В приложението

Четири карти така, както ги виждат членовете. Всяка е само няколко реда JSON.

Устройство на картата

Частите на картата, отгоре надолу. Пропуснете това, което не ви трябва: карта само със заглавие също е наред.

  1. Горна част„Message from“ и име: името на уебхука или, при отговор на команда, името на вашата общност. Отговорът може да добави badge, например хранилището.
  2. Заглавие и статусtitle, който става линк, когато зададете title_url, с етикета status до него.
  3. ПодзаглавиеВтори удебелен ред, sub_title.
  4. ОписаниеОсновният текст, в markdown.
  5. ПолетаРедове с етикет и стойност, с бутон за копиране.
  6. Долна частЧасът, както и добавените и премахнатите редове, ако ги изпратите.
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
  }
}

Всички полета

Те се слагат в message_container. Картата трябва да има описание или индикатор за зареждане. Полетата с означение „Отговори на команди“ отпадат, когато публикувате чрез уебхук.

ПолеТипКакво прави
typestringembed_message (по подразбиране) или system_message.
badgestringМалък етикет след името в горната част, например acme/web. Отговори на команди
avatar_urlstringИзображение върху иконата на картата.
colorstringЦветът на ръба. Вижте цветовете по-долу.
titlestringУдебеленият първи ред.
title_urlstringПревръща заглавието в линк.
sub_titlestringВтори удебелен ред под заглавието.
descriptionstringОсновният текст, в markdown.
fieldsarray[{ "field": "…", "value": "…" }]: редове с етикет и стойност.
image_url, image_base64stringИзображение в картата.
imagesarray[{ "image_url": "…" }]: галерия от няколко изображения.
statusobject или stringЦветен етикет до заглавието. Вижте по-долу. Отговори на команди
additions, deletions, files_changednumberСтатистика на diff в долната част. Отговори на команди
loader, loader_text, loader_sub_textboolean, stringИндикатор за зареждане вместо основния текст.
thinkingstringРазсъждения зад превключвателя Show thinking. Отговори на команди
Описанието и thinking разбират markdown: **bold**, _italic_, ~~strike~~, `inline code`, блокове код между тройни обратни кавички, > quotes, отметки - [x], @споменавания и :emoji:.

Статус и статистика на diff

Етикетът за статус разказва историята, преди някой да прочете текста. Стои до заглавието или, ако няма заглавие, в долната част; статистиката на diff се показва до часа. И двете работят в отговори на команди и ги използва вградената интеграция с GitHub. Уебхукът ги премахва.

json
{
  "message_container": {
    "color": "red",
    "title": "Build failed on main",
    "status": { "label": "Failing", "color": "red" },
    "description": "`search.test.js`: 2 of 212 tests failed."
  }
}
ПолеТипКакво прави
statusobject или stringОбикновен низ е самият етикет: "status": "Open".
status.labelstringТекстът на етикета. Без него няма етикет.
status.colorstringgreen, purple, red, orange, yellow, blue или gray.
status.iconstringИкона по избор от списъка по-долу.
additionsnumberДобавени редове, показани в зелено като +86.
deletionsnumberПремахнати редове, показани в червено като -12.
files_changednumberЗасегнати файлове, показани като 3 files.

Икони

СтойностИконаТипична употреба
pull_requestgit-pull-requestОтворен pull request
pull_request_closedgit-pull-request-closedЗатворен без обединяване
merge, mergedgit-mergeОбединен
commitgit-commitИзпратен commit
issuecircle-dotОтворен issue
issue_closedcircle-checkЗатворен issue
checkcircle-checkТестовете минаха, задача завърши успешно

Съответствие, което работи за GitHub

Вградената интеграция с GitHub използва тези стойности; копирайте ги за собствените си инструменти.

СъбитиеЕтикетЦвятИкона
Отворен pull requestOpengreenpull_request
ЧерноваDraftgraypull_request
ОбединенMergedpurplemerged
Затворен без обединяванеClosedredpull_request_closed
Отворен issueOpengreenissue
Затворен issueClosedpurpleissue_closed
Изпратен commitCommitgraycommit
Тестовете минахаPassinggreencheck
Тестовете се провалихаFailingredняма

Зареждане и разсъждения

За всичко, което отнема малко време, като AI отговор или дълга задача, първо публикувайте карта с индикатор за зареждане, а после я заменете с резултата. Индикаторът работи от уебхукове и в отговори на команди. В отговор на команда можете също да сложите разсъжденията на модела в thinking: членовете виждат превключвател Show thinking вместо стена от текст.

assistant
System
Message from Assistant
Мисля…Чета последните 50 съобщения

Първо: индикаторът за зареждане

assistant
System
Message from Assistant

maya: кога е standup-ът?

Standup-ът е в 09:30, в #daily.
Проверих закачените съобщения и повтарящото се събитие в #daily.

После: отговорът, с прибрани разсъждения

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…"
  }
}
ПолеТипКакво прави
loaderbooleantrue показва индикатора за зареждане вместо основния текст.
loader_textstringРедът до индикатора, например „Мисля…“.
loader_sub_textstringПо-малък ред под него.
thinkingstringСгънати разсъждения под описанието, в markdown.

За да смените индикатора с отговора, обновете съобщението с нова карта без loader. Как става това, вижте в обновления на живо.

Дълги описания

Описанието може да е до 50 000 байта. След първите 1000 членовете виждат началото и бутон Show more, който зарежда останалото, така че дълъг отчет не залива канала.

Системни съобщения

Задайте "type": "system_message" за известие вместо публикация от бот: планирана поддръжка, промени в правилата, всичко, което говори от името на самата общност. Приема същите полета и бутони.

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

Цветове

Цветът на ръба е най-бързият сигнал в картата. Използвайте всеки път един и същ цвят за един и същ вид новини.

ЦвятИзползвайте го за
greenУспех: минало, внедрено, готово
redНеуспех: провалено, недостъпно, отхвърлено
orangeПредупреждение, което трябва да се погледне
yellowЧака някого: одобрения, въпроси
blueИнформация, по подразбиране
purpleСъбития в кода или нещо специално

Създайте своя embed

Редактирайте полетата или JSON payload-а: двете се променят заедно. Визуализацията показва съобщението точно както ще изглежда в канала. Това е истинското тяло на уебхука; копирайте го, когато всичко е наред.

Шаблони
Бутони
Визуализация
Тяло на уебхука

Продължете нататък