ZeroTier 的 Telegram 节点管理机器人,可以管理设备,监控节点的上下线、新设备接入并通知。
项目使用 Vercel 的 Serverless 功能作为后端、Firebase 的 Realtime Database 为数据库、UptimeRobot 做定时 API,通过 Telegram Bot API 交互。
数据库用于存储离线设备和新设备,避免重复通知。Serverless 没有定时功能,所以使用 UptimeRobot 的定时监控调用通知接口。
安全第一,所以配置比较繁琐。Firebase 的 Realtime Database 需要设定规则,当然,裸奔也可以,但是可能会被刷流量导致被 Firebase 处理。 因为接口路径是固定的,如果项目是开源的,那么可能会被人恶意调用。所以 Telegram Webhook 的接口有 IP 校验。 用于 UptimeRobot 调用的接口有 Token 校验。
同样的,Telegram Bot 也做了防护措施。在没有填入 Telegram ID 的情况下,任何人都可以使用 Bot,但是没有通知功能。 只有填入了 Telegram ID 的情况下,才有通知功能。因为 Bot 发送消息需要知道 Chat ID,而目前也不支持群组使用。
- Fork Repo
- 在 Vercel 中导入部署
在 ZeroTier 账号中心 的 API Access Tokens
点击 New Token
获取
在 ZeroTier Network 处复制 NETWORK ID
, 目前不支持多 NETWORK
管理,没账号测试,有需求的话请提供账号
在 Telegram BotFather 处获取
用于存储数据
- 在 Firebase Console 新建项目
- 新建
Realtime Database
复制数据库地址 - 设置规则,如下。使用随机串代替
X_SECRET
{
"rules":{
"X_SECRET":{
".read":true,
".write":true
}
}
}
- 根据
databaseURL+X_SECRET
拼接地址。例,地址为https://vervel-default-rtdb.firebaseio.com/
规则X_SECRET
为x2ox
,最后拼接为https://vervel-default-rtdb.firebaseio.com/x2ox
用于验证及通知。可以通过 Bot 的 /info
命令或其他方式获取
用于 UptimeRobot 自动检测状态,应当是一个随机串
在 Vercel 项目中配置环境变量
- 为项目绑定自定义域名,必须为单域名(Telegram 要求非通配符证书)
- 通过
curl -F "url=https://<DOMAIN>/api/zerotier" https://api.telegram.org/bot<YOURTOKEN>/setWebhook
设置
在 UptimeRobot 添加监控,DOMAIN
为配置的域名,TIMER_TOKEN
是环境变量中的随机串,最终地址为 https://<DOMAIN>/api/timer?token=<TIMER_TOKEN>
因为是临时写出来自己用的,代码并没有做什么组织,而这个项目也应当保持足够的小。所以,会有很多鼓励贡献的地方,也有不会被接受的地方。
- FRP API 接入,ZeroTier 没有 FRP 稳,双线应该就差不多了
- 多用户功能
- 会影响 API 调用的测试,Serverless 应当足够的快,且不应当滥用 Vercel
- 引入非常重、未经维护的库的代码
- 代码重构,提升可读性
- 注释
- 文档
- 翻译
- Vercel 提供的 Open Source 项目赞助
- JetBrains 提供的 Open Source Licenses
- ZeroTier
- Firebase
- UptimeRobot