OpenClawにおけるMarkdownフォーマットの仕組み
複数のチャネルにメッセージを送信する際、Markdownの扱いに頭を悩ませたことはありませんか?チャネルごとに微妙に異なる記法や、長いメッセージを分割したときに太字などの装飾が途切れてしまう問題は、開発者にとって共通の課題です。
OpenClawでは、Markdownを直接レンダリングするのではなく、一度IR(中間表現)に変換することで、これらの問題をスマートに解決しています。
- Markdown形式のソーステキスト
- OpenClawの各チャネル用アダプター(Slack, Telegram, Signalなど)
クイックスタート
Section titled “クイックスタート”OpenClawのMarkdown処理は、以下の3つのステップで実行されます。5分で全体の流れを把握しましょう。
1. MarkdownからIRへのパース
Section titled “1. MarkdownからIRへのパース”まず、Markdownをプレーンテキストとスタイル情報のセット(IR)に変換します。これにより、ソーステキストを保持したまま、どのチャネルでも再利用できる形になります。
IRの例:
入力されたMarkdownが Hello **world** — see [docs](https://docs.openclaw.ai). の場合、以下のような構造になります。
{ "text": "Hello world — see docs.", "styles": [{ "start": 6, "end": 11, "style": "bold" }], "links": [{ "start": 19, "end": 23, "href": "https://docs.openclaw.ai" }]}2. IRベースのチャンク分割
Section titled “2. IRベースのチャンク分割”メッセージが長すぎる場合、レンダリング前にIRテキストを分割します。このとき、インラインフォーマット(太字や斜体など)がチャンクをまたいで壊れないよう、スタイルを適切にスライスします。
3. チャネルごとのレンダリング
Section titled “3. チャネルごとのレンダリング”最後に、各チャネルの仕様に合わせて出力します。
- Slack: mrkdwnトークン(例:
<url|label>) - Telegram: HTMLタグ(例:
<b>,<i>) - Signal: プレーンテキスト + スタイル範囲
Table handling
Section titled “Table handling”Markdownのテーブルは、チャネルによってサポート状況が異なります。markdown.tables 設定を使用して、チャネルやアカウントごとに変換ルールを制御することをお勧めします。
code: テーブルをコードブロックとしてレンダリングします(多くのチャネルのデフォルト)。bullets: 各行を箇条書きに変換します(SignalとWhatsAppのデフォルト)。off: テーブルのパースを無効化し、生のテキストとして扱います。
設定例:
channels: discord: markdown: tables: code accounts: work: markdown: tables: offトラブルシューティング
Section titled “トラブルシューティング”実装中によく遭遇する問題と解決策です。
- Slackでリンクが二重になる: パース時にAutolinkを無効にしてください。
- Telegramでマークアップが壊れる: HTMLタグ以外のテキストが適切にエスケープされているか確認してください。
- Signalでスタイルがずれる: Signalのスタイル範囲はUTF-16コード単位のオフセットを期待しています。コードポイントのオフセットを使用しないように注意してください。
- コードブロックの表示が崩れる: フェンス付きコードブロックの末尾の改行を保持してください。閉じマーカーが正しく新しい行に配置される必要があります。
さらに詳しい設定やカスタマイズについては、AI Setup Assistant で質問してみてください。
次のステップ
Section titled “次のステップ”OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。