BotFather 深度解析:创建机器人、API 令牌、命令与权限架构
本文详解如何通过 BotFather 创建 Telegram 机器人,讲解令牌即身份的安全原则、权限授予的边界、命令菜单的设置,以及机器人结构上无法做到的事,帮助你安全地管理和使用机器人。
本文详解如何通过 BotFather 创建 Telegram 机器人,讲解令牌即身份的安全原则、权限授予的边界、命令菜单的设置,以及机器人结构上无法做到的事,帮助你安全地管理和使用机器人。

本课程中提到的每一个机器人——发布你信息流的那个、发放订阅链接的那个、管理你群组的那个——都是在与一个叫 BotFather 的机器人的对话中创建的,之后也由那里控制。
整个主题可以归结为一句话。机器人没有手机号也没有密码;它只有一个字符串,谁持有这个字符串,谁就是这个机器人。本页其余内容都是这一点的推论。
完成这一步后你将能够做到
- 创建一个机器人,并选定它唯一无法更改的那一项。
- 把令牌当作它本来的凭证来对待,并知道如何使其失效。
- 当成员询问机器人是否会读取他们的消息时,如实回答。
- 识别机器人在结构上无法做到的事情。
创建机器人,以及那个永久性的决定
你打开与 BotFather 的对话,请求创建一个新机器人,给它一个显示名称,再给它一个用户名。作为回报,你会得到一个令牌。整个仪式就是这样,大约九十秒。
这些选择中有一项无法撤回。显示名称随时可以更改;用户名实际上不能改。它必须全局唯一,必须以“bot”结尾,而且此后每一条链接、每一张海报、每一次提及都将永远指向它。选它就像选域名一样:简短、能大声拼读出来、不要绑定到某次活动或某个年份。
还有两段文字值得在创建当天就认真写好,因为它们是陌生人在决定按下“开始”之前唯一会读的内容:出现在机器人空白屏幕上的简短描述,以及出现在其个人资料上的“关于”一行。说明它是做什么的,以及第一条消息应该包含什么。这与第 078 步的免费帖子是同一个原则——它是销售材料,而通常都被留空。
令牌就是机器人
令牌是一个包含标识符和密钥的单一字符串。任何持有它的人都能发送你机器人所发送的内容、接收你机器人所接收的内容,并以你机器人被授予的任何权限在任何房间中行事。没有第二因素,没有设备绑定,也没有登录提醒。
这意味着处理规则应当等同于对待一个无法找回的密码。它绝不能进入代码仓库、移动应用、页面代码、截图或发给同事的消息中。令牌泄露最常见的方式不是攻击;而是一个工作文件被提交到了某个公开的地方,而自动扫描公开代码以查找这类字符串是一项常规活动。
如果泄露了,在 BotFather 中撤销它。这会立即使旧字符串失效并签发一个新的,而复制了你旧令牌的人现在持有的东西毫无用处。注意撤销不会做什么:它不会把你的机器人从你的频道中移除,也不会减少它在那些频道中的权限。如果问题出在机器人本身而非泄露的凭证——一个你不再信任的服务、一个你已停用的工具——那么要做的就是在每个房间中移除它的管理员权限,这正是第 085 步所述的控制措施。
最后,是谁拥有它的问题。创建机器人的那个账号在 BotFather 中控制它。如果那是同事、承包商或你旧的个人账号,那么机器人的未来就属于那个账号。在大家还和睦相处时就有意地转移它,而不是等到有人离开时才发现问题。
你往群里添加了一个管理机器人。一位成员问它是否能读取对话。诚实的回答是什么?
不——机器人只能看到发给它的消息
这取决于两项设置,而把它设为管理员无论如何都会让它获得一切权限
是的——群组中的任何机器人都会收到群内发送的每一条消息
默认情况下,群组中的机器人是受限的:它接收发给它的命令、对它自己消息的回复,以及对其用户名的提及,而成员之间的普通对话不会传递给它。这个限制可以由运行机器人的人关闭,这对于任何过滤垃圾信息或监控关键词的功能都是必要的。而人们忽略的一点是:把机器人提升为管理员无论如何都会解除这个限制。所以对成员的诚实回答是“这取决于它如何配置,如果它是管理员,那就是可以”——而如果你打算告诉你的群组某个机器人无法读取他们的消息,你最好了解那个特定机器人的这两项设置。
你机器人的令牌被提交到了一个公开的代码仓库。你首先该做什么?
删除该提交并将仓库设为私有
更改机器人的用户名,让旧的引用失效
撤销令牌,这会立即使已公开的字符串失效
删除那次提交毫无用处,因为它在发布的那一刻就被复制了,而且字符串仍然有效。更改用户名是不可能的,即使可能也无济于事。撤销是唯一能解决实际问题的操作:它使密钥失效,于是任何地方的每一份副本都立刻变得毫无价值,而你会收到一个新的来放入你自己的部署中。先做这个,其次整理仓库,然后查看自提交发布以来机器人一直在做什么——任何在频道中拥有发布权限的机器人都应该检查其近期活动。
一个你从未使用过的机器人突然给你发来消息。这是怎么回事?
机器人可以向任何它知道用户名的人发送消息
要么是你曾经启动过它然后忘了,要么它就是一个伪装成机器人的普通账号
有人把你加入了它的订阅者列表
机器人无法向从未给它写过消息的人发起对话。这是平台的结构性属性而非政策,也是普通用户可用的更有用的安全事实之一:未经请求的联系绝不会来自正常运行的机器人。所以当一个“支持机器人”或“验证机器人”不请自来时,有两种可能:你过去某个时候与它互动过,或者它是一个有着机器人式名称和头像的人。第二种要常见得多,而接下来的消息会向你索要验证码、短语或付款。
权限,以及那个永远不要给的权限
添加到频道或群组的机器人恰好拥有别人授予它的管理员权限,不多不少。纪律是常规的那一套:授予让它完成工作所需的最小权限集,并偶尔审查列表,因为房间里会积累来自已结束项目的机器人。
永远不要授予的权限是添加管理员的能力。拥有该权限的机器人可以提升任何东西,包括能移除你的东西。其他一切都可以恢复;那一个则是把房间拱手让人。其次影响最大的是删除权限,它能让一个行为失常的自动化程序以你来不及阻止的速度移除你的存档。
反过来也值得了解:机器人无法自行加入任何东西。必须有权限的人来添加它。这使得管理员列表成为能够在你房间中行动的东西的完整清单,这就是为什么第 085 步把阅读该列表当作一项安全控制措施来对待。
现在就试试——五分钟
四个步骤,前两步即使你从不打算运行机器人也值得做。
- 创建一个一次性机器人 在 BotFather 中花九十秒。亲眼看到令牌出现一次,比阅读本页其余内容更能教会你这些。
- 撤销它的令牌,看着新令牌到来 现在你知道紧急控制在哪里了,这就是这个练习的意义。
- 打开你管理的每个房间,阅读机器人列表 任何你无法说明来源的,移除。任何权限超出其所需的,削减。
- 为你已经在运行的机器人撰写描述和关于文字 两段陌生人在按下“开始”之前会读的简短文字,而它们几乎总是空的。
机器人不能做什么
了解边界比了解功能更有用,无论对于构建还是对于不被欺骗而言都是如此。
它不能先给你发消息。测验中已涵盖,值得重复,因为它把一整类骗局变成了你一秒就能识别的东西。
它不能自行加入房间,也不能看到它未被添加到的频道,或读取它不在其中的群组。
它不能看到你的电话号码、你的其他聊天或你的联系人。它知道正在与它对话的账号以及你发给它的任何内容。有些机器人会要求你分享联系人或位置,那些是你明确回答的提示——而不是被悄悄获取的东西。
它不能在所获权限之外行事。拥有发布权限的机器人不能删除、封禁或读取成员列表,再多的代码也无法从它那一侧改变这一点。
还有一件它能做而人们会忘记的事:任何与机器人开始对话的人,其身份都会被运行该机器人的人知晓。不是你的号码,而是你的账号、你的显示名称和你的用户名。对于一个普通工具来说这没什么特别。对于一个声称提供匿名服务的机器人来说,这值得思考,因为那个机器人的运营者是一个拥有服务器的陌生人。
此阶段的常见问题
我以后可以更改机器人的用户名吗?
把它当作永久的。显示名称、头像、描述和命令都可以自由更改;用户名是万物指向的地址。如果你确实必须迁移,实际途径是创建一个新机器人并迁移,这意味着所有现有链接、印刷的二维码和保存的对话都会失效。这就是为什么花九十秒选择它是创建过程中最有影响的部分。
一个账号可以创建多少个机器人?
多到你首先遇到的限制是你自己记住它们用途的能力。值得养成的习惯是删除实验品:你为了尝试某个东西而创建、留在频道里又忘记的机器人,是一个你不再关注的凭证。BotFather 可以彻底删除一个机器人,对废弃的机器人这样做是五分钟的卫生工作,能消除真实的风险暴露。
令牌实际上应该放在哪里?
放在你的托管服务为密钥提供的任何地方——环境变量、密钥存储——而不是其他地方,尤其不要放在你正在编辑的文件里。实际的检验标准是:如果令牌被意外复制到公开的地方,它是否还能存活?如果答案取决于你是否记得不要那样做,那么这个安排就是错的。如果第三方服务需要它,要明白你已经给了那家公司在你机器人身份下行事的能力,只要他们持有它。
机器人在群组中工作需要成为管理员吗?
只有当它需要对房间采取行动时才需要。一个在被问到时回答问题的机器人作为普通成员也能完美工作。一个删除垃圾信息、限制人员或置顶消息的机器人需要针对这些操作的具体权限——而正如测验所指出的,提升它也会解除消息限制,所以一个为了一小项工作而被设为管理员的机器人现在会接收房间里说的一切。这个取舍应该是有意识地做出的,而不是因为提升看起来是让某样东西运作起来的方式。
别人能从外部发现我的机器人是做什么的吗?
他们能看到你发布的关于它的一切——名称、头像、描述、注册的命令——以及它对他们说的一切。他们看不到你的代码或数据。他们能做的是尝试每一条命令并看看会发生什么,这值得你自己用一个无权限的账号来做,因为那正是第一个好奇的陌生人会做的事,也正是管理命令最终被发现会回应任何人的方式。
如果我不再为它的服务器付费,机器人会怎样?
它会留在被添加到的每个房间里并停止响应。没有任何通知;旧帖子上的按钮毫无反应(第 081 步),命令陷入沉默,你围绕它构建的任何流程都会悄然停止。如果你正在关停某个东西,作为关停的一部分把机器人从房间中移除,而如果你继承了一个管理员列表上有一个沉默机器人的频道,它今天什么都不做并不是把凭证留在原地的理由。