Skip to content

账号登录与目的地绑定(含子 Topic 详解) ​

本篇手册详细介绍如何安全登录个人读取号(/login)、如何绑定 Telegram 群组/频道以及特定的子 Topic(话题)、如何配置本地 NAS 与 WebDAV 目的地,以及如何处理超过 2GB 的超大文件。


1. 登录个人读取账号(/login) ​

Telegram 官方限制 Bot 无法通过私密邀请链接进群,也无法读取非自己管理的私密频道或开启了「禁止转发(noforwards)」的群组内容。通过登录一个你自己的个人号作为 读取账号(Reader),凡是你个人号能看到的群组/频道,TG Migrator 都能帮你搬运出来。

手把手登录步骤 ​

  1. 在与 Bot 的私聊界面点击 🔑 账号(或发送 /login)。
  2. 点击 📱 开始登录,发送带国际区号的手机号(例如 +8613800138000 或 +12025550123)。
  3. Telegram 官方客户端会收到 5 位数字登录验证码。

    务必使用面板上的数字键盘点击输入!

    切勿在 Telegram 聊天框里直接打字发送这串验证码!只要验证码作为普通消息发进 Telegram 聊天,Telegram 官方风控就会立刻判定验证码泄露并使其作废。请务必通过点击 Bot 消息下方的内联数字按钮输入,输完点 ✔️ 提交。

  4. 若开启了两步验证密码(2FA): 直接在聊天框发送你的两步验证密码(Bot 收到后会立即删除该消息)。

    密码含有 `_`、`*`、`~` 或 `||`?请用反引号包裹!

    Telegram 客户端会自动将成对的 _(斜体)、*(粗体)、~(删除线)、||(剧透)解析为富文本格式并吞掉符号本身。 如果你的密码包含这些特殊符号,请用英文单反引号包裹发送:

    text
    `my_s3cret_p*ssw0rd`

    如果不小心直接发送导致符号被 Telegram 吞掉,Bot 会自动检测出富文本实体、拒绝错误密码,并提示你用反引号重发。


2. 绑定 Telegram 目的地(群组、频道与子 Topic) ​

TG Migrator 支持将消息投递到:

  • 普通群组与超级群组
  • 广播频道(Channel)
  • 开启了话题(Forum Topics)群组中的 指定子 Topic

场景 A:绑定普通群组或主话题(General) ​

  1. 将你的 Bot 拉入目标群组,并授予发消息权限。
  2. 直接在群内(或默认的 General 主话题内)发送 /bind。
  3. Bot 会自动删掉 /bind 指令,并在私聊通知你: 🎯 已绑定为目的地 #1 我的归档群

场景 B:绑定群组内的「指定子 Topic」(高频重点!) ​

很多用户发现直接在群里发 /bind 后,消息全都发到了主话题(General)里。这是因为 「在哪个话题里发送 /bind,就会绑定哪个话题」:

  1. 打开你开启了 Topics 功能的目标群组,先点击进入你想作为目的地的那个子 Topic(子话题)内部(注意不要停留在 # General 主话题)。
  2. 在该子 Topic 的聊天输入框里发送:
    text
    /bind
  3. Bot 会自动从该消息的头部提取该子话题的 topic_id,并为你创建一个专属该子话题的目的地: 🎯 已绑定为目的地 #2 我的归档群_t128 (我的归档群 · Topic 128)

同一个群组可以绑定多个子 Topic!

你可以依次点进同一个群的 5 个不同子话题分别发送 /bind,系统会生成 5 个相互独立的目的地(如 归档群_t10、归档群_t25 等)。这样你就可以把不同来源频道的内容,分门别类地搬运到同一个群组的不同子 Topic 中!

场景 C:在私聊中用 /add_tg 手动指定子 Topic ID ​

如果你不想进群发 /bind,也可以在和 Bot 的私聊窗口直接通过命令添加子 Topic:

  1. 在目标子话题里随便找一条消息,右键(或长按)选择 复制消息链接(Copy Message Link)。
  2. 子话题的消息链接格式通常为: https://t.me/c/1234567890/128/456
    • 1234567890 → 对应群组 ID -1001234567890
    • 128 → 中间这个数字就是该子话题的 Topic ID
    • 456 → 单条消息 ID
  3. 在与 Bot 的私聊窗口发送:
    text
    /add_tg -1001234567890 128
    即可直接将该子话题添加为目的地。

场景 D:绑定广播频道或以「匿名管理员」身份绑定 ​

在广播频道(或你开启了群组匿名管理员隐身)中发消息时,Telegram 不会附带你的个人 sender_id。此时请使用一次性绑定码:

  1. 先在与 Bot 的私聊窗口发送 /bind;
  2. Bot 会返回一个 10 分钟内有效的一次性绑定指令,例如: • 频道或匿名管理员:在其中发送 /bind 839201(10 分钟内有效)
  3. 复制 /bind 839201 发送到目标频道或群组内即可完成绑定。

3. 绑定本地 NAS 目录(/add_local) ​

本地目的地会将媒体文件和可选的元数据伴生文件保存在容器内 /app/archive(对应宿主机 ./archive 或你挂载的 NAS 路径)下。

  1. 进入 🎯 目的地 → 点击 ➕ 本地(或发送 /add_local)。
  2. 输入目的地名称(例如 nas_video)。
  3. 输入 ARCHIVE_ROOT 下的相对子目录名(如 telegram/videos),或发送 - 直接存放在 /app/archive 根目录。
  4. 落盘目录结构会自动按源会话和月份归档: <ARCHIVE_ROOT>/<子目录>/<源频道名称>/<YYYY-MM>/<消息ID>_<原始文件名>

元数据伴生文件(archive.sidecar_format) ​

每条归档消息旁边可以自动生成记录完整正文、原始时间、发送者与源链接的元数据文件:

  • json(默认):标准 JSON 结构化元数据
  • md:适合用 Obsidian / Logseq 浏览的 .md 笔记
  • both:同时生成 .json 和 .md
  • none:仅保存媒体文件本身

随时可通过 /set archive.sidecar_format md 切换。


4. 绑定 WebDAV 服务器(/add_webdav) ​

完美兼容 AList、OpenList、Nextcloud、ownCloud、群晖 WebDAV Server 以及 rclone serve webdav。

  1. 进入 🎯 目的地 → 点击 ➕ WebDAV(或发送 /add_webdav)。
  2. 按向导提示依次输入:
    • 目的地名称:如 alist_backup
    • WebDAV 地址:支持公网 https://... 以及内网/容器网 http://...(如 http://alist:5244/dav)。

      内网地址自动绕过代理(LAN Bypass)

      即使你在 .env 中配置了全局 PROXY_URL,任何指向内网 IP(127.0.0.1、192.168.x.x、10.x.x.x、100.64.x.x Tailscale)以及 Docker 内部服务名(如 http://alist:5244)的请求都会自动直连,不经过代理。

    • 用户名:WebDAV 用户名(匿名填 -)。
    • 密码:WebDAV 密码(落库前自动使用 Fernet AES-128 加密存储;若含 _、*、~ 请用反引号 `密码` 包裹发送)。
    • 服务器子目录:如 OneDrive/TG归档(不存在时会自动逐级创建目录)。

自动模式(auto)、落盘模式(spool)与零磁盘流式直传(stream) ​

通过 archive.webdav_mode 控制:

  • auto(默认):磁盘空间充足时先落盘再上传,空间紧张时自动切换流式。
  • spool(落盘上传):先下载到临时目录 downloads/active 再上传到 WebDAV,网络波动时最稳。
  • stream(流式直传):从 Telegram 边拉取分片边通过 HTTP PUT 流式写入 WebDAV,全程零磁盘占用,非常适合小硬盘 VPS(通过 /set archive.webdav_mode stream 开启)。

5. 超大文件(> 2GB / 4GB)自动兜底策略 ​

Telegram 普通账号与 Bot 单文件上传上限为 2,000 MiB(约 2GB),Telegram Premium 会员账号上限为 4,000 MiB(约 4GB)。当源频道存在超过上限的大文件时,有两种处理方式:

  1. 配置超限备用目的地(推荐): 进入 🎯 目的地 → 点击你的 Telegram 目的地 → 点击 🗄 设置超限备用 → 选择一个本地目录或 WebDAV 目的地。这样小于 2GB 的文件照常发往 Telegram 群,超过 2GB 的文件会自动改存到你的 NAS 或 WebDAV,绝不漏存!
  2. 启用 Premium 读取号兜底上传: 如果你登录的读取号开通了 Telegram Premium 会员,且该个人号也在目标群组中有发言权限,只需执行:
    text
    /set transfer.allow_premium_user_fallback true
    遇到 2GB ~ 4GB 之间的文件时,系统会自动临时切换为你的 Premium 个人号完成上传。

基于 AGPL-3.0 协议开源发布。