Telegram纸飞机批量导出群成员CSV:官方API+第三方机器人对比,附平台差异、成本阈值与合规边界。
功能定位:为什么只能“曲线”导出成员列表
Telegram 原生客户端至今未提供“一键导出群成员”按钮,核心原因在于隐私政策:用户 ID 与手机号受《隐私声明》第 5.2 条限制,官方客户端默认隐藏陌生人手机号。因此“批量导出群成员为 CSV”实质是绕过前端限制���通过 API 或机器人收集可公开可见字段,再自行整理成表格。理解这一点后,就能明白为何任何方案都必须满足两个前提:①你拥有管理员权限或对应 bot 已进群;②群成员隐私设置允许“通过链接”或“对成员可见”。
决策树:三种主流路线对比
① 官方 Bot API getChatMember & getChatAdministrators
适用场景:成员 ≤ 200 人、对实时性要求低、不愿承担第三方风险。做法:循环调用 getChatMember 逐一读取用户对象,再写入 CSV。优点:零成本、合规;缺点:速率限制 30 次/秒,十万级群组需数小时,且无法拉取“已隐藏”手机号。
② 本地客户端 API(MTProto)
适用场景:十万级大群、需要批量抓取 username、bio 字段。做法:使用官方开源库 tdlib 或 MadelineProto 登录自托管账号,调用 channels.getParticipants。优点:一次可拉 200 条分页,速度比 Bot API 快一个量级;缺点:需自己保管手机号与 session 文件,若 IP 漂移可能触发风控。
③ 第三方归档机器人(可搜索公开 Bot)
适用场景:不想写代码、一次性需求。做法:把 bot 设为管理员→授予“删除消息”以外权限→在群内发送 /export 类指令,机器人返回 csv 文件。优点:零开发;缺点:文件临时链接有效期 24 h,且 bot 理论上可缓存数据,存在泄露风险。
合规边界
根据 Telegram Bot FAQ,导出数据若包含手机号即视为敏感个人信息,二次分发需征得数据主体同意,否则可能违反 GDPR 或属地数据保护法。
成本与性能阈值:多少人开始“变慢”
经验性观察:Bot API 在成员数 > 5 000 后,因串行请求+RTT 波动,总耗时呈指数趋势;MTProto 分页接口在 20 000 人附近首次出现“limit 200 返回空页”概率升高,需降低并发并插入随机延迟。若以“耗时 ≤ 15 分钟”为可接受阈值,建议:
- ≤ 2 000 人:直接用 Bot API,脚本 80 行内搞定;
- 2 000–20 000 人:MTProto + 分页 offset,单 IP 并发 ≤ 5;
- > 20 000 人:分片账号导出后合并,避免单账号 session 被限速。
平台差异:Android、iOS、桌面端最短路径
获取群组 ID(前提步骤)
Android:点击群标题→右上角“⋮”→复制链接,粘贴到记事本得到 t.me/xxxx,若群名为公开链接,xxxx 即为 username;私有群链接里那串数字即为 ID(带负号)。iOS:群标题→右上角“▸”→“分享”→“复制链接”。桌面端(macOS/Windows):右键群图标→“复制群组链接”。
创建 Bot 并获取 Token
全平台统一:私聊 @BotFather→发送 /newbot→按提示命名→复制返回的 HTTP API token。该 token 即后续脚本里的 BOT_TOKEN。
操作步骤:以 Bot API 为例(Python 3.11)
- 安装依赖
pip install python-telegram-bot==20.7 pandas - 写入下列脚本,保存为
export_members.py
import asyncio, pandas as pd, os from telegram import Bot BOT_TOKEN = 'YOUR_BOT_TOKEN' CHAT_ID = -1001234567890 # 私有群ID带负号 CSV_OUT = 'members.csv' async def main(): bot = Bot(BOT_TOKEN) admins = [a.user.id async for a in bot.get_chat_administrators(CHAT_ID)] data = [] async for m in bot.get_chat_members(CHAT_ID): data.append({ 'user_id': m.user.id, 'username': m.user.username or '', 'first_name': m.user.first_name or '', 'last_name': m.user.last_name or '', 'is_admin': m.user.id in admins }) pd.DataFrame(data).to_csv(CSV_OUT, index=False) print(f'Exported {len(data)} rows → {CSV_OUT}') if __name__ == '__main__': asyncio.run(main()) - 终端执行
python export_members.py,数十秒后得到 CSV。
提示
若群为公开频道,需把 get_chat_members 换成 get_chat_subscribers,但 Bot API 目前仅开放给“频道管理员”且无法拿到订阅者列表,只能走 MTProto。
回退方案:脚本中断如何续跑
Bot API 不提供“偏移量”参数,但可在本地维护已导出 ID 集合。脚本重启时先读 CSV 得到已有 ID,再跳过已存在记录,仅追加新成员。MTProto 则依赖 offset 参数,断点续跑更直观:把上次最后一行 user_id 作为 offset 重新请求即可。
例外与副作用:三种常见“坑”
① 隐私模式导致字段缺失
若成员设置“对陌生人隐藏手机号”,则 API 返回的 phone_number 字段为空,CSV 相应列全空,属预期行为,不可视为 Bug。
② 账号被限速
经验性观察:同一 IP 登录的 MTProto 账号若在 10 分钟内请求超过 3 000 次,服务器会返回 FLOOD_WAIT_xxx,需休眠 xxx 秒。缓解:加随机 0.2–0.8 s 延迟或使用不同出口 IP。
③ 重复用户名大小写
Telegram 用户名不区分大小写,但 CSV 按返回原文写入,易在 Excel 产生“重复”。导出后统一 .str.lower() 即可。
与第三方机器人协同:最小权限原则
若必须用第三方归档 bot,请只勾选“邀请用户”“删除消息”以外权限,禁止授予‘添加管理员’。完成后立即撤销管理员并移除 bot,减少潜在泄露窗口。可复现验证:在 Telegram 桌面版→群设置→管理员→点击 bot→关闭所有开关→保存,bot 会立即失去读取成员列表能力。
故障排查:出现 0 行或 403 原因速查
| 现象 | 最可能原因 | 验证动作 |
|---|---|---|
| CSV 只有表头 | Bot 未进群 | 在群内发送 /my_id,看 bot 是否回复 |
| 报 403 CHAT_WRITE_FORBIDDEN | 把 Bot 踢出后仍用旧 token | 重新邀请 bot 并确认无“仅限管理员”权限 |
| getChatMembers 返回空 | 目标其实是频道 | 查看群类型,频道需改用 MTProto |
适用/不适用场景清单
- ✅ 内部运营复盘:统计活跃管理员比例、制作欢迎语 @ 列表。
- ✅ 迁移到新版社群:把旧群成员名单导入 CRM,做分层邀请。
- ❌ 非管理员身份想“偷”成员名单——技术上无法绕过权限,且违反ToS 5.3。
- ❌ 购买“现成 CSV”做垃圾私信——高投诉率会导致账号被永久封禁。
最佳实践 6 条检查表
- 导出前在群公告告知“将进行数据归档”,降低隐私投诉概率。
- 仅保留必要字段:user_id、username、first_name,删除手机号列。
- CSV 落地即加密,文件名避免使用“Telegram”“手机号”等敏感词。
- 脚本仓库加 .gitignore 排除 token 与 CSV,防止意外上传 GitHub。
- 设置定时删除策略:本地文件保留 ≤ 30 天,到期自动 shred。
- 若用于商业邮件营销,先走双重确认(Opt-in),否则违反 CAN-SPAM。
FAQ(FAQPage Schema)
为什么 Bot API 拿不到手机号?
手机号受隐私设置保护,只有当对方把你设为“可见联系人”且 bot 通过手机号邀请入群时才会返回,否则字段为空。
导出速度突然降到 1 条/秒怎么办?
检查是否触发 FLOOD_WAIT。给每次请求加随机 0.5 s 延迟,或更换出口 IP,通常可恢复到 20–30 条/秒。
第三方 bot 会不会偷偷保存我的数据?
理论上可以。验证方法:抓包看是否向非 Telegram IP 上传文件;最稳妥做法是使用自托管源码的 bot 或完全本地脚本。
频道订阅者能用同样脚本导出吗?
Bot API 无权限读取频道订阅者列表;需用 MTProto 的 channels.getParticipants,且账号必须是频道管理员。
CSV 文件出现乱码怎么解决?
Excel 默认以 ANSI 打开 UTF-8 会乱码。用 Excel“数据→自文本/CSV”导入,手动选 65001: Unicode (UTF-8) 即可。
收尾与下一步
批量导出 Telegram 群成员为 CSV 并不是“一键功能”,而是一道成本与合规权衡题:小群用 Bot API 最省事,大群靠 MTProto 兼顾速度,临时需求可选第三方机器人但务必最小权限。跑完脚本后,记得删除本地敏感文件、对成员告知用途,并把 CSV 导入下游系统前做脱敏。下一步,你可以基于这份名单做分层欢迎、生日提醒或迁移到新的付费社群,但始终遵循“先同意、后营销”的红线,才能长久运营而不踩雷。
📺 相关视频教程
QQ极限引流:一键偷人视频教程
