Skip to main content
Glama
soulknight666

telegram-account-orchestrator

Telegram Account Orchestrator (TAO)

Telegram 分享建议使用固定预览入口:https://soulknight666.github.io/telegram-account-orchestrator/

Self-hosted Telegram multi-account management with Web UI, CLI, Bot, MCP, Telethon, and Telegram Desktop tdata import.

TAO is a Telegram account manager and orchestration toolkit for encrypted session storage, account health checks, controlled batch operations, device-session management, account-package processing, and automation through REST or MCP.

  • Interfaces: Web UI, REST API, CLI, Telegram Bot, MCP

  • Core: Telethon, FastAPI, encrypted SQLite-backed account storage

  • Import: StringSession, .session, Telegram Desktop tdata

  • License: MIT; GAFBot-derived code is documented in NOTICE.GAFBot and docs/THIRD_PARTY.md

中文说明

Telegram 账号管理器(自托管)

基于 Telethon(MTProto) 的多账号管理工具:加密保存会话、按账号绑定代理与设备指纹、健康检查、受控批量操作、审计日志。CLI + Web 控制台 + AI/Agent 控制层三入口。

Windows 提示「无法验证发布者」:从网上下载的 .bat 没有数字签名时的正常现象,点「运行」即可。也可先运行同目录 unblock.bat,或右键 start.bat → 属性 → 「解除锁定」。

Related MCP server: mcp-telegram

ZIP 工具(网页)

网页控制台「ZIP 工具」面板支持:

功能

说明

拆包

大号包按规则拆成小包

合并

多包合并,处理重名

按注册时间分类

默认离线分桶;可选联网查注册时间

转 API

上传 session/tdata ZIP → 重命名 session + api.json + 取码链接清单(对齐机器人能力)

转 API 相关环境变量:TAM_TOAPI_BASE(优先)、DMSERVER_IP/API_PORT

机器人侧同名能力见菜单「转 API」;号包引擎来自 GAFBot(MIT,见 NOTICE.GAFBot)。

致谢与第三方许可

机器人侧号包处理(tam/gaf/:筛活、转 API、拆包、防找回、整合等)移植自 GAFBot(作者 kugua311 / @kugua332334554), 采用 MIT License。完整版权声明与许可证原文见本仓库 NOTICE.GAFBot

按 MIT 条款:再分发时须保留上述版权与许可声明;本项目对 GAFBot 的修改与网页端适配由本仓库维护,与原作者无关。

快速开始

一键启动(推荐,新手选这个)

  • Windows:双击 start.bat

  • macOS / Linux:./start.sh

  • 或:python setup.py --auto

自动完成:检查 Python → 建 .venv → 装依赖(失败自动换清华镜像)→ 生成 .env 与主密钥 → 体检修复 → 按你的选择启动。

启动前只问两件事(写入 .env,下次会记住默认值):

  1. 部署在哪里? local 自己电脑(只监听 127.0.0.1)/ server 服务器(0.0.0.0,建议令牌+HTTPS)

  2. 用哪个前端? web 网页控制台 / bot Telegram 机器人 / both 两个一起

也可以不进菜单,直接指定:

./start.sh --deploy local --frontend web
./start.sh --deploy server --frontend both --token
  • 本机 + 网页:默认免令牌,浏览器打开即用。

  • 服务器:默认启用访问令牌。

  • 选了机器人但还没有 Token:会提示填一次 @BotFatherTAM_BOT_TOKEN(可回车跳过,稍后写 .env)。

  • api_id / 代理:一键模式不打断,需要时再写 .env 或网页参数面板(含批量并行 / 单号超时自动跳过 / 重生并行)。

  • 其它:--no-start--port 8848--skip-install--no-venv

手动安装

pip install -r requirements.txt
cp .env.example .env
python -m tam.cli init-key        # 生成 TAM_MASTER_KEY,写入 .env
# 在 my.telegram.org 申请 api_id / api_hash,填入 .env

python -m tam.cli add 主号 --phone +8613800138000 --proxy socks5://127.0.0.1:1080
python -m tam.cli login 1         # 验证码 + 两步验证密码
python -m tam.cli check           # 全部账号健康检查
python -m tam.cli serve           # http://127.0.0.1:8848 Web 控制台

一键体检(出任何问题先跑它)

python -m tam.cli doctor        # 只体检,不改任何东西
python -m tam.cli doctor --fix  # 体检并自动修复
python -m tam.cli doctor --json # 机器可读输出(给脚本 / Agent)

也可以在 Web 控制台右上角点“一键体检”按钮(等价于 doctor --fix)。 安装向导的第 5 步、以及 serve 启动前都会自动跑一遍(serve --no-doctor 可关闭)。

检查 13 项,带 ✓ 的都能自动修:

检查项

自动修复

Python 版本(含 3.13 兼容提醒)

核心依赖是否齐全

✓ 自动 pip 安装(官方源失败自动转清华镜像)

.env 是否存在

✓ 从 .env.example 生成

TAM_MASTER_KEY

✓ 自动生成并写入

TAM_WEB_TOKEN

✓ 自动生成并写入

配置能否加载(.env 格式、行内注释、空值)

会话加解密往返

数据库可读写 + 自动建表/迁移

✓ 建目录与表结构

api_id / api_hash 是否合法

—(未填只提醒)

Web 控制台文件完整性

API 能否导入、接口数

opentele(仅机器人侧部分旧链路可能用到)

✓ 可装;网页 tdata 导入已不依赖它

端口 8848 是否被占

卡商初始账号批量导入

支持 手机号|取码链接 行格式,例:

+10000000000|https://example.invalid/code/primary/GetHTML
+10000000001|https://example.invalid/code/secondary/GetHTML|美国号B
python -m tam.cli import-accounts accounts.txt --tags batch1 --dry-run   # 先预览
python -m tam.cli import-accounts accounts.txt --tags batch1
cat accounts.txt | python -m tam.cli import-accounts -                   # 也可走 stdin

python -m tam.cli auto-login --id 1            # 发码 → 自动拉取码 → 登录
python -m tam.cli auto-login --tag batch1      # 批量(默认串行 + 随机间隔)

容错与行为:

  • 分隔符支持 |\|、制表符、逗号、分号;两段顺序可以颠倒;手机号缺 + 自动补。

  • 第三段作为备注/别名;# 开头与空行忽略;单行出错不中断整批,错误行集中返回。

  • 幂等:手机号已存在只补写取码链接,不重复建号。

  • 取码:codefetch.py 只用标准库拉取该链接(支持代理),先记录发码前的旧码作基线,再轮询直到出现不同的新码(默认 120s 超时、5s 一次),避免拿错上一次的验证码。

  • 旧库自动迁移:启动时缺 code_url 列则自动补列。

  • 开了两步验证的号需传 --password(取码链接只能拿到短信码)。

导入 .session / StringSession

卡商号包常见形态是 Telethon 的 .session(SQLite)或 StringSession 字符串。Web 控制台点 「session 导入」,或用 CLI:

# 目录里一批 .session(默认递归)
python -m tam.cli import-sessions /path/to/sessions --tags batch --proxy socks5://127.0.0.1:1080
python -m tam.cli import-sessions /path/to/one.session --label 主号

# 文本文件,一行一个 StringSession;可用 别名|session
python -m tam.cli import-session-strings sessions.txt --tags ss
cat sessions.txt | python -m tam.cli import-session-strings -

行为:

  • 转 StringSession → 联网验证可用 → Fernet 加密入库;失效条目不留垃圾行。

  • 已存在相同 user_id 则合并更新会话,不重复建号。

  • 该能力只走人工入口(Web / CLI),不向 Agent 开放

  • Web 支持三种方式:本机上传 .session/zip、服务端路径、粘贴 StringSession。

API:POST /api/accounts/import-sessionsPOST /api/accounts/import-session-stringsPOST /api/accounts/import-session-upload

从 Telegram Desktop tdata 导入

tdata 是桌面端的本地加密目录(key_datas + D877F783D5D3EF8C* 分片),内含 auth_key / dc_id。 解析由内置纯 Python 解析器完成,无需 opentele;兼容 Telegram Desktop 6.x。

python -m tam.cli import-tdata /path/to/tdata --label 主号 --proxy socks5://127.0.0.1:1080
python -m tam.cli import-tdata /path/to/tdata --password 本地密码        # 桌面端设了 passcode
python -m tam.cli import-tdata /path/to/号包目录 --scan --tags tdata   # 批量扫描子目录

行为:

  • 转换链路:tdata → StringSession → 连接验证可用 → Fernet 加密入库;全程不落明文 .session 文件

  • 一份 tdata 含多个账号时逐个导入,别名自动加后缀;已有相同 user_id 则合并更新,不重复建号。

  • 会话失效的条目不会在库里留垃圾行,错误单独回报。

  • 默认使用桌面端官方 API 指纹 + UseCurrentSession(复用原授权,不额外产生新登录记录);加 --own-api 才改用自己的 API ID,风控更高,不推荐。

  • 导入后桌面端仍在线,两端共用同一授权;避免两边同时高频操作。

  • 该能力归入 HUMAN_ONLY不向 Agent 开放,只能人工走 CLI。

架构

tam/
├── config.py     环境配置(.env)
├── crypto.py     scrypt + Fernet:session 静态加密
├── db.py         SQLite:accounts / audit_log(含 code_url 取码链接)
├── importer.py   批量解析导入 手机号|取码链接 清单
├── codefetch.py  从取码链接抽取登录验证码(标准库,支持代理与轮询)
├── tdata.py / tdata_native.py   tdata 扫描与内置解析(无需 opentele)
├── ratelimit.py  令牌桶限速 + 人性化随机延迟
├── manager.py    Telethon 封装:登录、会话上下文、健康检查、批量调度
├── tools.py      AI 控制层:带 JSON Schema 的工具注册表 + 统一调用与安全策略
├── mcp_server.py MCP stdio 服务端(零依赖,供 Claude/Cursor 等接入)
├── api.py        FastAPI REST + Web 控制台
├── cli.py        命令行
└── web/index.html 单页控制台

关键设计

问题

方案

会话凭证泄露

只存 StringSession 密文;主密钥仅在环境变量,不入库

同账号并发冲突

每账号 asyncio.Lock,同一时刻仅一个活跃客户端

账号关联风险

每账号独立 socks5/http 代理 + 独立设备指纹(device_model / app_version / lang_code)

FloodWait / 限流

每账号令牌桶(默认 0.5 QPS)+ 批量动作 8–25 秒随机间隔 + 受控并发信号量

封号与失效感知

health_check 区分 active / restricted / unauthorized / banned / flood_wait 并落库

可追溯

所有写操作进 audit_log,Web 控制台可查看

REST 接口

所有 /api/*Authorization: Bearer <TAM_WEB_TOKEN>。若向导里选了“本机免令牌”(TAM_NO_AUTH=1TAM_WEB_TOKEN 为空),则不需要任何头部,直接访问即可。

方法

路径

说明

GET

/api/accounts

账号列表(不含会话)

POST

/api/accounts

新增账号

PATCH/DELETE

/api/accounts/{id}

修改 / 删除

POST

/api/accounts/{id}/login/code

发送验证码

POST

/api/accounts/{id}/login/verify

提交验证码(含两步验证)

POST

/api/accounts/{id}/session/import

导入已有 StringSession

POST

/api/accounts/{id}/check

健康检查

GET

/api/accounts/{id}/dialogs

会话列表

GET

/api/accounts/{id}/devices

已登录设备

POST

/api/accounts/{id}/devices/terminate

踢掉其他设备

POST

/api/accounts/{id}/message

发送消息

POST

/api/accounts/{id}/login/auto

自动取码登录(需 code_url)

POST

/api/accounts/import

批量导入 手机号|取码链接(支持 dry_run)

POST

/api/accounts/import-sessions

批量导入 .session 文件(服务端本地路径)

POST

/api/accounts/import-session-strings

批量导入 StringSession 文本

POST

/api/accounts/import-session-upload

浏览器上传 .session / zip(原始请求体)

POST

/api/accounts/import-tdata

从 tdata 目录导入(可递归扫描)

POST

/api/batch/check、/api/batch/message、/api/batch/auto-login

批量操作

GET

/api/logs、/api/stats

日志与统计

GET

/api/autokick

自动清设备的开关、周期、待处理数量

POST

/api/autokick/run

立即对到期账号扫一轮

GET

/api/tools

Agent 工具清单 + JSON Schema(接受只读令牌)

POST

/api/tools/call

统一工具调用入口(接受只读令牌)

GET

/api/settings

参数面板:21 项可调参数的当前值与说明

POST

/api/settings、/api/settings/reset

写回 .env(保留原有注释与行顺序)/ 恢复默认

GET

/api/toolbox/ops

工具箱的 10 项操作及其参数表(前端据此动态渲染)

POST

/api/toolbox/{op}/batch

对库里选中的号批量执行某项操作(严格保序返回)

POST

/api/tools/unpack/analyze

只看包里有多少个号,不落盘

POST

/api/tools/unpack?fmt=&workers=

拆包,-9-5,5,5

POST

/api/tools/merge/add?job=

分次上传要合并的包(攒到同一个作业,上限 50)

POST

/api/tools/merge/{job}/run?workers=

执行合并,同名自动改名不丢号,完事立即删源包

POST

/api/tools/regtime?workers=

按注册日期分类打包(默认完全离线)

GET

/api/tools/unpack/{job}/{filename}

取结果包(带鉴权,所以网页端是 fetch 成 blob 再保存)

DELETE

/api/tools/unpack/{job}

用完删除。号包是敏感物,不要赖在服务器上

给 AI / Agent 的控制手段

Agent 可调用能力注册在 tam/tools.py@tool)。网页「工具箱」另有一份注册表 tam/toolbox.py

增删工具时两边要同步: 只改 toolbox.py 则仅网页可用;只改 tools.py 则仅 AI/MCP 可用。需要对 AI 隐藏的能力不要写入 tools.py(或列入 HUMAN_ONLY)。详见 FOR_AI.md §8–§9。

入口

用法

MCP

python -m tam.cli mcp(stdio,实现 initialize / tools/list / tools/call)

CLI

python -m tam.cli toolspython -m tam.cli call send_message '{"account_id":1,"peer":"@me","text":"hi"}'

HTTP

GET /api/toolsPOST /api/tools/call

OpenAPI

/openapi.json/docs(全部 REST 路由自带 operation_id)

Python

from tam.tools import ToolContext, call_tool, list_tools

MCP 客户端配置示例:

{"mcpServers": {"tam": {"command": "python", "args": ["-m", "tam.mcp_server"], "cwd": "/path/to/tam"}}}

工具清单(danger 标注风险等级):

等级

工具

read

list_accounts、get_account、stats、read_logs、health_check、list_dialogs、list_devices、preview_import、spintax_preview、healthy_accounts、proxy_audit、autokick_status

write

add_account、update_account、import_accounts、spam_check

destructive

auto_login、send_message、update_profile、terminate_other_devices、delete_account、warmup、autokick_run

登录满 24 小时自动踢出其它设备

  • TAM_AUTO_KICK_HOURS=24 全局开关(0 = 关闭);账号级开关是 auto_kick 字段(Web 抽屉里的“自动清设备”勾选框)。

  • 计时起点是 本机接管时间 adopted_at(导入 tdata / StringSession / 验证码登录拿到会话那一刻),不是服务端的会话创建时间。

  • 踢完会回拉一次会话列表校验:只有确认“只剩本机”才算成功并重新起算周期;还剩会话或报错则排一个重试。

  • TAM_KICK_RETRY=1h 失败后的重试间隔,支持秒/分/时写法:45s10m2h1h30m,纯数字按秒,最小 10 秒。 也可以在 Web 顶栏“失败重试”输入框里改(存在数据库 settings 表,优先于 .env;留空保存即恢复默认), 或调 POST /api/autokick/retry {"value":"10m"}POST /api/autokick/run {"retry":"30s"} 只对本轮生效。

  • 服务启动后后台每 10 分钟扫一轮;计时基准 = kick_retry_at > last_kick_at > adopted_at > login_at > created_at,满 N 小时就调一次“踢掉其他设备”,并写 auto_kick 审计日志。

  • 为什么是 24 小时:Telegram 对新会话有 24 小时保护期,期内新会话无权注销其它会话,提前调只会报错。

  • banned / unauthorized / frozen / spam_block_perm 的号自动跳过;失败不再把周期推满一天,而是按 TAM_KICK_RETRY 排重试(默认 1 小时)。

  • 手动跑一轮:Web 顶部“立即执行”按钮,或 POST /api/autokick/run

约定:

  • 统一返回 {"ok": bool, "tool": str, "result" | "error": {...}},工具调用从不抛异常,错误码固定为 unknown_tool / bad_request / not_found / conflict / forbidden / readonly / error

  • destructive 工具不传 confirm: true 时只返回预览(executed: false),不产生任何对外副作用。

  • 参数用 JSON Schema 校验,未知参数与缺失必填参数直接拒绝,避免模型幻觉参数静默生效。

  • TAM_READONLY=1 或使用 TAM_READONLY_TOKEN 时,写入类工具从清单中消失并被拒绝——推荐给 Agent 单独发只读令牌。

  • TAM_DRY_RUN=1 全局干跑;TAM_PEER_ALLOWLIST 限定可发送对象。

  • 登录、导入/导出会话不对 Agent 开放,只能人工走 CLI/Web,防止凭证被模型读走。

  • CLI 全面非交互化:login --send-code / --code / --password / --non-interactivelist --json,失败退出码非零。

自检:for f in tests/test_*.py; do python3 "$f" || break; done;内核另有 python3 tam/tests/t_zhenghe.pyt_shaireg.pyt_zip_concurrency.pyt_coerce_setting.pyt_toolbox.py

免令牌模式(本机自用)

启动向导(start.bat / start.sh / python setup.py)会问一句:

? 启用访问令牌?(本机自用选 n)(Y/n)
  • n:写入 TAM_WEB_TOKEN= (空)+ TAM_NO_AUTH=1,浏览器打开 http://127.0.0.1:8848 直接可用,页面右上角令牌框留空。

  • y:没令牌就生成一个,已有则保持不变。

  • 不想被问:python setup.py --no-tokenpython setup.py --token

  • 一键体检会识别 TAM_NO_AUTH=1,不再把空令牌当错误自动生成。

服务默认只监听 127.0.0.1,外部连不进来;一旦改成 0.0.0.0 或放到服务器,必须重新启用令牌。

布局编辑模式(仪表盘式网格)

右上角点【编辑布局】进入,再点【完成】退出。布局引擎是二维网格矩阵(坐标 x/y + 跨度 w/h),与 Grafana、react-grid-layout 同类机制。

操作

效果

拖控件中间

自由移位;拖动时显示虚线落点框,撞到的控件会被推开,松手后整体向上收紧

拖右边缘

改宽,吸附到网格列

拖下边缘

改高,吸附到 40px 行

拖右下角

同时改宽高;双击该角恢复默认尺寸

点右上角 ×

隐藏控件,底部恢复条可加回来(带撤销)

一键整理

所有控件向上收紧,消除空隙

导出 / 导入布局

存为 tam-layout.json,可在其它电脑或浏览器导入

全部恢复默认

清空本地布局并刷新

说明:

  • 控件粒度:每个统计数字、自动清设备提示条、账号列表、日志中文摘要、日志原始 JSON 各是独立控件。

  • 响应式断点:宽屏 12 列 / 中屏 8 列 / 窄屏 4 列,三套布局分开保存,在手机上改动不会弄乱电脑上的布局。

  • 手机触屏:长按约 0.2 秒才起拖,快滑仍然是页面滚动;拖到屏幕上下边缘会自动滚动。

  • 性能:拖拽走 requestAnimationFrame + translate3d,实测单帧重算加渲染约 1.5ms。

  • 布局存在浏览器 localStorage['tam.layout'](v3),换浏览器用导出/导入搬迁。

安全与合规

  • 服务默认只监听 127.0.0.1;对外暴露必须加 HTTPS 反代与强令牌。

  • data/ 目录含加密会话,勿进版本库;建议整盘或目录级加密。

  • 主密钥丢失 = 所有会话不可恢复;请离线备份。

  • 仅用于管理你自己拥有的账号。群发、批量拉人、自动化骚扰违反 Telegram 服务条款,可能导致账号被限制或永久封禁;本项目默认参数偏保守,请勿调高。

常见问题

tdata 导入报 BaseException: err

完整报错形如 opentele/utils.py, line 121, in __new__ / raise BaseException("err"), 前面还会打印一行 [__firstlineno__] ...

原因:opentele 尚不支持 Python 3.13(上游 issue #133 / #145 至今未修)。 Python 3.13 给类新增了 __firstlineno__ / __static_attributes__,opentele 的 extend_class 校验不认,直接抛 BaseException(注意:它不是 Exception 子类, 常规 except 拦不住)。

最省事:python -m tam.cli doctor --fix,或在 Web 控制台点“一键体检”,会自动完成下面第 1 种修复。

手动方案二选一:

  1. 打兼容补丁(快,可回滚):

    python -m tam.cli fix-opentele          # 打补丁并验证导入
    python -m tam.cli fix-opentele --status # 只看状态
    python -m tam.cli fix-opentele --revert # 还原

    补丁只把那句断言性的 raise 改成放行,修改前会备份为 utils.py.tam-bak。 Web 控制台导入 tdata 时也会自动尝试这一步。

  2. 改用 Python 3.12 重建虚拟环境(最稳妥):

    rmdir /s /q .venv
    py -3.12 -m venv .venv
    .venv\Scripts\Activate.ps1
    pip install -r requirements.txt
    pip install -r requirements-optional.txt

导入报 {"detail":"unauthorized"} 或界面全是 401

Web 页面右上角的令牌要和 .env 里的 TAM_WEB_TOKEN 一致,输完按回车生效。

opentele 没装上

网页端 tdata 导入已改用内置解析器,不需要 openteleopentele 仅在机器人前端部分旧功能可能用到,是可选依赖:pip install -r requirements-optional.txt。 未安装不影响 Web 控制台与 CLI 的 tdata / session 导入。

已知限制

  • 官方客户端同时登录上限为 3 个账号(Premium 4 个),本工具用独立 API 会话不受该限制,但每次新增授权都会出现在“已登录设备”里。

  • 新号(尤其虚拟号)在冷却期内易触发 PeerFloodError,建议先养号:完善资料、正常收发、逐步提升活跃度。

  • 同一 IP 下多账号高频活动会显著提高关联与封禁概率,建议一号一代理。

任务中心 / 线索库(v1.8)

把“对一批目标逐个执行”变成可观测、可停止的任务,完整链路是: 采集目标 → 建任务 → 富文本群发 → 逐目标看进度和失败原因

最近发言人采集

  • WebUI 「任务中心 → 采集发言人」,填群组与天数。

  • 只取最近真实发过言的人,自动跳过机器人、已注销账号,减少对长期不活跃成员的无效触达。

  • 结果自动入线索库,按 (来源, user_id) 去重,重复采集只更新活跃度。

  • API:POST /api/tasks/collect

线索库

  • 按来源统计人数与有用户名比例,支持一键导出 CSV(带 BOM,Excel 直接打开不乱码)。

  • 可直接对某个来源“向它群发”,不用手工拷名单。

  • 采集时勾选「同时存对话记录」后,Web 上每条线索 / 每个来源可点 「对话」 查看发言上下文。

  • API:GET /api/leadsGET /api/leads/sourcesGET /api/leads/messagesDELETE /api/leads

富文本群发

  • 支持 {a|b} 变体(spintax)、{name} 个性化变量、HTML 富文本与可点击超链接、附件。

  • 多账号轮询发送,带随机间隔;发送前可用 POST /api/message/preview 看展开样本与链接。

  • API:POST /api/tasks/message

任务管理

  • 进度条 + 成功/失败/已跳过统计,运行中每 3 秒自动刷新。

  • “明细”看逐目标结果,失败原因自动归类(如 FloodWaitError 多少个)。

  • “停止”为协商式:不再发新内容,剩余目标标为已跳过,已发出的不会撤回。

  • API:GET /api/tasksGET /api/tasks/{id}POST /api/tasks/{id}/stopDELETE /api/tasks/{id}POST /api/tasks/cleanup

  • Agent 工具:list_tasksget_tasklist_leadslead_sources(只读)、stop_task(需 confirm)

常用环境变量(并发 / ZIP / 清设备)

写在 .env,也可在 Web 参数面板改完自动写回。启动时终端会打印当前 workers / 批量并发 / 清设备重试。

变量

默认

说明

TAM_WORKERS

4

ZIP 拆包 / 合并 / 注册时间分类的并发度,上限 32

TAM_TOAPI_BASE

(空)

网页/机器人转 API 的取码链接前缀,如 https://api.example.com

TAM_BATCH_CONCURRENCY

3

工具箱、批量任务同时开几个号;调大易触频控

TAM_MAX_EXTRACT_MB

512

解压后总大小上限,防 zip 炸弹

TAM_KICK_RETRY

1h

清设备失败后的重试间隔:45s / 10m / 2h / 1h30m

TAM_AUTO_KICK_HOURS

24

本机接管满多少小时自动踢其它设备;0 = 关

TAM_REGTIME_ENDPOINT

留空 = 注册时间分类完全离线,不外发任何号信息

完整列表见 .env.example

双部署 × 双前端(v1.9)

现在一个命令就能决定“装在哪”和“怎么用”:

python -m tam.cli run                      # 读 .env 里的 TAM_DEPLOY / TAM_FRONTEND
python -m tam.cli run --frontend both      # 临时覆盖:网页 + 机器人一起跑
python -m tam.cli run --deploy server --frontend bot
python -m tam.cli bot                      # 只跑机器人
python -m tam.cli serve                    # 只跑网页(老命令,没变)

两个开关

变量

取值

含义

TAM_DEPLOY

local

本机自用。只绑 127.0.0.1,不对外暴露,不强制代理

server

服务器。绑 0.0.0.0,启动前会检查 proxy.txtTAM_MASTER_KEY

TAM_FRONTEND

web

只开网页控制台

bot

只开 Telegram 机器人

both

两个一起跑,共用同一份 .env 与数据目录

命令行参数 > 环境变量 > 默认值(local + web)。

两个前端分工不同,不是同一套东西换皮

  • 网页控制台:管你自己托管在库里的号——登录、导入 tdata、养号、群发、线索库,以及接管满 24 小时自动清设备(带踢后校验与失败重试)。

  • Telegram 机器人:管用户临时上传的号包——发个 ZIP 进去,处理完回传,不入库。

网页控制台(近期能力)

  • AI 助手面板:右下角 / 顶栏唤出侧栏;OpenAI 兼容 API;权限预设(只读/安全/标准/完整)与逐项工具开关;账号范围限制;对话经服务端执行已授权工具。

  • 导入进度:session / tdata / 字符串导入使用 NDJSON 流式进度,界面显示当前序号与结果。

  • 二验:状态查询(含是否绑定辅助邮箱)、发起/取消官方 2FA 重置;支持单号与多选。

  • 导出 tdata:真 Desktop 目录;缺 opentele 时可在界面一键安装。

  • ZIP 工具:拆包、合并、注册时间、转 API、格式互转(session↔tdata)、Passkey 创建

  • 热重载:顶栏按钮真实重启后端进程(os.execv),不是刷新页面。

  • 错误日志:服务端异常 / 5xx / 前端报错写入 SQLite + data/errors.log,可导出 JSON 上报。

TAM_FRONTEND=both 时网页与机器人共享配置与数据目录,但 Telegram 账号库仅网页/API 使用;机器人仍以临时号包为主。

机器人功能(菜单、命令两种用法都行)

筛活 /shaihuo、改 2FA /twofa、整合号包 /merge、双向测试 /bidir、隐私配置 /privacy、 格式互转 /convert、转 API /toapi、防找回 /norecover、筛 BAN /ban、筛料 /material、 清理账号 /clean、拆包 /unpack、销毁会话 /destroy、Passkey /passkey、注册时间 /regtime。 辅助:/start /help /status /id;管理员:/vip ID/unvip ID/gb(广播)。

故意没做的三项:踢设备、账号登录、在线取码——TAM 自己已经有更好的实现(带校验、带重试、 会话加密入库),机器人里的 /kick/login 只负责把你引到那边,不重复造一份。

付费 / VIP

OKPAY_COST 留空就是不收费,任何人进来直接是 VIP(自用场景默认这样)。 填了 OKPAY_ID / OKPAY_TOKEN / OKPAY_COST 才会开付费门槛:下单后每 5 秒轮询,5 分钟不付自动关单, 付成自动升 VIP。管理员任何时候可以 /vip ID 手动开。

服务器部署提醒

--deploy server 会绑 0.0.0.0。请务必:别开 TAM_NO_AUTH=1、设好 TAM_WEB_TOKEN、 前面搭一层 HTTPS 反代、proxy.txt 配上代理池(否则所有号走服务器裸 IP,风控风险很高)。 启动时这几项没配好会直接在终端警告。

启动前体检(该提醒的都写在启动输出里)

python -m tam.cli run 会先把当前配置扫一遍,直接打在终端上,不用去翻文档:

----------------------------------------------------
  启动前体检(部署=server  前端=bot)
----------------------------------------------------
  ❌  机器人前端的依赖没装齐:python-telegram-bot[job-queue]、opentele
       → pip install -r requirements.txt
       → 只想用网页的话这些不用装,把 TAM_FRONTEND 改成 web 即可
  ❌  服务器模式未设 TAM_WEB_TOKEN,控制台会没有访问门槛。
       → python -m tam.cli init-key 生成一个填进 .env
  ⚠️  服务器模式会监听 0.0.0.0(全网可达),请在前面套一层 HTTPS 反代。
  ⚠️  没找到 proxy.txt,所有号会走服务器裸 IP,风控风险很高。
----------------------------------------------------
  • ❌ 致命错误会直接阻断启动(缺依赖、缺 Token、服务器模式下 TAM_NO_AUTH=1 或没 TAM_WEB_TOKEN), 真知道自己在干什么可以加 --force 继续。

  • ⚠️ 警告只提醒不拦(没代理池、没管理员 ID、没配付费等于白嫖、密钥落盘……)。

  • 依赖按前端分开查:只跑网页不会因为没装 python-telegram-bot 而报错,反之亦然。

  • TAM_MASTER_KEY 这类问题也会输出一行人话提示,而不是抛一屏 traceback。

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for communication service connectors that currently provides multi-account Telegram integration with granular tool access and security controls. It allows AI models to manage messages, chats, and media across various accounts through a flexible, extensible routing architecture.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that connects AI assistants to your real Telegram account via User API (MTProto). Features default-deny ACL with per-chat permissions, message search, file sending, forwarding, media downloads, and rate limiting.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A safe-by-default MCP server for real Telegram accounts powered by TDLib, enabling AI agents to read and act on your account with read-only mode and human approval for destructive actions.
    7
    Apache 2.0