TgFather
Sign in

Telegram 的 Telethon session 是一把钥匙,不是一个应用

10 min read
telethon session 协议号:授权密钥文件而非应用窗口

Telegram 的 telethon session 是一把授权密钥(通常是一个 .session SQLite 文件,或一个 StringSession 字符串),而不是一个 Telegram 应用窗口,也就是大家常说的 telegram协议号。它让你的 Python 客户端以用户身份使用 MTProto。如果你双击这个文件,期待看到聊天列表,那你买错格式了。如果你需要 get_me() 返回一个用户对象,那它就是你要的商品。

本指南写给已经在用(或准备使用)Telethon 的开发者和运营者:想从我们的自有库存获得 Session 交付,并需要清晰的测活方法和替换流程。目录在 Telegram 账号。关于“即用号、新号、老号”这些更宽泛的说法,请阅读即用型 Telegram 账号。

要点速览

  • Telethon session 是一个授权密钥文件或 StringSession,不是桌面应用窗口。
  • 在 Telegram 账号选择 Session (Telethon);同一批库存,不同的交付方式。
  • 测活:用你自己的 api_id / api_hash 连接,然后调用 get_me()。
  • 测试通过后修改 2FA;把密钥的每一份额外副本都当作漏洞。
  • 失效密钥(AuthKeyUnregistered、手机号不符)走替换流程,而不是去改 SQLite。

telethon session 到底是什么?

Telethon session 是你的 Python 客户端以用户身份使用 MTProto 时所用的授权密钥。当你构造类似 TelegramClient('anon') 的对象并完成登录时,Telethon 会创建它。从那以后,这个文件就是登录本身。

一个典型的 .session 文件里装的是枯燥但关键的东西:要连接哪个数据中心、用于加密流量以让 Telegram 把该进程视为这个用户的授权密钥,以及客户端见过的实体缓存。缓存会让文件比“一把小钥匙”更大,但不会让它变成可读的聊天导出。不要打开 SQLite 去找消息。测活的方式是连接。

StringSession 是同一把密钥的文本编码。在会丢弃文件系统的机器上很方便,也更容易泄露。任何拿到这串字符的人都能以该用户身份登录。把字符串放在密钥管理里,不要放进代码仓库。一次有效登录在导出时可能变成两把密钥,数清楚你有几份副本。

bot token 是第三种东西:用于 Bot API 的 HTTP 密钥。它不是用户会话。如果你的测试需要一个用户去按 Start,你要的是用户 session;如果你的测试需要 bot 来回复,你要的是 token。

如何在 TgFather 购买 Session / Telethon 交付(协议号购买)?

在 TgFather 上,你在与 TData 相同的自有账号目录中选择 Session (Telethon) 交付。打开 Telegram 账号,选择 Session,再选国家和账号年龄段。钱包扣款后即时交付,下载链接经过签名且会过期。

你买的是一种交付格式,而不是另一种账号。因为你的代码是 Telethon,所以选 Session。如果有人要坐在 Telegram Desktop 前,就选 TData。如果你想在自己掌控的客户端里输入验证码,就选实时登录码。“听起来更专业”的错误格式,对你的工位来说依然是错的。

如果交付的 session 调用 get_me() 失败,那是替换的情况,而不是讨论 SQLite 结构的时候。在把生产任务建立在这把密钥上之前,先自己跑一遍测试。

应该先选 Session,再选国家吗?

是的:先把交付格式写下来,再选国家和年龄段。打开 Telegram 账号,选择 Session (Telethon),选好国家和年龄段,预留一个当天就能测试的名额。

应该跑什么样的测活?

在信任这个文件之前,用你自己的 api_id 和 api_hash 真实连接一次并调用 get_me()。不要因为扩展名是 .session 就信任文件,也不要因为字符串很长就信任它。

你需要看到:

  • 连接成功。
  • 返回一个用户对象。
  • 用户 ID 和手机号与你以为买到的账号一致。

展示用的用户名可能会变,ID 不会。用户名对不上是售后咨询问题;手机号对不上,那就是另一个人。

失败情形:

  • 无法连接:不是有效的 session。
  • 能连接,但要求一个你没拿到的云密码:缺了第二把锁。
  • AuthKeyUnregistered:文件里的密钥已不再注册。这是纪念品。申请替换;不要手动编辑 SQLite。

get_me() 证明这把密钥还能说话,但它不证明什么“老号生活方式”。测试通过后,设置或修改两步验证。云密码锁住的是新的登录,它不会把已经流出去的 session 文件吸回来。如果 session 附带了云密码,就修改它。不要复用你私人 Telegram 的密码。

Telethon vs StringSession vs TData vs bot token

Telethon session 文件和 StringSession 都是用户密钥;TData 属于桌面端;bot token 属于 Bot API。付款之前,让格式对上你的工位。

Telethon .session StringSession TData Bot token
它是什么 含授权密钥 + 缓存的 SQLite 文件 同一把密钥的文本形式 Telegram Desktop 工作目录 bot 的 HTTP 密钥
用什么打开 Telethon Telethon Telegram Desktop Bot API / 任何 HTTP 客户端
看起来像应用吗? 不像 不像 像,在桌面端 不像
测活 连接 + get_me() 连接 + get_me() 设置里显示号码 在 Bot API 上调用 getMe
当作 一个密码 一个很容易被粘贴的密码 装在文件夹里的密码 一个密码

Telethon 和 Pyrogram 都说 MTProto,也都会写“session”。但它们的文件不能互换。不要把 Telethon 的 .session 喂给 Pyrogram 客户端,也不要把 Pyrogram 字符串粘进 StringSession。如果你的项目用 Pyrogram,就购买或生成 Pyrogram session。只写“session”却不注明是哪个库的电报协议号商品页,只会浪费你一个下午。

如何安全地存放和使用密钥?

像对待密码一样存放 session 文件或字符串:不粘贴、不提交、不随手复制。任何拥有这把密钥的人,都能在他运行客户端的任何地方以该用户身份登录。

实用规则:

  • 不要“只是为了测一下”就贴到群里。
  • 不要提交到代码库。
  • 两台机器两份副本,就是两把钥匙。
  • 如果你在 Telegram 设备列表里撤销错了那一行,下一次 get_me() 会以 AuthKeyUnregistered 失败。
  • 第一次 get_me() 成功之后,就别再折腾了。把文件放到进程能读到的地方。把每一份额外副本都当作漏洞。

正当的用法包括:需要真实用户与 bot 对话的测试框架、按用户要求拉取某个聊天的客服脚本、Mini App 的预发布收件箱。一张收据并不能为未经请求的群发消息买来豁免。

需要的是给人用的桌面席位?在即用型 Telegram 账号里比较各种格式。需要的是 bot 用户名而不是用户密钥?请看Telegram 老机器人。

去哪里买,替换包括什么?

在 TgFather 账号目录购买 Session 交付;替换覆盖的是失效密钥,而不是密钥保管上的失误。从 Telegram 账号开始:选择 Session (Telethon)、国家和年龄段。用钱包付款,从签名链接下载,运行 get_me(),修改云密码。只有在密钥证明有效之后再开始搭建。

失效的密钥(AuthKeyUnregistered、手机号不符、承诺的 2FA 没给)走的是自有库存的替换流程,而不是一句“session 就是这样”。保管好你自己的 api_id / api_hash 和你自己的密钥存储。目录负责交付格式,交付之后的卫生由你的流程负责。

telegram session 就是那把授权密钥。Telethon 是向 Telegram 发起请求的 Python 库。即便你搜索的是 Telethon 交付,你买到的依然是一个文件(或字符串),而不是一个应用窗口。

准备好了:购买带 Session 交付的 Telegram 账号。

常见问题

能把 Telethon .session 转换成 Pyrogram session 字符串吗?

没有受支持的方法能把 Telethon session 文件转换成 Pyrogram session 字符串。如果你的代码用 Pyrogram,请直接获取 Pyrogram session。

如果我在设置里撤销其他会话,我的 .session 会失效吗?

只有当你撤销的正是设置里那一行会话时它才会失效。设备列表就是一份密钥列表;点错一行,下一次 get_me() 就会失败。

AuthKeyUnregistered 是什么意思?

AuthKeyUnregistered 表示你文件里的授权密钥已不再注册。替换它,不要手动编辑 SQLite。

文件大约 40KB,我是不是拿到了聊天记录?

大概率不是:Telethon 会缓存实体,所以较大的文件依然只是库的元数据。它不是一个可以手动打开浏览的聊天存档。

同一个 session 能放在两台服务器上吗?

你可以复制文件,但两个进程会共享同一把密钥。如果你需要两个互不干扰的地方,最好分别进行两次有意的登录。

在 TgFather 上,Session 和 TData 是不同的库存吗?

不是:Session 和 TData 是同一批账号,只是交付格式不同。用 Telethon 就在结账时选 Session;用桌面端就选 TData。