消息格式化
Bot API 支持带格式的消息文本。发送时通过 parse_mode 参数指定解析模式,服务端会把标记解析为格式实体(entities)后下发给客户端。
- 可选值:
MarkdownV2、Markdown、HTML,不区分大小写。 - 在 SafeW 中,
Markdown与MarkdownV2由同一解析器处理,行为完全一致。 - 提供
parse_mode时,请求中的entities/caption_entities参数会被忽略;不提供parse_mode时才使用手动传入的实体列表。
支持 parse_mode 的位置:
| 方法 | 作用字段 |
|---|---|
| sendMessage、sendMessageDraft、editMessageText | text |
| sendPhoto、sendVideo、sendVoice、sendAudio、sendDocument、sendMediaGroup | caption |
MarkdownV2 风格
语法总览:
*粗体* 或 **粗体**
_斜体_
__下划线__
~删除线~
||剧透文本||
[内联链接](https://www.example.com)
[提及用户](safew://user?id=123456789)

`行内代码`
```代码块```
```python
多行代码块
(第一行反引号后的首个单词作为语言标识)
```
> 引用第一行
> 引用第二行
**> 可折叠引用,以 || 结束||文本样式
| 样式 | 写法 | 说明 |
|---|---|---|
| 粗体 | *文本* 或 **文本** | 单星号和双星号等价,均为粗体 |
| 斜体 | _文本_ | |
| 下划线 | __文本__ | |
| 删除线 | ~文本~ | 单个波浪线 |
| 剧透 | ||文本|| | 内容默认打码,点击后显示 |
样式可以嵌套(如 *粗体 _粗斜体_*),也可以在引用内使用。注意 ***文本*** 不会产生「粗斜体」——三个星号会被解析为 ** 加 *,两者都是粗体标记,互相抵消后不产生任何格式。
代码
| 写法 | 效果 |
|---|---|
`代码` | 行内代码(等宽显示) |
```代码```(同一行) | 代码块,无语言标识 |
``` 起止的多行块 | 代码块;开头 ``` 之后同一行的第一个单词作为语言标识(如 ```python) |
代码内部不解析其他格式标记,但反斜杠转义依然生效(例如在行内代码中用 \` 可输出反引号本身)。
链接、提及与自定义表情
| 写法 | 效果 |
|---|---|
[显示文本](https://example.com) | 内联链接。URL 仅支持 http://、https://、safew:// 协议,其他协议的链接会被丢弃、只保留文本 |
[显示文本](safew://user?id=<用户ID>) | 提及用户(无需知道用户名,点击跳转到该用户) |
 | 自定义表情;URL 必须形如 safew://emoji?id=<数字>,占位文本在表情不可用时显示 |
引用
- 行首的
>(后可跟一个空格)开始一段引用,连续以>开头的行合并为同一段引用。 - 行首的
**>是可折叠引用语法,以||结束。当前版本会接受该语法,但客户端按普通引用显示(暂不支持折叠)。 - 引用内可以继续使用文本样式、行内代码等标记;可折叠引用内不要使用剧透标记(
||会被视为引用结束符)。
转义
在标记字符前加反斜杠 \ 可以按原样显示该字符。支持转义的字符集为:
* _ ~ | [ ] ( ) ` > \与 Telegram 官方 MarkdownV2 的差异:
- 官方要求转义
. ! # + - = { }等所有保留字符,SafeW 不需要——这些字符本身没有特殊含义;并且对上述字符集之外的字符使用\时,反斜杠会原样保留(如\.会显示为\.)。 - 官方对未闭合的标记返回 400 错误;SafeW 不报错,未闭合的标记会一直作用到文本末尾。建议始终成对书写标记。
Markdown 风格
parse_mode=Markdown 与 MarkdownV2 完全等价(同一解析器),不存在 Telegram 官方的旧版 Markdown 差异。新接入建议直接使用 MarkdownV2。
HTML 风格
html
<b>粗体</b>、<strong>粗体</strong>
<i>斜体</i>、<em>斜体</em>
<u>下划线</u>、<ins>下划线</ins>
<s>删除线</s>、<strike>删除线</strike>、<del>删除线</del>
<span class="safew-spoiler">剧透</span>、<safew-spoiler>剧透</safew-spoiler>
<a href="https://www.example.com">内联链接</a>
<code>行内代码</code>
<pre>代码块</pre>
<pre class="language-python">带语言标识的代码块</pre>
<blockquote>引用</blockquote>
<safew-emoji emoji-id="5368324170671202286">😀</safew-emoji>注意事项:
- 仅支持上表中的标签,不支持的标签会连同尖括号原样显示(不会报错)。
- 正文中的
<、>、&需分别写成<、>、&。 - 代码块的语言标识写在
<pre>标签的class="language-xxx"上;<pre><code>...</code></pre>嵌套时只生成一个代码块实体。 <a>的href为任意非空值时生成链接。<blockquote>的expandable属性当前不生效,按普通引用显示。<safew-emoji>的emoji-id为自定义表情的文档 ID,标签内的文本作为表情不可用时的占位。
示例
MarkdownV2
bash
curl -X POST "https://api.safew.bot/<token>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 987654321,
"text": "*订单已发货* 🎉\n单号:`SF1234567890`\n>物流信息请点击 [此处](https://example.com/track) 查询",
"parse_mode": "MarkdownV2"
}'HTML
bash
curl -X POST "https://api.safew.bot/<token>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": 987654321,
"text": "<b>订单已发货</b> 🎉\n单号:<code>SF1234567890</code>\n<blockquote>物流信息请点击 <a href=\"https://example.com/track\">此处</a> 查询</blockquote>",
"parse_mode": "HTML"
}'