Представлення повідомлень — це спільний контракт OpenClaw для розширеного інтерфейсу вихідного чату. Він дає змогу агентам, командам CLI, потокам погодження та плагінам один раз описати намір повідомлення, тоді як кожен плагін каналу рендерить найкращу нативну форму, яку може. Використовуйте представлення для переносного інтерфейсу повідомлень:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- текстові секції
- невеликий контекстний текст/текст нижнього колонтитула
- роздільники
- кнопки
- меню вибору
- заголовок картки та тон
components, Slack
blocks, Telegram buttons, Teams card або Feishu card, до спільного
інструмента повідомлень. Це результати рендерингу, якими володіє плагін каналу.
Контракт
Автори плагінів імпортують публічний контракт із:value— це значення дії застосунку, яке повертається через наявний шлях взаємодії каналу, коли канал підтримує елементи керування, що можна натискати.url— це кнопка-посилання. Вона може існувати безvalue.labelє обов’язковим і також використовується в текстовому резервному варіанті.styleє рекомендаційним. Рендерери мають зіставляти непідтримувані стилі з безпечним значенням за замовчуванням, а не завершувати надсилання з помилкою.
options[].value— це вибране значення застосунку.placeholderє рекомендаційним і може ігноруватися каналами без нативної підтримки меню вибору.- Якщо канал не підтримує меню вибору, резервний текст перелічує мітки.
Приклади відправника
Проста картка:Контракт рендерера
Плагіни каналів оголошують підтримку рендерингу у своєму outbound-адаптері:Основний потік рендерингу
КолиReplyPayload або дія повідомлення містить presentation, ядро:
- Нормалізує корисне навантаження представлення.
- Визначає outbound-адаптер цільового каналу.
- Зчитує
presentationCapabilities. - Викликає
renderPresentation, коли адаптер може відрендерити корисне навантаження. - Повертається до консервативного тексту, коли адаптер відсутній або не може виконати рендеринг.
- Надсилає результативне корисне навантаження через звичайний шлях доставки каналу.
- Застосовує метадані доставки, як-от
delivery.pin, після першого успішно надісланого повідомлення.
Правила деградації
Представлення має бути безпечним для надсилання в обмежених каналах. Резервний текст містить:titleяк перший рядок- блоки
textяк звичайні абзаци - блоки
contextяк компактні контекстні рядки - блоки
dividerяк візуальний роздільник - мітки кнопок, включно з URL для кнопок-посилань
- мітки варіантів меню вибору
- Telegram із вимкненими вбудованими кнопками надсилає текстовий резервний варіант.
- Канал без підтримки меню вибору перелічує варіанти вибору як текст.
- Кнопка лише з URL стає або нативною кнопкою-посиланням, або резервним рядком з URL.
- Необов’язкові помилки закріплення не спричиняють збою вже доставленого повідомлення.
delivery.pin.required: true; якщо запитано закріплення як
обов’язкове і канал не може закріпити надіслане повідомлення, доставка повідомляє про помилку.
Відображення на провайдерів
Поточні вбудовані рендерери:| Канал | Нативна ціль рендерингу | Примітки |
|---|---|---|
| Discord | Components and component containers | Зберігає застаріле channelData.discord.components для наявних відправників корисного навантаження, нативного для провайдера, але нові спільні надсилання мають використовувати presentation. |
| Slack | Block Kit | Зберігає застаріле channelData.slack.blocks для наявних відправників корисного навантаження, нативного для провайдера, але нові спільні надсилання мають використовувати presentation. |
| Telegram | Текст і вбудовані клавіатури | Кнопки/меню вибору потребують можливості вбудованих кнопок для цільової поверхні; інакше використовується текстовий резервний варіант. |
| Mattermost | Текст та інтерактивні props | Інші блоки деградують до тексту. |
| Microsoft Teams | Adaptive Cards | Звичайний текст message включається разом із карткою, якщо надано обидва. |
| Feishu | Інтерактивні картки | Заголовок картки може використовувати title; тіло уникає дублювання цього заголовка. |
| Plain channels | Текстовий резервний варіант | Канали без рендерера все одно отримують читабельний вивід. |
Представлення проти InteractiveReply
InteractiveReply — це старіша внутрішня підмножина, що використовується допоміжними
засобами погодження та взаємодії. Вона підтримує:
- текст
- кнопки
- меню вибору
MessagePresentation — це канонічний спільний контракт надсилання. Він додає:
- заголовок
- тон
- контекст
- роздільник
- кнопки лише з URL
- загальні метадані доставки через
ReplyPayload.delivery
openclaw/plugin-sdk/interactive-runtime під час адаптації старішого
коду:
MessagePresentation.
Закріплення доставки
Закріплення — це поведінка доставки, а не представлення. Використовуйтеdelivery.pin замість
нативних для провайдера полів, як-от channelData.telegram.pin.
Семантика:
pin: trueзакріплює перше успішно доставлене повідомлення.pin.notifyза замовчуванням дорівнюєfalse.pin.requiredза замовчуванням дорівнюєfalse.- Необов’язкові помилки закріплення деградують і залишають надіслане повідомлення без змін.
- Обов’язкові помилки закріплення призводять до збою доставки.
- Для фрагментованих повідомлень закріплюється перший доставлений фрагмент, а не кінцевий.
pin, unpin і pins усе ще існують для наявних
повідомлень, де провайдер підтримує ці операції.
Контрольний список автора плагіна
- Оголосіть
presentationуdescribeMessageTool(...), коли канал може рендерити або безпечно деградувати семантичне представлення. - Додайте
presentationCapabilitiesдо runtime outbound-адаптера. - Реалізуйте
renderPresentationу runtime-коді, а не в коді налаштування плагіна площини керування. - Не допускайте нативних UI-бібліотек у гарячі шляхи налаштування/каталогу.
- Зберігайте обмеження платформи в рендерері та тестах.
- Додайте резервні тести для непідтримуваних кнопок, меню вибору, кнопок з URL, дублювання заголовка/тексту
та змішаних надсилань
messageплюсpresentation. - Додайте підтримку закріплення доставки через
deliveryCapabilities.pinіpinDeliveredMessageлише тоді, коли провайдер може закріпити id надісланого повідомлення. - Не відкривайте нові нативні для провайдера поля карток/блоків/компонентів/кнопок через спільну схему дій повідомлення.