个人网站加入工单
用途
为一个「人」做一页商务风个人主页(数字名片 / 顾问主页 / 服务落地页),并在页面里加
需求收集入口,让访客留下姓名、电话、公司、需求;信息可定时汇总发到主人邮箱。
成品是一个 https://xxx.app.workbuddy.host/ 的公开链接,手机电脑都能打开,
不用买服务器和域名。
何时使用
- 用户要「做个个人网站 / 数字名片 / 个人主页」并且要能收客户信息
- 用户说「加个工单」「留个表单」「收集姓名电话」「每天发我邮箱」
- 需要的是单页站点(不是博客、不是电商)
⚠️ 先读这段:微信访问的实测结论(决定方案选型)
这一条能省两小时,动手前先判断用户的主要分发渠道:
| 入口 | 微信内置浏览器 | 内容是否最新 |
|---|---|---|
直链 https://xxx.app.workbuddy.host/ |
❌ 403 被拦,提示"用浏览器打开" | ✅ 最新 |
短链 https://www.workbuddy.link/p/xxx(客户端「复制链接」给的) |
✅ 能打开 | ❌ 永久停在首次发布的旧快照 |
原因:短链壳页指向 workbuddy-space-static.codebuddy.work/page/<id>/<版本>/ 静态快照,
永久绑定首次发布版本(publishVersion=1),重新部署不会更新。
还有一条必须提前告诉用户,否则会被反复追问:微信的外链风控是「动态」的。
用户最常见的疑惑是——"为什么刚开始在微信里能直接打开,后来就提示跳转浏览器了?"
因为微信对非白名单域名是先放行、后判定:陌生域名首次访问时安全检测还没给它打标,
通常能内嵌打开;等被抓取检测、被多次转发传播、或被举报,就转为「需跳转浏览器」。
另外 workbuddy 系是平台共享子域,信誉是所有用户共用的,别人被举报会连累整域。
实测佐证:用微信 UA 请求时,*.app.workbuddy.host 返回 403,而 workbuddy.link 壳页、
快照源站、wj.qq.com 都是 HTTP 200 —— 服务器层面全通,弹提示的是微信客户端。
所以:能不能直开,开关在微信手里且会变;今天能开不代表明天能开,更不代表每个人手机上都能开。
结论 → 按场景分流:
- 微信是主要渠道(转发好友/群/朋友圈)→ 走路线 A:腾讯问卷(收集需求)
或 路线 C:公众号文章(要一条能直开的链接)。
两者都是微信原生域,链接/图片在微信内直接打开、不跳浏览器。 - 浏览器 / 电脑 / 邮件签名 / 简历是主渠道 → 走路线 B:内置表单 + Flask 后端,
数据存在自己服务器上。 - 两个都要(大多数情况)→ A + C 为主 + B 为辅,多条通道并行,互不冲突。
> 别向用户承诺"微信里发链接点开就是最新页面"——做不到,这是平台网关策略,改代码没用。
> 也别在"微信里能不能打开"这件事上反复试错(换静态/换后端/换长短链都没用),直接换入口。
路线 A:腾讯问卷(微信内可用,推荐)
- 打开 wj.qq.com → 微信扫码登录 → 「创建问卷」→「空白创建」
- 标题填:合作意向登记
- 加 4 道题(单行/多行文本):姓名(必填)、手机号/微信(必填)、公司名称(选填)、想聊点什么(多行,选填)
- 「设置」→ 打开新答卷提醒 / 微信提醒,需关注「腾讯问卷」公众号才能收到推送
- 发布 → 复制问卷链接
- 把链接填进
index.html的【问卷链接】占位符(共 2 处:Hero 按钮 + 底部工单区)
微信端最稳的分享形态:把链接做成二维码海报图。
用户在微信里直接发图,对方点开就是完整名片(不跳浏览器),长按二维码即可填写需求。
用 assets/make_poster.py 生成即可(见下方模板清单)。
路线 B:内置表单 + Flask 后端(仅浏览器/电脑)
- 复制
assets/app.py和assets/requirements.txt到站点目录 - 必须改
app.py里的API_KEY默认值(默认CHANGE-ME-TO-A-RANDOM-KEY),
否则任何人都能拉走客户数据 - 接口:
POST /api/lead、GET /api/leads?key=KEY、GET /api/leads/summary?key=KEY、
POST /api/leads/notify?key=KEY - 发布时
language: python、startCmd: python3 app.py - ⚠️ 微信内不可用,别把这条路当成微信方案交付
路线 C:公众号文章(微信内唯一能 100% 直开的「链接」形态)
当用户坚持要"一条链接、微信里点开就能看"时,这是唯一可行的解。
mp.weixin.qq.com 是微信自己的域,转发到微信里是带封面的文章卡片,点开原生直开。
- 复制
assets/wechat_article_card.html,替换【】占位符,浏览器打开全选复制 → 粘贴进公众号编辑器 - 关键认知(一定要告诉用户,否则他会抗拒"发文章"):
公众号的「发表」与「群发」是分开的。发表时不勾选群发通知,文章照样生成链接,
但粉丝一条推送都收不到,也不占用每天 1 次的群发额度。
这正是"只想转发给个人好友、不想打扰粉丝"的正确做法。 - 底部「原文链接」填腾讯问卷地址 → 客户点文末「阅读原文」即可留需求,全程在微信内
- 发表后在文章列表点「…」复制链接,转发给好友
如果用户连文章都不想发 → 走路线 A 的二维码海报图(make_poster.py):
微信里直接发图,点开即看完整名片,长按码填需求,零依赖、永远最新。
快速流程
第 1 步:套模板填内容
- 复制
assets/index.html到项目目录 - 把所有【】占位符替换成真实内容(Ctrl+F 搜「【」逐个改)
- 必改:姓名、身份标签、主标题两行、一句话介绍、4 组数据、两块业务、微信号、邮箱、问卷链接
- 改配色:改
:root里的--navy(藏蓝主色)和--gold(沉金点缀)即可
第 2 步:做封面图(决定分享卡片好不好看)
- 放一张
cover.jpg,尺寸 1200×630,体积必须 ≤100KB - 图太大(300KB 以上)微信爬虫抓不到 → 分享出去只剩一串裸链接
- 直接跑脚本生成(
Pillow+ 系统中文字体,中文不糊,约 30KB):
bash python make_cover.py 张三 "增长顾问" "坐标北京 · 服务全国" "帮企业把增长做实"
输出同目录cover.jpg,超 100KB 会告警
第 3 步:发布上线
- 用
workbuddy_sites_deploy - 纯静态(推荐,配合路线 A):
language: static - 带后端(路线 B):
language: python、startCmd: python3 app.py - 首次发布填
domainPrefix(小写英文,会成为网址前缀);之后更新用
updateExistingApp: true,网址不变 - 拿到链接后,把
index.html里og:url/og:image的【发布后的网址】替换成真实网址,
再重新发布一次,微信分享卡片才会生效
第 4 步:配每日邮件兜底(可选,但能防漏客)
后端不自己发信,交给定时任务 + WorkBuddy 智能体邮箱(agent-mail):
1. 若走路线 B:GET /api/leads?key=KEY,count=0 就结束;否则 GET /api/leads/summary?key=KEY 拿 html
2. 用 agent-mail 发到主人邮箱,body_format: HTML
3. 若走路线 B 且发出了邮件:POST /api/leads/notify?key=KEY,body {"ids":[...]},
标记已发防止第二天重复
4. 若走路线 A:邮件正文改为「提醒去腾讯问卷后台看昨日新答卷」,附后台直达链接 https://wj.qq.com/
- 建定时任务:scheduleType: recurring,rrule: FREQ=DAILY;BYHOUR=9;BYMINUTE=0
- 把完整 URL 和 key 写进任务 prompt 里——定时任务每次是全新会话,不会记得这次对话
关键坑(照着避)
- 微信里打不开直链:
*.app.workbuddy.host对微信 UA 返回 403,改静态/改后端都没用,
是平台网关策略。微信场景必须换入口(腾讯问卷 / 发图片)。 - 短链是旧快照:
workbuddy.link/p/xxx绑定首次发布版本,重新部署不会更新。
别拿它当"更新后的分享链接"交付给用户。 - 「复制链接」出来的文案带应用名:客户端拼的
【WorkBuddy】<应用名> + 短链,
应用名来自部署时的appName,想改文案就改appName后重新部署。 - 分享卡片不是链接文本能控制的:卡片标题取
og:title,图片取og:image。
想让卡片显示「XX名片」就把og:title写成「XX名片」——改裸链接文字本身没有意义,
微信只认 OG 标签。封面图必须小(≤100KB)且公网可访问,否则卡片只剩裸链接。 - 微信 OG 有缓存:改完 OG 标签重新发布后,第一次分享可能还是旧卡片,
等几分钟或换一条新消息再发。 - 免费企业邮常没有 SMTP 授权码(如网易免费企业邮):
不要走 SMTP 直发(会让用户交出邮箱密码),直接用智能体邮箱中转。 - agent-mail 首封要确认:第一次发信返回 428 +
confirmation_token,带上该 token 重发即可;
定时任务首次自动跑可能也要用户点一次确认。 - 发了必须标记:不调 notify 标记,第二天会重复发同一批工单。
- 改完代码要重新发布:
updateExistingApp: true,链接不变,可放心迭代。 - Git-Bash 路径坑:Windows 下用 Bash 跑 Python 用正斜杠(
/c/Users/...),
/tmp常不存在,临时文件写项目目录;中文路径在 Bash 里传参易乱码,改用 PowerShell,
且 PowerShell 不回显 stdout,需把输出写文件再读。
把本技能分享给别人 / 上架市场 / 能不能收费
- 本技能是本机用户级技能,只在这台电脑可见,不会出现在 WorkBuddy 推荐市场,别人搜不到。
- 发给个人:把整个
personal-site-ticket文件夹(或打包的 zip)发给对方,
解压到~/.workbuddy/skills/(Windows:C:\Users\<用户名>\.workbuddy\skills\personal-site-ticket),
新开一个会话即可生效。
上架 skillhub.cn(让所有人搜到)
- 浏览器打开 skillhub.cn → 登录 → 左侧「发布团队 Skill」
- 上传包含
SKILL.md的 zip(单次 ≤10MB) - 填 Slug(唯一标识,小写字母/数字/连字符,提交后不可修改,建议
personal-site-ticket)、
显示名称(建议「个人网站加入工单」)、图标、描述、版本号、分类(如「办公效率」) - 安全审核:内容合规过滤 + 漏洞扫描 + 模型安全评估三线并行,1–3 个工作日
- 通过后在技能列表点「上架」→ 任何 WorkBuddy 用户搜「个人网站」即可安装
能不能收费(能,但有门槛)
SkillHub 支持两种计费模式:
| 模式 | 门槛 | 说明 |
|---|---|---|
| 免费 | 实名认证后即可,无需商户入驻 | 0 元,所有用户免费用 |
| 按调用量计费(Pay Skill) | 需完成商户入驻:企业认证 + 绑定微信支付账户 | 自主设单价(元/次),用户每次调用按次结算,微信支付 AI 专属卡扣款 |
现实建议(务实):
- 纯模板型技能(本技能属于这类——产出 HTML/Python 文件,不依赖后端)
更适合免费发布:SkillHub 自己的定位是"普通 Skill 源文件可下载独立运行,容易被抄袭复用",
付费说服力弱;免费反而能带来下载量、案例和個人品牌,对猎头/顾问这类靠信任成交的职业更划算。 - 真要收费,就得让它依赖你的后端服务(例如代托管工单接口、代发汇总邮件),
做成"脱离你的服务就跑不起来"的 Pay Skill,才有付费理由;并参考同类定价
(平台上常见 0.3–2 元/次),定价过高会明显影响通过率和转化。 - 发布前建议准备 3 个真实使用场景作为效果案例,能显著提高审核通过率和安装转化。
附带的模板文件
assets/index.html— 商务藏蓝+沉金单页模板,手机自适应,占位符已标注;
默认走路线 A(问卷按钮),路线 B 表单以注释形式附在工单区,取消注释即可启用assets/wechat_article_card.html— 路线 C 公众号版名片:全内联样式 + table 布局,
浏览器打开全选复制粘贴进公众号编辑器即可,微信内 100% 直开(这是唯一能直开的链接形态)assets/app.py— Flask 后端(路线 B 用):工单存取 + 汇总 HTML 生成 + 已发标记assets/make_cover.py— 封面图生成脚本(Pillow + 系统中文字体,自动压缩到 100KB 内)assets/make_poster.py— 名片二维码海报生成脚本(微信里发图用,长按扫码填问卷)assets/requirements.txt— 路线 B 只需Flask>=3.0(不要加 APScheduler,发信交给定时任务)