Markdown 格式化
OpenClaw 的 Agent 默认使用 Markdown 生成回复。不同消息渠道对 Markdown 的支持程度各异,OpenClaw 会自动适配每个渠道的渲染能力。
渠道 Markdown 支持
| 渠道 | 粗体 | 斜体 | 代码 | 代码块 | 链接 | 列表 | 表格 |
|---|---|---|---|---|---|---|---|
| Web UI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Telegram | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Discord | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | |
| iMessage | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
渠道特定渲染
OpenClaw 根据目标渠道自动转换 Markdown 语法:
markdown
**粗体文本** 和 *斜体文本*
`内联代码` 和代码块:
```python
def hello():
print("Hello!")
```
[链接文本](https://example.com)
| 列 1 | 列 2 |
|------|------|
| A | B |text
*粗体文本* 和 _斜体文本_
```内联代码``` 和代码块:def hello(): print("Hello!")
链接文本: https://example.com
列 1: A
列 2: Bhtml
<b>粗体文本</b> 和 <i>斜体文本</i>
<code>内联代码</code> 和代码块:
<pre><code class="language-python">
def hello():
print("Hello!")
</code></pre>
<a href="https://example.com">链接文本</a>代码块处理
Agent 生成的代码块在不同渠道有特定处理:
Web UI
- 完整语法高亮(Syntax Highlighting)
- 支持代码复制按钮
- 支持代码折叠
Telegram
- 使用
<pre><code>标签 - 支持语言标识(language tag)
- 等宽字体显示
WhatsApp
- 使用三个反引号包裹
- 无语法高亮
- 等宽字体显示
不支持代码块的渠道
自动转换为缩进格式或纯文本:
// 原始
```python
print("hello")
```
// 转换后
print("hello")链接格式
markdown
# 原始 Markdown 链接
[OpenClaw 文档](https://docs.openclaw.ai)| 渠道 | 输出格式 |
|---|---|
| Web UI | 可点击超链接 |
| Telegram | <a href="...">文本</a> |
| Discord | [文本](URL) 原生支持 |
文本: URL(分离显示) | |
| iMessage | 自动链接预览 |
图片嵌入
Agent 回复中包含图片时的处理方式:
markdown
# Agent 回复中的图片
渠道处理:
- Web UI — 内联显示,支持放大预览
- Telegram — 作为图片消息单独发送
- WhatsApp — 作为媒体消息发送
- Discord — 嵌入显示或作为附件
图片优化
OpenClaw 会根据渠道限制自动调整图片大小。大图片在发送前会被压缩以符合平台限制。
长消息分割
当回复超出渠道的消息长度限制时,自动分割:
yaml
messageSplitting:
telegram: 4096 # Telegram 限制
discord: 2000 # Discord 限制
whatsapp: 65536 # WhatsApp 限制分割规则:
- 优先在段落边界分割(
\n\n) - 其次在换行处分割(
\n) - 最后在句号处分割(
.) - 强制分割 — 如无合适断点,在字符限制处硬分割
格式连续性
分割后的多条消息会尽量保持格式连续性。例如,代码块会在分割处正确关闭和重新打开。
特殊字符转义
某些渠道需要对特殊字符进行转义:
typescript
// Telegram HTML 模式下的转义
const escapeMap = {
'&': '&',
'<': '<',
'>': '>',
}OpenClaw 自动处理转义,Agent 无需关心渠道特定的转义规则。
格式化配置
yaml
formatting:
markdown: true # 启用 Markdown 格式化
codeHighlight: true # 代码语法高亮(仅 Web UI)
autoLinkDetection: true # 自动检测 URL 并转为链接
emojiSupport: true # 支持 Emoji 表情