OpenClawSkills
GitHub
核心概念 • 5 分钟阅读

降价格式

出站渠道的 Markdown 格式化管道

OpenClaw 通过将出站 Markdown 转换为共享中间体来格式化它

渲染特定通道输出之前的表示 (IR)。 IR 保持

源文本完好无损,同时携带样式/链接跨度,因此分块和渲染可以

跨渠道保持一致。

Tutorial.step

目标

- 一致性: 一个解析步骤,多个渲染器。

- 安全分块: 在渲染之前分割文本,因此内联格式永远不会

打破块。

- 频道匹配: 将相同的 IR 映射到 Slack mrkdwn、Telegram HTML 和 Signal

样式范围无需重新解析 Markdown。

Tutorial.step

管道

1. 解析 Markdown -> IR

- IR 是纯文本加上样式跨度(粗体/斜体/删除线/代码/剧透)和链接跨度。

- 偏移量是 UTF-16 代码单元,因此信号样式范围与其 API 一致。

- 仅当通道选择表转换时才会解析表。

2. 块 IR(格式优先)

- 在渲染之前对 IR 文本进行分块。

- 内联格式化不会跨块分割; Span 按块进行切片。

3. 每通道渲染

- ''Slack:'' mrkdwn tokens (bold/italic/strike/code), links as ''<url|label>''.

- ''Telegram:'' HTML tags (''<b>'', ''<i>'', ''<s>'', ''<code>'', ''<pre><code>'', ''<a href>'').

- ''信号:''纯文本 + ''text-style'' 范围;当标签不同时,链接将变为 ''label (url)''。

Tutorial.step

红外示例

输入降价:

Markdown
Hello **world** — see [docs](https://docs.openclaw.ai).

红外(原理图):

Json
{ "text": "Hello world — see docs.", "styles": [{ "start": 6, "end": 11, "style": "bold" }], "links": [{ "start": 19, "end": 23, "href": "https://docs.openclaw.ai" }] }
Tutorial.step

使用地点

- Slack、Telegram 和 Signal 出站适配器从 IR 渲染。

- 其他渠道(WhatsApp、iMessage、MS Teams、Discord)仍然使用纯文本或

他们自己的格式规则,之前应用了 Markdown 表格转换

启用时分块。

Tutorial.step

表处理

Markdown 表在聊天客户端中并未得到一致支持。使用

''markdown.tables'' 控制每个渠道(和每个帐户)的转化。

- ''code'':将表渲染为代码块(大多数通道的默认值)。

- ''bullets'':将每一行转换为要点(Signal + WhatsApp 的默认值)。

- ''off'':禁用表解析和转换;原始表格文本通过。

配置键:

Yaml
channels: discord: markdown: tables: code accounts: work: markdown: tables: off
Tutorial.step

分块规则

- 块限制来自通道适配器/配置并应用于 IR 文本。

- 代码栅栏被保留为带有尾随换行符的单个块,以便通道

正确渲染它们。

- 列表前缀和块引用前缀是 IR 文本的一部分,因此分块

不分割中间前缀。

- 内联样式(粗体/斜体/删除线/内联代码/剧透)永远不会被分割

大块;渲染器重新打开每个块内的样式。

如果您需要更多有关跨渠道分块行为的信息,请参阅

''流+分块''。

Tutorial.step

链接政策

- ''Slack:'' ''[label](url)'' -> ''<url|label>''; bare URLs stay bare. Autolinks

在解析期间禁用以避免双重链接。

- ''Telegram:'' ''[label](url)'' -> ''<a href="url">label</a>'' (HTML parse mode).

- ''信号:'' ''[label](url)'' -> ''label (url)'' 除非标签与 URL 匹配。

Tutorial.step

剧透

剧透标记 (''||spoiler||'') 仅针对 Signal 进行解析,它们映射到

扰流板风格系列。其他渠道将它们视为纯文本。

Tutorial.step

如何添加或更新通道格式化程序

1. ''解析一次:'' 使用适合通道的共享 ''markdownToIR(...)'' 帮助器

选项(自动链接、标题样式、块引用前缀)。

2. ''渲染:'' 使用 ''renderMarkdownWithMarkers(...)'' 和一个实现渲染器

样式标记图(或信号样式范围)。

3. ''Chunk:''渲染前调用''chunkMarkdownIR(...)'';渲染每个块。

4. Wire 适配器: 更新通道出站适配器以使用新的分块器

和渲染器。

5. 测试: 添加或更新格式测试和外向交货测试(如果

通道使用分块。

Tutorial.step

常见问题

- Angle bracket markers (''<@U123>'', ''<#C123>'', ''<https://...>'') must be

保存;安全地转义原始 HTML。

- Telegram HTML 需要将文本转义到标签之外,以避免标记损坏。

- 信号样式范围取决于 UTF-16 偏移量;不要使用代码点偏移。

- 保留受隔离代码块的尾随换行符,以便关闭标记落地

他们自己的线路。