Loading... 一开始注册公众号,只是想给博客多一个入口。 后来发现,个人主体的公众号,能用的接口比我想象中少:自定义菜单、订阅通知和客服主动消息都没有权限。既然不能依赖菜单和主动推送,就干脆换了个思路——把公众号当作一个可以聊天的个人服务入口。 现在的 **HDaniel Archive**,背后是一个独立运行的服务。它连接着 HDaniel Studio Blog、Daniel Calendar、Pan 网盘和 IMG 图床。用户在微信里发一句话,它判断要去哪里,再把入口或查询结果回复回来。博客、日历、网盘和图床仍然各自运行。 公众号的消息通过 HTTPS 地址 `/wechat/callback` 进入服务器,由 Nginx 转发给只监听本地端口的 Docker 容器。微信接入时会校验这个地址,之后的回调也都会验证签名。服务另有`<span>/health</span>` 健康检查地址;日志和 SQLite 数据库独立保存,迁移、排查时比较方便。 目前,首次关注和发送普通文字消息,都会收到中英双语的欢迎提示。想找具体内容,也可以直接发关键词: * “关于 / About”“博客 / Blog”“最新文章 / Latest”“全部文章 / Archive”,会返回对应的博客页面卡片; * “图床 / IMG”“轻网盘 / Pan”“日历 / Calendar”,会返回相应的服务入口; * “随便看看 / Random”,会随机抽取一篇博客文章; * “获取邀请码 / Invite”,会获取 Calendar 注册邀请码。 这些图文卡片统一使用 HDaniel Studio 的 Logo 作为缩略图。用起来没有菜单那么直观,但记住一两个词,就能从微信里找到自己的服务。 Calendar 是目前做得最完整的部分。 还没有账户的人,可以发送“获取邀请码”。公众号会向 Calendar 请求一个单次可用、有效期为 30 分钟的邀请码,并把邀请码、注册链接和 Calendar 关于页链接一起回复。邀请码由 Calendar 生成和验证,公众号不保存日历账户密码。 已有账户的人,可以登录 Calendar,在“设置 → 账户资料”里生成一个八位数字的微信绑定令牌。令牌只有一分钟有效,只能使用一次,存储时也只保留不可逆摘要。把它发给公众号后,微信 OpenID 就会与 Calendar 用户名关联起来。以后想解除关联,回复“取消绑定”“解绑”或`unbind` 即可;Calendar 账户、日历和已有日程都不会受影响。 绑定后,发送“日程查询”,就能看到当前关联的用户名、日历数量、未来 365 天的日程总数,以及最近三项安排。如果没有未来日程,公众号也会明确告诉你目前没有安排。单独发送“日程”“行程”“安排”等词,则会提示使用“日程查询”或“取消绑定”,不会误跳到 Calendar 入口。 我还加了一个一问一答的新建日程流程。发送“新建日程”“创建日程”或“添加日程”后,公众号会依次问名称、目标日历、开始和结束时间、地点、描述。日历可以用序号、名称或 ID 指定;地点和描述不需要填写时,回复“无”就行。时间格式是 **`YYMMDD HHMM - YYMMDD HHMM`**,例如 **`261022 1400 - 261022 1500`**。 所有内容填完后,它会先把日程信息完整列出来。只有回复 **`Yes`**,才会真正写入 Calendar;回复 **`No`** 或五分钟没有继续,流程就会结束。对话中的临时内容只放在 Wechat 的内存里,不写入数据库。这样即使填到一半停下来,也不会留下一条未完成的日程。 它当然还做不到我最初设想的所有事。现在这个公众号可以接收消息、被动回复,却不能可靠地在日程到点时主动给我发微信提醒。所以目前最合适的用法,是我主动打开微信问一句,让它帮我查一下或完成一次操作。如果以后换成具备订阅通知权限的认证服务号,现有的账户绑定和日程数据还能继续使用,再接上通知队列即可。 博客发布也是类似的情况:当前公众号没有草稿接口权限,我没有让服务器自动往公众号发文章,也没有把 AppSecret 塞进 Typecho 插件里。需要同步文章时,可以在浏览器中打开 Typecho 文章,用[Wechatsync](https://github.com/wechatsync/Wechatsync) 提取标题、正文和图片,送进公众号草稿箱,再人工检查封面、排版、代码块和外链后发布。多看一眼,反而更安心。 这套东西没有替代原来的任何服务,只是在它们前面加了一个随手可用的入口。当然目前的交互方式还没有到最舒服的状态,期待后面可以变得更加方便。 最后修改:2026 年 10 月 23 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果愿意的话...或许可以请我喝杯奶茶。