Оформете карти на съобщения
Всичко, което публикува бот, от уебхук, като отговор на команда или при обновяване след натиснат бутон, е карта. Добрата карта показва какво се е случило от пръв поглед: цветен ръб, заглавие, статус и подробностите отдолу.
Какво можете да направите
- Покажете статусЦветен етикет като Open, Merged или Passing, с добавените и премахнатите редове.
- Изброете подробноститеРедове с етикет и стойност, които членовете копират с едно докосване.
- Пишете в markdownУдебелен текст, код в реда, блокове код, цитати и отметки.
- Покажете, че работитеИндикатор за зареждане, докато ботът мисли, а след това разсъжденията му зад превключвател.
В приложението
Четири карти така, както ги виждат членовете. Всяка е само няколко реда JSON.
Устройство на картата
Частите на картата, отгоре надолу. Пропуснете това, което не ви трябва: карта само със заглавие също е наред.
- Горна част„Message from“ и име: името на уебхука или, при отговор на команда, името на вашата общност. Отговорът може да добави
badge, например хранилището. - Заглавие и статус
title, който става линк, когато зададетеtitle_url, с етикетаstatusдо него. - ПодзаглавиеВтори удебелен ред,
sub_title. - ОписаниеОсновният текст, в markdown.
- ПолетаРедове с етикет и стойност, с бутон за копиране.
- Долна частЧасът, както и добавените и премахнатите редове, ако ги изпратите.
{
"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. Картата трябва да има описание или индикатор за зареждане. Полетата с означение „Отговори на команди“ отпадат, когато публикувате чрез уебхук.
| Поле | Тип | Какво прави |
|---|---|---|
type | string | embed_message (по подразбиране) или system_message. |
badge | string | Малък етикет след името в горната част, например acme/web. Отговори на команди |
avatar_url | string | Изображение върху иконата на картата. |
color | string | Цветът на ръба. Вижте цветовете по-долу. |
title | string | Удебеленият първи ред. |
title_url | string | Превръща заглавието в линк. |
sub_title | string | Втори удебелен ред под заглавието. |
description | string | Основният текст, в markdown. |
fields | array | [{ "field": "…", "value": "…" }]: редове с етикет и стойност. |
image_url, image_base64 | string | Изображение в картата. |
images | array | [{ "image_url": "…" }]: галерия от няколко изображения. |
status | object или string | Цветен етикет до заглавието. Вижте по-долу. Отговори на команди |
additions, deletions, files_changed | number | Статистика на diff в долната част. Отговори на команди |
loader, loader_text, loader_sub_text | boolean, string | Индикатор за зареждане вместо основния текст. |
thinking | string | Разсъждения зад превключвателя Show thinking. Отговори на команди |
thinking разбират markdown: **bold**, _italic_, ~~strike~~, `inline code`, блокове код между тройни обратни кавички, > quotes, отметки - [x], @споменавания и :emoji:.Статус и статистика на diff
Етикетът за статус разказва историята, преди някой да прочете текста. Стои до заглавието или, ако няма заглавие, в долната част; статистиката на diff се показва до часа. И двете работят в отговори на команди и ги използва вградената интеграция с GitHub. Уебхукът ги премахва.
{
"message_container": {
"color": "red",
"title": "Build failed on main",
"status": { "label": "Failing", "color": "red" },
"description": "`search.test.js`: 2 of 212 tests failed."
}
}| Поле | Тип | Какво прави |
|---|---|---|
status | object или string | Обикновен низ е самият етикет: "status": "Open". |
status.label | string | Текстът на етикета. Без него няма етикет. |
status.color | string | green, purple, red, orange, yellow, blue или gray. |
status.icon | string | Икона по избор от списъка по-долу. |
additions | number | Добавени редове, показани в зелено като +86. |
deletions | number | Премахнати редове, показани в червено като -12. |
files_changed | number | Засегнати файлове, показани като 3 files. |
Икони
| Стойност | Икона | Типична употреба |
|---|---|---|
pull_request | git-pull-request | Отворен pull request |
pull_request_closed | git-pull-request-closed | Затворен без обединяване |
merge, merged | git-merge | Обединен |
commit | git-commit | Изпратен commit |
issue | circle-dot | Отворен issue |
issue_closed | circle-check | Затворен issue |
check | circle-check | Тестовете минаха, задача завърши успешно |
Съответствие, което работи за GitHub
Вградената интеграция с GitHub използва тези стойности; копирайте ги за собствените си инструменти.
| Събитие | Етикет | Цвят | Икона |
|---|---|---|---|
| Отворен pull request | Open | green | pull_request |
| Чернова | Draft | gray | pull_request |
| Обединен | Merged | purple | merged |
| Затворен без обединяване | Closed | red | pull_request_closed |
| Отворен issue | Open | green | issue |
| Затворен issue | Closed | purple | issue_closed |
| Изпратен commit | Commit | gray | commit |
| Тестовете минаха | Passing | green | check |
| Тестовете се провалиха | Failing | red | няма |
Зареждане и разсъждения
За всичко, което отнема малко време, като AI отговор или дълга задача, първо публикувайте карта с индикатор за зареждане, а после я заменете с резултата. Индикаторът работи от уебхукове и в отговори на команди. В отговор на команда можете също да сложите разсъжденията на модела в thinking: членовете виждат превключвател Show thinking вместо стена от текст.
Първо: индикаторът за зареждане
После: отговорът, с прибрани разсъждения
{
"message_container": {
"type": "embed_message",
"color": "blue",
"loader": true,
"loader_text": "Thinking…",
"loader_sub_text": "Reading the last 50 messages"
}
}{
"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…"
}
}| Поле | Тип | Какво прави |
|---|---|---|
loader | boolean | true показва индикатора за зареждане вместо основния текст. |
loader_text | string | Редът до индикатора, например „Мисля…“. |
loader_sub_text | string | По-малък ред под него. |
thinking | string | Сгънати разсъждения под описанието, в markdown. |
За да смените индикатора с отговора, обновете съобщението с нова карта без loader. Как става това, вижте в обновления на живо.
Дълги описания
Описанието може да е до 50 000 байта. След първите 1000 членовете виждат началото и бутон Show more, който зарежда останалото, така че дълъг отчет не залива канала.
Системни съобщения
Задайте "type": "system_message" за известие вместо публикация от бот: планирана поддръжка, промени в правилата, всичко, което говори от името на самата общност. Приема същите полета и бутони.
{
"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-а: двете се променят заедно. Визуализацията показва съобщението точно както ще изглежда в канала. Това е истинското тяло на уебхука; копирайте го, когато всичко е наред.