一、Bot 接入的整体结构:谁发消息给谁
Bot 的消息流向与普通账号不同。用户发给机器人的消息由平台转发到机器人接口,机器人的回复再由平台投递给用户,双方并不直接建立连接(依据:官方文档对机器人接口的描述)。理解这一点,有助于解释后面 3 个长度限制为什么会出现。
平台在中间承担了 2 个角色:既要把用户消息转给开发者,也要保证开发者发出的内容按格式要求投出去。任何一次转发都伴随一次长度检查,超限的部分不会自动补发。
身份上也有区别。机器人的身份由平台分配,开发者不需要处理账号登录、设备配额与验证码这些属于普通用户账号的环节,这让 Bot 接入的门槛比自动化普通账号低得多。
有一个定位要提前写进方案:Bot 账号并不是普通账号的替代品,它与普通私聊的端到端加密会话不是同一套东西,需要保密的交互仍然要按普通会话的规则来设计。
- 用户侧 1 条消息经过平台转发一次,回调里就可能出现被截断的字段
- 机器人发出的内容同样走平台投递,长度检查发生在投递之前
- 机器人的身份由平台分配,开发者不需要处理账号登录与设备配额
- Bot 账号本身不参与普通私聊的端到端加密会话,这一点要在方案里写清楚
- 平台转发带来的字段截断,需要在回调处理里做长度校验再入库
二、4096 个字符的文本上限如何影响设计
发送文本的上限是 4096 个字符(来源:官方文档对消息长度的说明)。这个限制对发送方向是硬约束,超出的内容要么被拒绝要么被截断,因此长内容的输出必须先切片再发。
切片策略会直接决定接收方的体验。按固定字符数硬切会把句子和表格拦腰截断,按段落边界切则更自然,前提是要处理单个段落本身就超过上限的情况,这一段只能再按行切。
顺序标记同样不可省。多条消息在列表里是平铺的,如果不带编号,接收方很难把 3 条内容重新拼回一条完整的说明,必要时还得追问一次。
还可以配合平台的编辑接口:先发 1 条较短的消息占位,把长内容写进去之后再改,这条路径能绕开切片带来的阅读割裂,但实现上要处理并发编辑的顺序。
- 4096 个字符是单条消息的上限,长报告要拆成多条并编号
- 拆分策略要在代码里固定,例如按段落边界切而不是按固定字符数硬切
- 切片之间建议加顺序标记,否则接收方难以把多条拼回一条
- 官方客户端在显示长文本时也有折叠行为,切片过碎会影响阅读
- 中英文混排时字符计数按平台口径计算,估算宽度不要用字节数
三、256 个字符的回调参数上限
回调里由开发者自行塞进去的参数有 256 个字符的上限(来源:官方文档对回调数据的说明)。这一条与发送方向无关,它限制的是机器人往回调里附加的自定义内容。
把两类内容分开处理是最省事的办法:命令名、短标识这类一次性的东西直接放进回调;正文、报告、长链接这类需要留存的内容交给状态存储,回调里只留 1 个短标识,收到后再去取。
超长回调的表现容易被误读。在部分客户端上被直接丢弃,用户看到的就是消息没有反应,既不报错也不提示,很容易被当成机器人卡死。排查这类问题时,先量一下回调参数长度,比翻日志更快。
除了长度,还有 1 个常被忽略的点是回调的时效。开发者应当尽快返回应答,把耗时长的处理挪到后面,否则平台会按超时处理,机器人表现为无响应。
- 256 个字符适合放命令名与短标识,不适合放正文或长链接
- 长内容应改为通过状态与服务端存储传递,回调里只放 1 个短标识
- 超长回调在部分客户端上会被直接丢弃,表现为消息无响应
- 设计时把标识长度控制在限额内,是官方文档给出的常见做法
- 短标识最好带上版本号,便于以后升级时兼容旧数据
四、附件与运行环境的其它边界
除长度外,附件与运行环境还有各自的条件。下面几项来自官方文档与官方应用页面,做方案评估时需要一并核对,否则容易在上线前才撞到限制。
附件是 1 个独立维度。单条附件上限 2048 MB(来源:官方常见问题对文件大小的说明),大文件要预留上传时间,并且要考虑接收端在移动网络下的可用性,实际能走通的往往远小于上限值。
运行环境则决定机器人在什么客户端里被测试。官方客户端在 App Store 上架编号为 686449807,安卓端包名为 org.telegram.messenger(来源:官方应用页面),系统条件为 Android 需 6.0 版以上(依据:官方应用页面)。
把这些限制整理成 1 张表放在接口文档里,比在群里反复答疑有效得多。调用方最常犯的错,就是把长内容一次性塞进发送接口而没有先切片。
- 单条附件上限 2048 MB(来源:官方常见问题对文件大小的说明),大文件要预留上传时间
- 机器人被拉进群组时,群成员上限为 200000 人(依据:官方常见问题对群规模的说明)
- 测试客户端的运行条件为 Android 需 6.0 版以上(来源:官方应用页面)
- 把限长、限附件与运行环境 3 项写进接口文档,避免调用方反复踩同 1 个坑
- 桌面端另有系统条件,Windows 需 7 版以上、推荐 10 版(依据:官方桌面端下载页)
| 口径项 | 数值与出处 | 说明 |
|---|---|---|
| 发送文本上限 | 4096 个字符(来源:官方文档对消息长度的说明) | 4096 个字符是单条消息的硬上限,长内容需先切片。 |
| 回调参数上限 | 256 个字符(来源:官方文档对回调数据的说明) | 256 个字符只适合放短标识,长内容应改走状态存储。 |
| 单条附件上限 | 2048 MB(来源:官方常见问题) | 2048 MB 的附件需要预留上传时间,属于官方文档条件。 |
| 所在群成员上限 | 200000 人(依据:官方常见问题对群规模的说明) | 机器人所在群的成员规模上限是 200000 人。 |
| 测试端系统条件 | Android 需 6.0 版以上(来源:官方应用页面) | 较旧版本的客户端行为与新版本有差别,属版本相关条件。 |
- 本页出现的账号与加密口径抄自公开文档,核对日期为文章标注日期;核对时只按原文转述,不做推断。
- 本站不收集账号信息,也不提供代注册、解锁或找回服务;正文仅作资料整理。
- 隐私与配额口径会随版本调整;引用时请写明来源页面与核对日期。