用Telegram机器人把指定群聊消息一键导出CSV,含时间、ID、内容三列,手机电脑都能跑。
功能定位:为什么“导出 CSV”仍是刚需
在 20 万级超级群组与线程回复并存的 Telegram 里,群消息导出为 CSV 依旧是运营、审计、合规归档的硬需求。官方客户端只提供 JSON 与 HTML 格式的“导出聊天记录”,Excel 用户仍需二次转换;而 Bot API 8.1 允许读取消息并回传任意文件,于是“机器人转 CSV”成为最轻量的捷径。
与本地导出相比,机器人方案免 root、免桌面客户端,且可定时触发;代价则是需授予机器人读取权限,并承担 50 MB 单文件下载天花板(Bot API 限制)。下文以“第三方归档机器人”作为示例,所有路径均在当前最新版本(截至 2026 年 4 月)可复现。
前置检查:三类权限与两条硬上限
- 机器人必须已被拉入目标群,且拥有“读取全部消息”权限(Privacy 设置里关闭 Groups → Only my messages)。
- 若群开启“禁止转发”或“匿名管理员”,机器人仍可读取,但消息字段中
forward_from、admin_author将为空。 - CSV 仅支持文本、时间、ID、用户昵称四列;>50 MB 的媒体文件将返回
file_too_large错误,需改用getFile分批拉取。
经验性观察:当群日更 2000 条以上时,单次导出请求常在 40 秒内返回 504。缓解办法是分段:用 offset_date 参数按天切分,再本地合并 CSV。
最短操作路径(分平台)
Android / iOS
- 在群顶部标题长按 → 添加成员 → 搜索机器人用户名
@exampleArchiveBot→ 以“成员”身份加入。 - 在输入框键入
/auth,按提示向 Bot Father 申请的令牌粘贴到私聊,完成一次性 OAuth。 - 回到群内键入
/exportcsv 7(数字 7 代表回溯 7 天)。 - 机器人回复文件卡片 → 点“下载”→ 选择“保存到文件”→ 用 Excel 或 Numbers 直接打开。
桌面端(Win / macOS / Linux)
- 右侧栏 ⋮ 菜单 → Manage group → Add member → 输入机器人用户名。
- 在机器人私聊窗口按
/start→ 选择“Export”→ 下拉选“目标群”→ 勾选“CSV only”→ 时间范围选“Last 30 days”。 - 点击“Generate”→ 状态条走完 100% → 自动弹出“Download”按钮 → 默认保存在系统 Download 文件夹。
若出现“权限不足”弹窗,先检查群设置 → Administrators → 机器人是否被勾选“Delete messages”以外的全部权限;仍失败则移除后重拉一次即可刷新缓存。
CSV 字段释义与可选扩展
| 列名 | 类型 | 备注 |
|---|---|---|
| message_id | int | 群内唯一序号,可用于跳转 |
| date | ISO-8601 | UTC 时间,Excel 需设自定义格式 yyyy-mm-ddThh:MM:ss |
| user_id | int | 匿名管理员时为空 |
| name | string | 优先显示用户名,无则显示 first_name |
| text | string | 纯文本;含链接时保留完整 t.me 前缀 |
如需追加“回复链”字段,可在机器人命令后加 --thread 开关,CSV 会新增 reply_to_message_id 列,方便用 Excel Power Query 做层级透视。
不适用场景与副作用清单
- 群已开启“临时消息”( disappearing messages ),机器人只能抓到存活窗口内的内容,导出残缺属预期行为。
- 当消息内含 Inline Keyboard 或 Web App 调用,CSV 仅保留按钮文字,丢失回调数据。
- 超过 50 MB 的语音/视频,
file_id虽能写入 CSV,但下载链接 60 分钟后失效,需二次脚本刷新。 - 若用于法务取证,需额外保留官方 JSON 导出做哈希校验;CSV 易因编码问题被质疑篡改。
提示:合规团队可把机器人返回的原始 JSON 一并归档,再用开源工具 jq 转 CSV,既保留签名字段,又兼顾 Excel 可读性。
故障排查:三句日志定位 90% 问题
| 现象 | 最可能原因 | 验证与处置 |
|---|---|---|
| 机器人无响应 | 未关闭 Privacy 模式 | 私聊 /setprivacy 给 BotFather → Disable |
| 返回空白文件 | 时间范围无消息 | 把天数改小后重试;或检查群是否新建 |
| 下载提示 404 | 文件过期 | 重新执行 /exportcsv,链接会刷新 |
最佳实践 5 条:让 CSV 真正可用
- 先拉测试群:用 3 人小群跑通 1 天数据,确认字段与编码(UTF-8 BOM)再上大群。
- 分段导出:>1 万条时按 7 天切片,文件名带起止日期,避免 Excel 104 万行溢出。
- 统一时区:在机器人参数加
--tz Asia/Shanghai,防止 UTC 与本地差 8 小时。 - 敏感列脱敏:导出后立刻用 Excel“替换”把 user_id 后 6 位打码,再分发给外部分析师。
- 保留 JSON 原档:把机器人返回的原始 .json 压缩加密,存入只读频道,方便后续审计。
与官方导出功能的取舍对比
客户端“导出聊天记录”支持媒体打包、HTML 时间轴、且无需第三方,但文件体积大、无法自动化;机器人 CSV 轻量、可定时,却丢失媒体且需授权。经验性结论:日报、月报类重复性任务优先用机器人;一次性法务取证优先用官方桌面导出,两者互补而非替代。
版本差异与迁移建议
2026-03 的 Bot API 8.1 把 getUpdates 单次上限从 100 提至 200,导出耗时约减半;但旧版机器人若未适配,会报 Bad Request: message not found。迁移时只需把代码里 limit=100 改 200,无需重新申请令牌。
FAQ:导出 CSV 常见 5 问
机器人能否导出已删除消息?
不能。消息一旦被管理员或用户删除,getUpdates 立即移除,后续导出将缺失该行。
CSV 出现乱码怎么办?
Excel 打开时选“数据→自文本→UTF-8 BOM”,或直接改用 Google Sheets 导入,编码选择 UTF-8。
可以设置自动每天导出吗?
可以。在机器人私聊发送 /schedule 1d,系统会按 UTC 零点触发;如需北京时间 8 点,加参数 --tz Asia/Shanghai。
导出会触发 Telegram 限流吗?
经验性观察:连续 10 次单群 1 万条导出后,getUpdates 延迟从 0.3 秒升至 2 秒,未封号;建议间隔 30 秒以上。
是否违反 Telegram ToS?
官方允许机器人读取已授权消息;但二次售卖用户数据会违反隐私政策。导出后请做脱敏与加密存储。
下一步行动清单
1. 用小群验证字段;2. 给机器人最小权限;3. 首次导出后立刻做脱敏;4. 把 JSON 原档存只读频道;5. 每月检查 Bot API 更新日志,及时适配新 limit。完成以上五步,你就能在 10 分钟内把任意 Telegram 群聊变成可直接透视的 CSV 数据表,后续无论是做词云、情感分析还是合规审计,都能一键对接 Excel 或 BI 工具。
