ARTICLE · 1309644
低成本自建群聊活码工具,结尾附AI提示词,WorkBuddy可用,一次搭建永不过期
低成本自建群聊活码工具,结尾附AI提示词,WorkBuddy可用,一次搭建永不过期
分享背后的故事 上上周末作为展方参加观猹大会,考虑到现场一定会遇到对我们产品感兴趣的用户,为了能够持续与用户有一个持续沟通对话的渠道,我们创建了一个微信用户群。 但是微信群聊有200人的人数有上限,为了避免在现场群满了导致大家进群失败,我们得提前想一种方案。 最简单的方案是提前创建几个群,然后把每个群二维码都打印出来,群满之后手动替换展示的二维码。 但是这个方案很不优雅,一方面需要多次打印,另一方面需要自己盯着群聊人数更换二维码,有没有更好的解决方案。 其实这个问题早已经有产品在解决了,解决思路大致如下。 正常情况下我们扫码相当于两个人直接对话,现在我们增加了一个中间人,每次对话都通过中间人传话,只要保持中间人不变,我们始终都和中间人直接对话。 不论另一个人如何变化,只需要中间人知道即可,我们完全不需要感知。 上面的思路,对应在群二维码的场景里,即创建一个固定的二维码,对外打印张贴这个二维码,用户每次扫码,都会请求固定的地址,即我们的服务器提供的页面,这个页面会加载展示当前还没有满员的二维码,用户再长按扫描这个二维码,即可看到真正的微信群加入按钮。 整体思路了解之后,我们可以借助AI快速开发这样的一套工具。 先说一下我的技术选型,我选择的是Cloudflare。 这是一个对于普通开发者非常友好的云服务平台,它为普通用户提供了可观的免费额度,我们可以用来免费部署网页、部署接收网络请求的服务代码、存储图像等。 更重要的是,部署代码之后,它会分配给我们一个公开可以访问的域名。 一方面其他人可以通过这个域名访问获取到真正的群聊图片,另一方面我们可以通过手机访问这个域名进行群聊图片管理。 此外,Cloudflare也提供了类似飞书cli一样的命令行工具,我们的编程智能体通过这个命令行工具,可以非常方便地远程操作,上传代码,上传群聊二维码,省去我们自己在浏览器打开页面、上传发布的繁琐过程。 因此在这个过程中,我们基本只需要在智能体里通过对话的方式描述即可,AI就可以自己搭建出这样的一套系统。 搭建这样一套系统,除了能够拥有群聊活码,借助Cloudflare自带的访问次数记录能力,我们还能够拿到大致有多少人扫码、最终有多少人进群等数据。 具体实现时,通过设置一个合理的比例,扫码特定次数后,这个系统可以自动更换新的群聊二维码,保证任何时间用户扫码都能够成功进群。 实际使用过程中遇到一个问题,发现用户扫码后群聊二维码加载很慢,这主要是因为扫码后在加载原始的微信群聊二维码,其实这里可以直接在上传的时候提取二维码信息,然后转换成加载二维码数据绘制,整个过程会快很多。 更进一步,我们在设计的时候,可以把地址设计成类似 /group/{groupName} 的格式,groupName是灵活的,每一个groupName都可以对应一个扫码场景,这样可以做到一劳永逸,不仅自己用,还可以分享给周围的同事。 最后也要提醒,毕竟是借助免费的平台,当太多人同时扫码,因为平台资源有限,可能会存在响应失败超时,但是了解整体思路后,我们也可以搭建部署到自己的服务器。 详细提示词 ⬇️

请作为能创建文件、运行命令和部署服务的全栈 Agent,帮我从零搭建并交付一个「群聊活码」程序。不要只给方案或代码片段,要创建可运行工程、完成本地验证,并在我自己的 Cloudflare 账号部署。这个提示词已包含完整需求,不依赖任何现成 Skill、作者源码、私人账号或域名。一、要解决的问题我希望对外分享一个固定网址,以及指向该网址的固定二维码。群聊满员、二维码过期或需要换群时,只在管理后台更新内部群码,不需要重印海报或重新分发入口。名称使用「群聊活码」,不绑定某个聊天平台。二、核心链路:图片仅供本机识别,传输与存储只用文本完整链路必须是:管理员选择二维码图片→ 浏览器本地解码→ 提取原始二维码文本→ 本地重绘二维码→ 再次解码核对一致→ 通过 JSON 只提交 qrText 和管理字段→ 服务端只存文本→ 访客访问固定入口→ 获取 qrText→ 在访客浏览器重绘二维码。具体要求:1. 不把原始图片、压缩图片、Base64、Data URL、Blob或预览图上传或存入服务器、数据库、R2、日志或统计系统。不使用远程二维码识别服务、远程二维码生成接口或公共CDN。2. 图片只在浏览器内存中处理,用完释放Object URL,不持久化图片。支持PNG/JPG/WebP,单张最多8MB、2400万像素。允许批量选择,每张独立识别。3. 本地打包jsQR作标准二维码解码,qrcode作重绘;如果选择其他库,应提供同等的本地处理、许可证和往返验证能力。不能只依赖兼容性有限的BarcodeDetector。4. 支持可无损转换为UTF-8文本的标准二维码。保留原始空格、Unicode、大小写、百分号转义、加号、查询参数与签名;不要trim、decodeURIComponent、URL重排或规范化负载。文本上限2000 UTF-8字节,不按字符数判断;拒绝无法无损表达的负载。5. 单张图片只允许一个可识别的二维码;检测到多个码时明确提示重新选择。无法识别、专有平台码、非UTF-8内容或往返校验不一致时,不上传、不保存,不回退到存图片。6. 重绘使用黑码白底、至少4模块净空、M级纠错、足够分辨率,不遮挡、不拉伸、不嵌装饰logo。图案可以与原图不同,但再次解码出的文本及UTF-8字节必须一致。7. 后台显示本地重绘预览、原图体积与文本字节数,明确「原图不上传,尚未保存」。预览Data URL仅限本机展示,不进入保存请求。8. 服务端独立校验qrText非空、UTF-8字节长度、字符可无损表达,并拒绝image、preview、dataUrl、base64、blob等图片字段与data:image负载。不能只在前端口头保证。9. 访客接口只返回qrText、群名称、失效时间等展示信息,不返回图片。访客浏览器本地生成二维码,支持目标平台可用的识别或保存方式;不宣称所有平台都支持长按或直接打开。10. 文本重绘降低图片传输与存储,但识别、渲染JS本身仍需首次加载,不能宣传完全无网络开销。三、后台与轮换功能1. 一个固定公开入口及一个受保护的管理后台,入口内支持多张候选群码,最多30条。2. 每条记录包含:id、title、qrText、priority、capacity、warnAt、expiresAt、enabled、hits、createdAt、updatedAt。记录由后台维护,无需改代码和重新部署即可换码、启停或调整顺序。3. 默认capacity=150、warnAt=120,只是可修改的业务起步参数,不是某个平台的群人数规则。群已有成员时应按剩余承接能力人工设置更小阈值。4. 自动模式:按排序选择启用、未过期、未达展示上限的码;达到上限后新访客切到下一张;全部耗尽后显示暂无可用码,不绕回满额或失效码。5. 手动模式:达到阈值只在后台提醒,管理员核对后停用旧码或换码,不自动停止当前码。6. 提醒包括接近上限、已达上限、24小时内到期和已过期。本版提醒仅在后台显示,不虚构邮件、短信或平台推送。7. 统计口径是「访客点击显示群码后成功分配次数」,不是网页访问量、真实扫码量、独立用户、群成员数或入群人数。系统不能读取群人数、建群、自动拉人或延长原平台群码有效期。8. 同浏览器使用随机访问标识,10分钟内重复获取同一张仍有效且启用的码不重复计数。达到展示上限只停止新分配,已分配访客在短期内可重取;停用或过期后不能继续返回。9. 同群续期默认保留次数;换成不同新群才由管理员明确选择重置次数,重置时清掉相关短期分配记录。批量保存部分失败时报告成功数量,不能提示整批成功。四、技术架构使用Cloudflare Workers + Workers Static Assets + SQLite-backed Durable Object。前端可以用原生HTML/CSS/JS,保持依赖简单。不要用KV的最终一致性计数代替强一致分配上限。选码、累加计数和写入短期分配必须在DO中原子、事务完成,避免并发超额。建议文件结构:public/index.htmlpublic/admin.htmlpublic/join.jspublic/admin.jspublic/style.cssclient/qr-reader.jsclient/qr-render.jssrc/index.jssrc/core.jsscripts/build-qr.cjsscripts/entry-qr.mjsscripts/smoke.mjstest/package.jsonpackage-lock.jsonwrangler.jsonc.gitignore运行说明识别与渲染库在构建时打包到本站静态目录,附许可证。dev、check、deploy前自动构建,部署后的浏览器不去CDN找依赖。新项目数据库只存文本及必要元数据,不需要图片桶。建议codes、settings、visits三张表。SQL值使用参数绑定。管理JSON请求建议限制16KB。五、页面与接口公开页:说明下一步,点击「显示群二维码」后发起POST /api/visit,提交随机token;拿到JSON后本地重绘,显示群名称、有效期与目标平台识别说明。失败、无可用码时有明确状态,渲染失败能重试。后台/admin:用管理密钥登录;查看记录、次数、策略、阈值和到期提醒;选择图片后立即本地解码与往返校验,通过后才能保存;支持多选、编辑换码、启停、排序和策略切换。API可采用GET/POST /api/admin;保存只提交action、qrText和元数据。没有认证的管理访问返回401,访客不能调用管理操作。二维码内容是不可信文本:使用textContent,不拼innerHTML、不执行脚本、不自动跳转二维码内的任意URL,服务器也不抓取其链接。六、认证与安全管理端使用随机至少24字符的ADMIN_TOKEN。密钥只在当前页面内存保存,刷新或退出需重新输入;不写入URL、前端源码、本地长期存储、截图或交付文档。使用Authorization: Bearer,服务端按安全方式比较。本地通过被git忽略的.dev.vars配置;线上使用Cloudflare Secret。POST写入校验同源Origin,设置合适的CSP、Referrer-Policy、nosniff等响应头;页面和API使用no-store避免旧码缓存。可观测性日志与traces不得记录管理密钥、二维码完整负载或完整请求体。本版不默认接入付费服务。不要承诺无限免费、无限流量或绝对防刷;高曝光时再评估限流等需求。七、创建工程并本地跑通1. 检查当前目录、是否已有项目与Cloudflare配置,不覆盖已有工程。无关细节用合理默认值;缺少账号、目标目录等关键信息时一次问清。2. 本项目使用Wrangler。创建wrangler.jsonc、SQLite DO绑定、new_sqlite_classes迁移和Static Assets绑定。读取官方文档和所安装版本的帮助、schema;锁定依赖并保存package-lock.json。已有迁移tag不随意修改或重写。3. 兼容日期应与安装的Wrangler/workerd支持范围一致。不要只写今天日期,却使用不支持该日期的旧运行时;若需升级,说明并配套验证。已有部署维持已验证日期,避免无关升级。4. 提供并运行:npm cinpm testnpm run checknpm run devcheck执行部署dry-run,不触碰线上数据。先在隔离本地数据库验证空状态、上传识别、文本保存和轮换。5. 安全生成本地管理密钥,不回显;告诉我如何在自己机器查看或更换,不要求我在聊天里粘贴。八、部署到我自己的Cloudflare账号这条指令授权你为本项目创建并部署到我登录的Cloudflare免费账号。同名已有服务替换、付费开通、买域名或破坏性数据修改,另行征求我的明确决定。1. 没有账号时,引导我到https://dash.cloudflare.com/sign-up自行注册、完成验证码及条款。CLI登录不代替注册,不索取密码。2. 执行npx wrangler login和npx wrangler whoami,核对账号。需要我交互登录时给出清楚步骤,其余继续推进。3. 使用SQLite Durable Object和Static Assets,优先Workers Free、workers.dev子域名;部署前核对最新免费额度及当前账号支持情况,不自动启用Paid。4. 用npx wrangler secret put ADMIN_TOKEN的交互或安全本地输入设置线上密钥,不把值放进命令参数或聊天。按CLI实际要求完成首次Worker创建、Secret绑定和部署,不假装某条命令在所有版本都能先后通用。5. 检查后执行npm run deploy,拿到实际workers.dev地址。可选绑定我已有的Cloudflare域名;先确认不会覆盖既有服务,不自动购买或转移域名。6. 最终入口确认后,用程序生成指向这个固定网址的入口PNG,至少4模块净空、足够清晰。它编码的是固定入口,不是会过期的某一张群码。7. 在线上传正式码前先用测试码验证,不批量消耗正式计数。让我用目标平台真机识别;本机解码通过不能代替实际进群验证。实施时核对官方资料,不凭记忆假定CLI顺序和免费额度:https://developers.cloudflare.com/workers/wrangler/https://developers.cloudflare.com/workers/static-assets/https://developers.cloudflare.com/durable-objects/platform/pricing/https://developers.cloudflare.com/workers/configuration/secrets/九、升级已有图片版时先读取并备份现有配置与数据,保留Worker名称、域名、旧链接、绑定、ID、次数、顺序、到期时间和迁移历史。不要直接删库、换命名空间或批量清零。在副本或测试环境,把旧图本地解码、重绘并校验后迁移为qrText;仅迁移成功才移除对应旧图片。失败记录明确列出,不伪造成功。新版公开接口不再传图片。迁移和回归通过后再切换流量,避免未迁移记录突然不可用。代码回滚不等于数据库回滚。新写入始终禁止图片路径。十、必须完成的验证- 单码图片本地识别→文本→重绘→再次解码一致;测试URL签名、%转义、空格与Unicode。- 实际检查浏览器保存请求,确认没有图片、Base64、预览图。- 直接向服务端发送图片字段须拒绝,数据库没有新原图。- 空文本、超过2000 UTF-8字节、非标准码、多码图、非UTF-8负载和重绘失败不能保存。- 访客JSON只含文本与必要字段,前端能正常重绘;公众页面不能泄露ADMIN_TOKEN。- 未认证401、跨站写入拒绝、恶意HTML不执行、未知接口正确返回。- 两张测试码使用小阈值,验证并发分配不超限、自动切换、全部耗尽、停用、过期和手动模式。- 同token重取不重复计数;重置次数时对应缓存清除。- 在弱网和目标手机验证加载、识别与进入群聊。- 本地测试只用隔离数据。线上低影响验证,不清空或批量消耗真实计数。无法实际验证的项目应明确说明,不把构建成功说成真机全部通过。十一、最终交付交付:完整工程目录;运行与部署命令;固定入口网址;后台网址;入口二维码PNG;换码、排序、阈值、到期和启停方法;管理密钥的安全查看或重设办法;已验证和未验证项目。运行说明要写清:后续换码只改后台,不需要重印固定入口或重新部署。不要夹带开发者个人信息、真实密钥、私人域名、用户数据或无关市场说明。请现在开始实施,遇到需要我交互登录或确认真实资源的步骤再明确提示,不要停在计划书。















































































