部署在Cloudflare worker的电报入群验证机器人 用Turnstile作人机验证

前言

前面展示了muse破Turnstile人机验证. 

我在其它群也见识过一天到晚很多广告机器人都过了nmbot的Turnstile人机验证加群.

我在想自己的群试一下发广告的人能不能解决Turnstile人机验证.
* 我是不在自己的群使用别人部署的群管机器人的.

那么就自己开发一个 Turnstile作人机验证 的电报入群验证机器人 


面向Agent开发

Hermes 对接 白嫖agentrouter的deepseek-v4-flash

整个过程不是 one-shot, 所以我就记录一些重要的开发思路.

基于 Cloudflare worker, 不使用KV.
对于cloudflare免费计划友好, 对于没有自己VPS的小电报群主友好.
* 如果使用量变大, 或者想商用, 可以给cloudflare加线, 也可以用Wrangler环境在自己的VPS上运行.

一套系统支持管理多个群. 每个群的封禁 解禁是独立的.

封禁和解禁分成2个worker.
如果使用量变大, 你可以把worker部署在不同的cloudflare账户来"扩容".
你也可以分别部署在2个VPS上.
封禁的worker的url是被telegram服务器主动调用, url不会被用户知道.
解禁是用户主动访问worker的url, 是公开信息, 为了不被洪水攻击耗光worker额度, 需要给这个url开CloudFlare的5秒盾.
* 对于现在Agent应用的时代, 多个worker带来的文件增加和部署步骤增加不是问题, 反正是Agent照着文档部署, 不是人操作的.

工作流程:
1. 新成员加入群组,
2. worker-a操作bot-admin禁言新成员, 发一条人机验证链接 的群消息. 该链接指向 worker-b, 该链接携带用户id user_id, 群组id chat_id 信息
3. 用户通过人机验证链接访问worker-b
4. worker-b调用Turnstile作人机验证
5. 在用户通过人机验证后, worker-b根据链接中携带的 用户id user_id, 群组id chat_id 信息, 操作 bot-admin 解禁该成员.

一些细节要求:
步骤2 的消息为 Ephemeral Messages (仅指定用户可见), 不干扰群组中的其它成员.
步骤4 的人机验证流程中, 还要进行 telegram登录步骤, 以确认 验证人机的操作者 同时控制被禁言的telegram账户. 避免人机验证链接被分发给"不明真相"的路人.

异常处理:
有工作群组白名单列表, 如果worker-a收到telegram服务器推过来的消息, 发现群组chat_id不在白名单里面, 那么bot退群.


实际效果

新用户加群, 收到仅该用户可见的提醒消息

用浏览器打开链接, 分别经过 5秒盾, Turnstile人机验证 和 登录Telegram


Github

https://github.com/crazypeace/tg-join-group-exam-bot-worker-turnstile


让Agent写了个部署说明

https://github.com/crazypeace/tg-join-group-exam-bot-worker-turnstile/blob/main/DEPLOY.md


后记

本来是Hermes 对接 Nous Portal 官方提供的免费模型 stealth/space-bunny-alpha 的

结果做着做着, 发现 space-bunny-alpha 好像降智了.

分析个问题嘛, 扯东扯西. 开发个功能嘛, 说我的设计有问题, 不按我的要求来.

我的感觉像是, reasoning推理 的部分对最终的结果产生了过大的影响.

换 白嫖agentrouter的deepseek-v4-flash 就好了.


评论