Berichtpresentatie is OpenClaw’s gedeelde contract voor rijke uitgaande chat-UI. Hiermee kunnen agents, CLI-opdrachten, goedkeuringsstromen en plugins de berichtintentie eenmaal beschrijven, terwijl elke kanaalplugin de best mogelijke native vorm rendert. Gebruik presentatie voor draagbare bericht-UI: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.
- tekstsecties
- korte context-/voettekst
- scheidingslijnen
- knoppen
- selectiemenu’s
- kaarttitel en toon
components, Slack
blocks, Telegram buttons, Teams card of Feishu card toe aan de gedeelde
berichttool. Dat zijn rendereruitvoer die eigendom is van de kanaalplugin.
Contract
Plugin-auteurs importeren het publieke contract uit:valueis een toepassingsactiewaarde die wordt teruggerouteerd via het bestaande interactiepad van het kanaal wanneer het kanaal klikbare bedieningselementen ondersteunt.urlis een linkknop. Deze kan bestaan zondervalue.labelis verplicht en wordt ook gebruikt in de tekstfallback.styleis adviserend. Renderers moeten niet-ondersteunde stijlen mappen naar een veilige standaard, en de verzending niet laten mislukken.
options[].valueis de geselecteerde toepassingswaarde.placeholderis adviserend en kan worden genegeerd door kanalen zonder native selectieondersteuning.- Als een kanaal geen selecties ondersteunt, toont fallbacktekst de labels als lijst.
Producer-voorbeelden
Eenvoudige kaart:Renderercontract
Kanaalplugins declareren renderondersteuning op hun uitgaande adapter:Kernrenderstroom
Wanneer eenReplyPayload of berichtactie presentation bevat, doet de kern het volgende:
- Normaliseert de presentatiepayload.
- Lost de uitgaande adapter van het doelkanaal op.
- Leest
presentationCapabilities. - Roept
renderPresentationaan wanneer de adapter de payload kan renderen. - Valt terug op conservatieve tekst wanneer de adapter ontbreekt of niet kan renderen.
- Verzendt de resulterende payload via het normale kanaalleveringspad.
- Past leveringsmetadata zoals
delivery.pintoe na het eerste succesvol verzonden bericht.
Degradatieregels
Presentatie moet veilig te verzenden zijn op beperkte kanalen. Fallbacktekst bevat:titleals de eerste regeltext-blokken als normale alinea’scontext-blokken als compacte contextregelsdivider-blokken als visuele scheiding- knoplabels, inclusief URL’s voor linkknoppen
- labels van selectieopties
- Telegram met inline knoppen uitgeschakeld verzendt tekstfallback.
- Een kanaal zonder selectieondersteuning toont selectieopties als tekst.
- Een alleen-URL-knop wordt een native linkknop of een fallback-URL-regel.
- Optionele pinfouten laten het geleverde bericht niet mislukken.
delivery.pin.required: true; als vastzetten als
verplicht is aangevraagd en het kanaal het verzonden bericht niet kan vastzetten, rapporteert levering een fout.
Providermapping
Huidige gebundelde renderers:| Kanaal | Native renderdoel | Opmerkingen |
|---|---|---|
| Discord | Componenten en componentcontainers | Behoudt legacy channelData.discord.components voor bestaande provider-native payload-producers, maar nieuwe gedeelde verzendingen moeten presentation gebruiken. |
| Slack | Block Kit | Behoudt legacy channelData.slack.blocks voor bestaande provider-native payload-producers, maar nieuwe gedeelde verzendingen moeten presentation gebruiken. |
| Telegram | Tekst plus inline toetsenborden | Knoppen/selecties vereisen inline-knopcapaciteit voor het doeloppervlak; anders wordt tekstfallback gebruikt. |
| Mattermost | Tekst plus interactieve props | Andere blokken degraderen naar tekst. |
| Microsoft Teams | Adaptive Cards | Platte message-tekst wordt bij de kaart opgenomen wanneer beide worden opgegeven. |
| Feishu | Interactieve kaarten | Kaartkop kan title gebruiken; body voorkomt duplicatie van die titel. |
| Platte kanalen | Tekstfallback | Kanalen zonder renderer krijgen nog steeds leesbare uitvoer. |
Presentation versus InteractiveReply
InteractiveReply is de oudere interne subset die wordt gebruikt door goedkeurings- en interactiehelpers.
Deze ondersteunt:
- tekst
- knoppen
- selecties
MessagePresentation is het canonieke gedeelde verzendcontract. Het voegt toe:
- titel
- toon
- context
- scheidingslijn
- alleen-URL-knoppen
- generieke leveringsmetadata via
ReplyPayload.delivery
openclaw/plugin-sdk/interactive-runtime bij het overbruggen van oudere
code:
MessagePresentation rechtstreeks accepteren of produceren.
presentationToInteractiveReply(...) behoudt zichtbare presentatietekst door
de titel, tekst, context, knoppen en selecties naar de oudere
InteractiveReply-vorm te mappen. Componentrenderers die titel, tekst,
context en scheidingsblokken al native tekenen, moeten in plaats daarvan
presentationToInteractiveControlsReply(...) gebruiken en daarna alleen de
knop- en selectiebedieningselementen toevoegen.
renderMessagePresentationFallbackText(...) retourneert een lege tekenreeks voor
presentatieblokken die geen tekstfallback hebben, zoals een presentatie met alleen een scheidingslijn.
Transports die een niet-lege verzendbody vereisen, kunnen emptyFallback doorgeven
om voor een minimale body te kiezen zonder het standaard fallbackcontract te wijzigen.
Leveringspin
Vastzetten is leveringsgedrag, geen presentatie. Gebruikdelivery.pin in plaats van
provider-native velden zoals channelData.telegram.pin.
Semantiek:
pin: truezet het eerste succesvol geleverde bericht vast.pin.notifystaat standaard opfalse.pin.requiredstaat standaard opfalse.- Optionele pinfouten degraderen en laten het verzonden bericht intact.
- Vereiste pinfouten laten levering mislukken.
- Opgesplitste berichten zetten het eerste geleverde deel vast, niet het laatste deel.
pin-, unpin- en pins-berichtacties bestaan nog steeds voor bestaande
berichten waarbij de provider die bewerkingen ondersteunt.
Checklist voor Plugin-auteurs
- Declareer
presentationvanuitdescribeMessageTool(...)wanneer het kanaal semantische presentatie kan renderen of veilig kan degraderen. - Voeg
presentationCapabilitiestoe aan de uitgaande runtimeadapter. - Implementeer
renderPresentationin runtimecode, niet in control-plane Plugin- setupcode. - Houd native UI-bibliotheken uit hete setup-/cataloguspaden.
- Behoud platformlimieten in de renderer en tests.
- Voeg fallbacktests toe voor niet-ondersteunde knoppen, selecties, URL-knoppen, duplicatie van titel/tekst
en gemengde verzendingen met
messagepluspresentation. - Voeg leveringspinondersteuning toe via
deliveryCapabilities.pinenpinDeliveredMessagealleen wanneer de provider de verzonden bericht-id kan vastzetten. - Stel geen nieuwe provider-native kaart-/blok-/component-/knopvelden beschikbaar via het gedeelde berichtactieschema.