Prezentacja wiadomości to wspólny kontrakt OpenClaw dla rozbudowanego interfejsu wychodzącego czatu. Pozwala agentom, poleceniom CLI, przepływom zatwierdzania i pluginom raz opisać intencję wiadomości, podczas gdy każdy Plugin kanału renderuje najlepszą natywną postać, jaką może. Używaj prezentacji do przenośnego interfejsu wiadomości: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.
- sekcje tekstowe
- krótki tekst kontekstu/stopki
- separatory
- przyciski
- menu wyboru
- tytuł i ton karty
components, Slack
blocks, Telegram buttons, Teams card czy Feishu card, do współdzielonego
narzędzia wiadomości. Są to wyjścia renderera należące do Pluginu kanału.
Kontrakt
Autorzy Pluginów importują publiczny kontrakt z:valueto wartość akcji aplikacji kierowana z powrotem przez istniejącą ścieżkę interakcji kanału, gdy kanał obsługuje klikalne elementy sterujące.urlto przycisk linku. Może istnieć bezvalue.labeljest wymagany i jest też używany w tekście zastępczym.stylema charakter wskazówki. Renderery powinny mapować nieobsługiwane style na bezpieczną wartość domyślną, a nie powodować niepowodzenie wysyłki.
options[].valueto wybrana wartość aplikacji.placeholderma charakter wskazówki i może zostać zignorowany przez kanały bez natywnej obsługi wyboru.- Jeśli kanał nie obsługuje wyborów, tekst zastępczy wypisuje etykiety.
Przykłady producentów
Prosta karta:Kontrakt renderera
Pluginy kanałów deklarują obsługę renderowania w swoim adapterze wychodzącym:Przepływ renderowania w rdzeniu
GdyReplyPayload lub akcja wiadomości zawiera presentation, rdzeń:
- Normalizuje ładunek prezentacji.
- Rozwiązuje adapter wychodzący docelowego kanału.
- Odczytuje
presentationCapabilities. - Wywołuje
renderPresentation, gdy adapter może wyrenderować ładunek. - Wraca do zachowawczego tekstu, gdy adapter jest nieobecny lub nie może renderować.
- Wysyła wynikowy ładunek zwykłą ścieżką dostarczania kanału.
- Stosuje metadane dostarczenia, takie jak
delivery.pin, po pierwszej pomyślnie wysłanej wiadomości.
Zasady degradacji
Prezentacja musi być bezpieczna do wysłania na ograniczonych kanałach. Tekst zastępczy zawiera:titlejako pierwszy wiersz- bloki
textjako zwykłe akapity - bloki
contextjako zwarte wiersze kontekstu - bloki
dividerjako wizualny separator - etykiety przycisków, w tym URL-e dla przycisków linków
- etykiety opcji wyboru
- Telegram z wyłączonymi przyciskami inline wysyła tekst zastępczy.
- Kanał bez obsługi wyboru wypisuje opcje wyboru jako tekst.
- Przycisk wyłącznie z URL-em staje się albo natywnym przyciskiem linku, albo zastępczym wierszem URL.
- Opcjonalne niepowodzenia przypięcia nie powodują niepowodzenia dostarczonej wiadomości.
delivery.pin.required: true; jeśli przypięcie jest wymagane
i kanał nie może przypiąć wysłanej wiadomości, dostarczenie zgłasza niepowodzenie.
Mapowanie dostawców
Obecne wbudowane renderery:| Kanał | Natywny cel renderowania | Uwagi |
|---|---|---|
| Discord | Komponenty i kontenery komponentów | Zachowuje starsze channelData.discord.components dla istniejących producentów ładunków natywnych dla dostawcy, ale nowe współdzielone wysyłki powinny używać presentation. |
| Slack | Block Kit | Zachowuje starsze channelData.slack.blocks dla istniejących producentów ładunków natywnych dla dostawcy, ale nowe współdzielone wysyłki powinny używać presentation. |
| Telegram | Tekst plus klawiatury inline | Przyciski/wybory wymagają możliwości przycisków inline dla docelowej powierzchni; w przeciwnym razie używany jest tekst zastępczy. |
| Mattermost | Tekst plus interaktywne właściwości | Inne bloki degradują do tekstu. |
| Microsoft Teams | Adaptive Cards | Zwykły tekst message jest dołączany do karty, gdy podano oba. |
| Feishu | Karty interaktywne | Nagłówek karty może używać title; treść unika duplikowania tego tytułu. |
| Zwykłe kanały | Tekst zastępczy | Kanały bez renderera nadal otrzymują czytelne wyjście. |
Presentation a InteractiveReply
InteractiveReply to starszy wewnętrzny podzbiór używany przez pomocniki zatwierdzania i interakcji.
Obsługuje:
- tekst
- przyciski
- wybory
MessagePresentation jest kanonicznym współdzielonym kontraktem wysyłania. Dodaje:
- tytuł
- ton
- kontekst
- separator
- przyciski wyłącznie z URL-em
- ogólne metadane dostarczenia przez
ReplyPayload.delivery
openclaw/plugin-sdk/interactive-runtime przy łączeniu starszego
kodu:
MessagePresentation bezpośrednio.
presentationToInteractiveReply(...) zachowuje widoczny tekst prezentacji przez
mapowanie tytułu, tekstu, kontekstu, przycisków i wyborów do starszego
kształtu InteractiveReply. Renderery komponentów, które już natywnie rysują bloki tytułu, tekstu,
kontekstu i separatora, powinny zamiast tego używać
presentationToInteractiveControlsReply(...), a następnie dołączać tylko
przyciski i elementy sterujące wyboru.
renderMessagePresentationFallbackText(...) zwraca pusty ciąg dla
bloków prezentacji, które nie mają tekstu zastępczego, takich jak prezentacja
składająca się wyłącznie z separatora. Transporty wymagające niepustej treści wysyłki mogą przekazać
emptyFallback, aby wybrać minimalną treść bez zmieniania domyślnego kontraktu
zastępczego.
Przypięcie dostarczenia
Przypinanie jest zachowaniem dostarczenia, a nie prezentacją. Używajdelivery.pin zamiast
pól natywnych dla dostawcy, takich jak channelData.telegram.pin.
Semantyka:
pin: trueprzypina pierwszą pomyślnie dostarczoną wiadomość.pin.notifydomyślnie wynosifalse.pin.requireddomyślnie wynosifalse.- Opcjonalne niepowodzenia przypięcia degradują i pozostawiają wysłaną wiadomość bez zmian.
- Wymagane niepowodzenia przypięcia powodują niepowodzenie dostarczenia.
- Wiadomości podzielone na fragmenty przypinają pierwszy dostarczony fragment, a nie końcowy fragment.
pin, unpin i pins nadal istnieją dla istniejących
wiadomości, gdy dostawca obsługuje te operacje.
Lista kontrolna autora Pluginu
- Deklaruj
presentationzdescribeMessageTool(...), gdy kanał może renderować lub bezpiecznie degradować semantyczną prezentację. - Dodaj
presentationCapabilitiesdo adaptera wychodzącego środowiska uruchomieniowego. - Zaimplementuj
renderPresentationw kodzie środowiska uruchomieniowego, a nie w kodzie konfiguracji Pluginu płaszczyzny sterowania. - Trzymaj natywne biblioteki UI poza gorącymi ścieżkami konfiguracji/katalogu.
- Zachowaj limity platformy w rendererze i testach.
- Dodaj testy zastępcze dla nieobsługiwanych przycisków, wyborów, przycisków URL, duplikacji tytułu/tekstu
oraz mieszanych wysyłek
messagepluspresentation. - Dodaj obsługę przypięcia dostarczenia przez
deliveryCapabilities.pinipinDeliveredMessagetylko wtedy, gdy dostawca może przypiąć identyfikator wysłanej wiadomości. - Nie udostępniaj nowych pól kart/bloków/komponentów/przycisków natywnych dla dostawcy przez współdzielony schemat akcji wiadomości.