メッセージプレゼンテーションは、リッチなアウトバウンドチャット UI のための OpenClaw の共有コントラクトです。 これにより、エージェント、CLI コマンド、承認フロー、Plugin はメッセージの 意図を一度だけ記述でき、各チャネル Plugin が可能な限り最適なネイティブ形式でレンダーします。 ポータブルなメッセージ UI にはプレゼンテーションを使用します。Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- テキストセクション
- 小さなコンテキスト/フッターテキスト
- 区切り線
- ボタン
- セレクトメニュー
- カードタイトルとトーン
components、Slack
blocks、Telegram buttons、Teams card、Feishu card などの新しいプロバイダー固有フィールドを追加しないでください。
これらはチャネル Plugin が所有するレンダラー出力です。
コントラクト
Plugin 作者は次から公開コントラクトをインポートします。valueは、チャネルがクリック可能なコントロールをサポートする場合に、チャネルの 既存のインタラクション経路を通じてルーティングされるアプリケーションアクション値です。urlはリンクボタンです。valueなしでも存在できます。labelは必須で、テキストフォールバックでも使用されます。styleは助言的です。レンダラーは、サポートされていないスタイルを送信失敗にするのではなく、安全な デフォルトにマッピングする必要があります。
options[].valueは選択されたアプリケーション値です。placeholderは助言的で、ネイティブの セレクトサポートがないチャネルでは無視される場合があります。- チャネルがセレクトをサポートしない場合、フォールバックテキストにはラベルが一覧表示されます。
プロデューサー例
シンプルなカード:レンダラーコントラクト
チャネル Plugin はアウトバウンドアダプターでレンダーサポートを宣言します。コアレンダーフロー
ReplyPayload またはメッセージアクションに presentation が含まれる場合、コアは次を行います。
- プレゼンテーションペイロードを正規化します。
- 対象チャネルのアウトバウンドアダプターを解決します。
presentationCapabilitiesを読み取ります。- アダプターがペイロードをレンダーできる場合、
renderPresentationを呼び出します。 - アダプターが存在しない、またはレンダーできない場合、保守的なテキストにフォールバックします。
- 結果のペイロードを通常のチャネル配信経路で送信します。
- 最初の正常に送信されたメッセージの後に、
delivery.pinなどの配信メタデータを適用します。
デグラデーションルール
プレゼンテーションは、制限のあるチャネルでも安全に送信できる必要があります。 フォールバックテキストには次が含まれます。- 最初の行としての
title - 通常の段落としての
textブロック - コンパクトなコンテキスト行としての
contextブロック - 視覚的な区切りとしての
dividerブロック - リンクボタンの URL を含むボタンラベル
- セレクトオプションラベル
- インラインボタンが無効な Telegram はテキストフォールバックを送信します。
- セレクトサポートのないチャネルは、セレクトオプションをテキストとして一覧表示します。
- URL のみのボタンは、ネイティブリンクボタンまたはフォールバック URL 行になります。
- 任意のピン留め失敗は、配信済みメッセージを失敗させません。
delivery.pin.required: true です。ピン留めが必須として要求され、
チャネルが送信済みメッセージをピン留めできない場合、配信は失敗を報告します。
プロバイダーマッピング
現在のバンドル済みレンダラー:| チャネル | ネイティブレンダー対象 | 注記 |
|---|---|---|
| Discord | コンポーネントとコンポーネントコンテナー | 既存のプロバイダー固有ペイロードプロデューサー向けに従来の channelData.discord.components を保持しますが、新しい共有送信では presentation を使用する必要があります。 |
| Slack | Block Kit | 既存のプロバイダー固有ペイロードプロデューサー向けに従来の channelData.slack.blocks を保持しますが、新しい共有送信では presentation を使用する必要があります。 |
| Telegram | テキストとインラインキーボード | ボタン/セレクトには対象サーフェスのインラインボタンケイパビリティが必要です。それ以外の場合はテキストフォールバックが使用されます。 |
| Mattermost | テキストとインタラクティブ props | その他のブロックはテキストにデグレードします。 |
| Microsoft Teams | Adaptive Cards | 両方が指定されている場合、プレーンな message テキストはカードと一緒に含まれます。 |
| Feishu | インタラクティブカード | カードヘッダーは title を使用できます。本文ではそのタイトルの重複を避けます。 |
| プレーンチャネル | テキストフォールバック | レンダラーのないチャネルでも読みやすい出力を得られます。 |
プレゼンテーションと InteractiveReply
InteractiveReply は、承認およびインタラクション
ヘルパーで使用される古い内部サブセットです。次をサポートします。
- テキスト
- ボタン
- セレクト
MessagePresentation は正規の共有送信コントラクトです。次を追加します。
- タイトル
- トーン
- コンテキスト
- 区切り線
- URL のみのボタン
ReplyPayload.deliveryを通じた汎用配信メタデータ
openclaw/plugin-sdk/interactive-runtime のヘルパーを使用します。
MessagePresentation を直接受け入れるか生成する必要があります。
presentationToInteractiveReply(...) は、タイトル、テキスト、コンテキスト、ボタン、セレクトを古い
InteractiveReply 形状にマッピングすることで、表示されるプレゼンテーションテキストを保持します。タイトル、テキスト、
コンテキスト、区切り線ブロックをすでにネイティブに描画しているコンポーネントレンダラーは、代わりに
presentationToInteractiveControlsReply(...) を使用し、その後ボタンとセレクトコントロールのみを追加する必要があります。
renderMessagePresentationFallbackText(...) は、区切り線のみの
プレゼンテーションなど、テキストフォールバックを持たないプレゼンテーションブロックに対して空文字列を返します。空でない送信本文を必要とするトランスポートは、
デフォルトのフォールバックコントラクトを変更せずに最小限の本文を選択するために emptyFallback を渡せます。
配信ピン留め
ピン留めは配信動作であり、プレゼンテーションではありません。channelData.telegram.pin などの
プロバイダー固有フィールドではなく delivery.pin を使用します。
セマンティクス:
pin: trueは、最初に正常に配信されたメッセージをピン留めします。pin.notifyのデフォルトはfalseです。pin.requiredのデフォルトはfalseです。- 任意のピン留め失敗はデグレードし、送信済みメッセージはそのまま残ります。
- 必須のピン留め失敗は配信を失敗させます。
- チャンク化されたメッセージは、末尾のチャンクではなく最初に配信されたチャンクをピン留めします。
pin、unpin、pins メッセージアクションは引き続き存在します。
Plugin 作者チェックリスト
- チャネルがセマンティックプレゼンテーションをレンダーまたは安全にデグレードできる場合、
describeMessageTool(...)からpresentationを宣言します。 - ランタイムアウトバウンドアダプターに
presentationCapabilitiesを追加します。 - コントロールプレーンの Plugin セットアップコードではなく、ランタイムコードで
renderPresentationを実装します。 - ネイティブ UI ライブラリをホットなセットアップ/カタログ経路に入れないでください。
- レンダラーとテストでプラットフォーム制限を保持します。
- サポートされていないボタン、セレクト、URL ボタン、タイトル/テキストの重複、および混在した
messageとpresentation送信に対するフォールバックテストを追加します。 - プロバイダーが送信済みメッセージ ID をピン留めできる場合のみ、
deliveryCapabilities.pinとpinDeliveredMessageを通じて配信ピンサポートを追加します。 - 共有メッセージアクションスキーマを通じて、新しいプロバイダー固有のカード/ブロック/コンポーネント/ボタンフィールドを公開しないでください。