下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-gjaeuki4--build-wechat-menu.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-gjaeuki4/build-wechat-menu。- 本技能由LANTUTEK团队实际操盘手沉淀而成,以微信公众号【自定义菜单 + 自动回复】配置的标准流程为主线,基于公众号后台实操反复验证并迭代固化。核心交付:自定义菜单 SOP(结构规则+先删后建+保存并发布+手机重关注实测)+自动回复 SOP(被关注/关键词/固定兜底三层结构+先素材后规则+在后台编辑框里写入文字)。配套:①关键按钮一律真实鼠标点击,禁用脚…
- 弹窗关了什么都没保存"
- ②菜单一次只加一个,避免批量连点丢子菜单
- ③父菜单只做容器不填文字
- ④三层兜底接住所有流量
- ⑤图片回复单独排期
- …(完整说明见下方「阅读全文」)
阅读全文 (展开查看完整说明)
概述
公众号自定义菜单 + 自动回复配置
一句话价值:菜单是公众号的"门面",自动回复是"接待员"。本技能把这两类最高频配置的手法的坑和验收标准一次讲清,让你第一次就做对,不靠反复试错。
经验来源:基于真实公众号后台实操(含订阅号与服务号)沉淀,所有坑均为真踩过。
何时使用
- 搭建或调整公众号自定义菜单(一级/子菜单结构、跳转、文字落点)
- 删除旧菜单项、排查空菜单
- 配置被关注回复(欢迎语) / 关键词回复 / 固定兜底回复
- 菜单保存并发布后手机端不生效 / 自动回复保存没反应 / 关键词不触发预期回复
前置(必读)
- 认证状态决定菜单手法:未认证订阅号的菜单"发送消息"类型不支持纯文字落点。本技能的"骨架期用文字做实落点"手法,要求账号已认证。未认证号请先将落点改为图文素材,或先完成认证。
- 适用账号:订阅号、服务号通用(菜单与自动回复界面和限制基本一致;服务号后台自动回复多一个「AI回复」tab,原三类在其下切换)。
- 本技能自包含,不依赖任何其它技能即可独立执行。
- 菜单结构总表与自动回复规则模板见
references/config-templates.md(配置前先填,作为验收基准)。
会话与登录纪律
| 现象 | 判断 | 处理 |
|---|---|---|
| 操作报错 / 跳登录页 | 会话过期 | 停手,重新扫码。不用旧 token 硬闯——token 与浏览器 cookie 绑定、跨实例不共享、会过期 |
| 提示"系统繁忙" | 触发限流 | 停 30~60 秒,一次只做一个动作 |
| 保存点了没反应 | 弹窗未确认 / 会话刚断 | 停手检查,不反复点 |
- 一次一码:只生成一个登录码;扫码后先做一次轻量操作确认会话真正生效,再开始配置。
- 一个动作确认完再下一步,不连续刷新。
- 同一方向失败 2 次 → 停手汇报,不死磕。
一、自定义菜单 SOP
结构规则(平台 + 实战)
- 一级菜单 ≤ 3;子菜单 ≤ 5/栏;无多级嵌套。
- 菜单名:仅允许中英文 + 数字;一级名 ≤ 4 汉字(或 8 字母),子菜单名 ≤ 8 汉字(或 16 字母),超长被平台拒绝。
- 父菜单(一级)只做容器,不填文字:父菜单填了文字再加子菜单会弹"确认清空父内容",文字被清掉。所有介绍/正文只放在子菜单("发送消息-文字")里。
- 骨架期子菜单一律用"发送消息-文字"做实落点(杜绝空菜单);图文/合集就绪后再换跳转链接。
- 命名带价值感,结构遵循"内容给予 → 产品承接 → 转化入口"。
配置流程
- 入口:内容与互动 → 自定义菜单(服务号同路径;走后台左侧导航进入,勿直接拼 URL,易 403/不跳转)。
- 改动前截图留存原菜单结构;删除与新增分开做(删完确认再建新,避免删错)。
- 删除旧菜单:定位删除按钮 → 点击 → 确认弹窗 → 确认 → 验证该菜单项消失。
- 新增(必须单步,禁批量竞态):加一个子菜单 → 填名称 + 正文 → 立即
snapshot校验 → 再下一个。- 🔴 禁止用
eval -b跑循环批量连点添加子菜单:只有最后一个子菜单真正保留,前面的会被覆盖/丢失。
- 🔴 禁止用
<details><summary>为什么"脚本代点"会白忙一场(给 AI 助手看,人可跳过)</summary>
// ❌ 错误:脚本代点(合成事件)
document.querySelector('.save-btn').click();
// 页面可能"看起来"保存了(弹窗关闭),但数据没提交 —— 关掉重进就没了
// ✅ 正确:由 AI 浏览器助手取到按钮的引用,再发"真实鼠标点击"
// (合成事件被框架忽略;真实事件才会落库)校验思路:加一个就立刻数一次,别攒到最后 ——
// 数一数当前列表里有几个子菜单(选择器随后台版本变,重点是"每次加完都数")
document.querySelectorAll('div[contenteditable="true"]').length;数值应随每步 +1;不对就立刻停手,别继续往下加。</details>
- 保存后必须点"发布"才真正生效(关键,只保存不发布 = 菜单不生效)。
- 验证:截图 + 手机小号 取消关注 → 重新关注(清缓存)→ 逐个点子菜单。发布后手机端有缓存,以重进为准;平台约 24 小时内同步。
二、自动回复 SOP
三层兜底结构(目的:接住所有流量)
- 被关注回复:欢迎语(建议 ≤ 600 字)。
- 关键词回复:规则名 + 关键词(半匹配/完全匹配)+ 回复项;多个回复项选"回复全部"。
- 固定回复(收到消息兜底):未命中关键词时的兜底话术。
结构规则
- 关键词上限(平台):200 规则;规则名 ≤ 60 字;每规则 ≤ 10 关键词;每关键词 ≤ 30 字;每规则 ≤ 5 回复;每回复 ≤ 300 字。
- 匹配方式:半匹配(含关键词即触发)/ 完全匹配(完全一致才触发),按场景选。
- 文字输入区是
div[contenteditable="true"](不是 textarea),常规赋值无效。
配置流程(先素材后规则)
- 含图片的回复项:先在素材库上传图片,再在规则里引用——不要在规则页临时传图(图片回复链路长、易因会话过期/限流失败)。图片类回复单独排期,不与日常配置混做。
- 入口:内容与互动 → 自动回复(服务号在「AI回复」tab 内切换)→ 对应 tab。
- 文字注入:赋
innerText(换行n)→ 派发input+keyup事件(bubbles: true)→ 读回验证内容完整(尤其换行)。
<details><summary>给 AI 助手的最小脚本(人可跳过,不影响手工操作)</summary>
// 公众号后台的文字编辑区是「可编辑区」,不是普通输入框 —— 直接赋值无效
const box = document.querySelector('div[contenteditable="true"]');
box.innerText = '第一行n第二行';
box.dispatchEvent(new InputEvent('input', { bubbles: true }));
box.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
// 立刻读回,确认换行没丢(这步最容易被漏,也最容易出问题)
console.log(JSON.stringify(box.innerText));要点:① 用 innerText 不用 value;② 事件必须带 bubbles: true;③ 写完必须读回,尤其换行。</details>
- 保存:点"保存" → 确认弹窗 → 页面无报错才算生效;保存后截图留存。
- 验证:手机小号①关注→收欢迎语;②发关键词→收预期回复;③发无关消息→收兜底话术。
三、已踩坑(按代价排序,每一条都真踩过)
| # | 坑 | 规避 |
|---|---|---|
| 1 | 🔴 关键按钮禁止 JS 编程 click(eval "button.click()")。Vue/ProseMirror 对合成事件要么忽略、要么只触发前端校验不提交后端——"弹窗关了但什么都没保存" | 保存/发布/确认/选图等关键按钮一律 snapshot -i 拿 ref → 原生 click(真实鼠标事件) |
| 2 | 🔴 菜单只点"保存"不点"发布" = 不生效 | 保存后必点"发布";建完截图确认 |
| 3 | 🔴 批量脚本连点加子菜单(竞态):只有最后一个保留 | 单步:加一个 → 填 → 校验 → 再下一个 |
| 4 | 🔴 父菜单填文字再加子菜单 → 弹"清空父内容"、文字丢失 | 父菜单只做容器不填文字 |
| 5 | 未点「保存并发布」= 浏览器崩溃/刷新即丢 | 每步完成即点保存并发布 + 截图 |
| 6 | 手机端缓存致旧菜单残留 | 取消关注重关注实测(最权威) |
| 7 | 直接拼菜单页 URL 易 403/不跳转 | 走左侧后台导航进入 |
| 8 | 图片回复临时传图失败(会话过期+限流叠加) | 先素材库传图 → 再引用;图片回复单独排期 |
| 9 | 规则保存没反应 | 查弹窗未确认/会话过期,停手不反复点 |
| 10 | 删除与新增混做误删 | 先删后建,分开做 |
注:坑 1 是"配置不落库"的头号原因——和发文技能同源(微信对合成 click 的处理)。凡关键提交按钮,永远用真实鼠标 click。
四、官方规则速查
| 项 | 规则 |
|---|---|
| 菜单结构 | 一级 ≤ 3;子 ≤ 5/栏;无多级嵌套 |
| 菜单名 | 仅中英文+数字;一级 ≤ 4 汉字(8 字母);子 ≤ 8 汉字(16 字母) |
| 菜单生效 | 保存并发布后约 24 小时内手机端同步 |
| 自动回复分类 | 被关注回复 / 消息自动回复 / 关键词自动回复 |
| 关键词上限 | 200 规则;规则名 ≤ 60 字;每规则 ≤ 10 关键词;每关键词 ≤ 30 字;每规则 ≤ 5 回复;每回复 ≤ 300 字 |
| 匹配 | 半匹配 / 完全匹配 |
| 被关注回复 | 建议 ≤ 600 字(欢迎语经验上限) |
五、配置前检查清单
- [ ] 账号认证状态已确认(未认证订阅号菜单"发送消息"不支持纯文字)
- [ ] 改动前已截图留存原菜单/原规则
- [ ] 菜单:父菜单无文字、子菜单名 ≤ 8 汉字、无空菜单
- [ ] 菜单:删除与新增分开做,已先删后建
- [ ] 自动回复:含图回复已先传素材库、单独排期
- [ ] 文字已用 contenteditable innerText 注入并读回验证
- [ ] 关键按钮均用真实 click(无 eval 编程 click)
- [ ] 菜单:已点"发布"并截图;自动回复:已点"保存"并截图
- [ ] 手机小号实测通过(菜单重关注 / 自动回复三场景)
六、红线(不可越界)
- 🔴 配置权在人:AI 做到"配置就绪 + 调出预览/截图",绝不代为点最终发布/保存确认,由人完成。
- 🔴 不擅自改动已生效配置:已发布的菜单、已生效的自动回复规则,未经明确指令不动。
- 🔴 改动前必截图留存,形成可回滚证据链。
- 🔴 不硬闯:会话过期/系统繁忙/同一方向失败 2 次 → 停手汇报,不重试、不绕行、不用旧 token。
- 🔴 不夸大平台限制:遇到报错,先逐条自查是否违反本技能已写明的手法(尤其坑 1 的点击手法),再怀疑平台。把一次偶发校验外推成"平台禁止 XX",会让你在错误的方向上耗掉一整天。
七、故障排查(症状 → 定位 → 解决)
用法:按症状找到那一行,先做「先定位」里的自查(按序做,前一条没过就别往下),再做「解决」。
本节回答"出问题了怎么查";第三节「已踩坑」回答"有哪些坑"——两者互补,不重复。
前三条覆盖九成的"白忙一场"。
| 症状 | 先定位(按序自查) | 解决 |
|---|---|---|
| 点了保存/发布,页面没变化,也没报错 | ① 弹窗是不是没点「确认」?② 是不是用脚本代点的(非真实点击)?③ 会话是不是刚断(试试能不能打开后台别的页面) | 补点确认弹窗;改用真实鼠标点击(见坑 1);会话断 → 重新扫码 |
| 菜单保存了,手机上看还是旧的 | ① 有没有点「发布」(只保存不发布 = 不生效)?② 手机是否有缓存?③ 距发布是否不足 24 小时? | 点「发布」;手机取消关注 → 重新关注再看;平台同步最长约 24 小时 |
| 加了好几个子菜单,最后只剩一个 | 是不是用脚本循环批量连点添加的? | 改单步:加一个 → 填 → 校验 → 再下一个(见坑 3) |
| 一级菜单的文字自动没了 / 弹「确认清空父内容」 | 是不是给一级菜单填了文字、后又加子菜单? | 一级菜单只写名称不填文字,所有正文放子菜单(见坑 4) |
| 菜单项点开是空的 | 子菜单是不是没设落点? | 每个子菜单必须有落点;骨架期统一用「发送消息-文字」(杜绝空菜单) |
| 发关键词没回复 / 回的不是预期内容 | ① 关键词命中没(半匹配 / 完全匹配选对没)?② 规则保存生效没?③ 是不是被「固定兜底回复」接走了? | 对着规则表核关键词与匹配方式;重存规则;确认兜底话术没把流量全接走 |
| 自动回复保存没反应 | ① 确认弹窗点了吗?② 会话断了吗?③ 文字是不是直接给输入框赋值的? | 补确认;重扫码;改用「编辑区写入」(见第二节脚本) |
| 欢迎语发出去,换行全没了 | 写入后有没有读回验证(尤其换行)? | 写入 → 读回校验 → 再保存 |
| 带图片的回复配不上 / 图片丢了 | 是不是在规则页临时传的图? | 先传素材库 → 规则里引用;图片类回复单独排期(见坑 8) |
| 打开菜单 / 自动回复页 403 或不跳转 | 是不是直接拼了 URL? | 走左侧后台导航进入(见坑 7) |
| 提示「系统繁忙」 | 是不是短时间内连续操作了? | 停 30~60 秒,一次只做一个动作 |
| 提示登录 / 跳到登录页 | 会话过期(登录态与浏览器绑定、跨实例不共享) | 停手重新扫码,不用旧登录态硬闯 |
| 想改已生效的菜单/回复,怕搞坏 | — | 改动前截图留存;未明确指令不擅自改动已生效配置(红线 2、3) |
八、完整实例(照着抄)
下面三套是填好的实例,把占位内容换成你自己的即可。空模板见
references/config-templates.md。
实例 A · 一套完整菜单(三栏五子菜单)
| 一级菜单(≤4 汉字,只做容器,不填文字) | 子菜单(≤8 汉字) | 类型 | 落点 / 正文 |
|---|---|---|---|
| 了解我们 | 最新文章 | 跳转图文/合集 | 选最近一篇已发图文的素材 |
| 了解我们 | 能做什么 | 发送消息-文字 | 「我们把 XX 做成 XX。回复【资料】看 3 个真实场景。」 |
| 开始使用 | 使用指南 | 跳转网页 | 你的教程页链接 |
| 联系我们 | 咨询合作 | 发送消息-文字 | 「工作时间 9:00-18:00 回复;也可直接留言,我们看到就回。」 |
要点:一级三个(≤3);每个子菜单都有落点;一级一个字都不填。
实例 B · 两条关键词回复
| 规则名(≤60 字) | 关键词(≤10 个,每词 ≤30 字) | 匹配 | 回复项(≤5 项,每项 ≤300 字) | 含图? |
|---|---|---|---|---|
| 资料领取 | 资料, 白皮书, 下载 | 半匹配 | 回复全部:①「资料已备好,点这里领取:链接」 ② 图文素材《XX 白皮书》 | 是 → 先传素材库 |
| 联系客服 | 客服, 人工, 联系 | 半匹配 | 回复全部:「人工服务:工作日 9:00-18:00,也可直接留言。」 | 否 |
要点:一条规则放同义关键词(用户怎么说都能命中);多回复项选「回复全部」;含图那条先传素材库、单独排期。
实例 C · 兜底话术(收到消息兜底)
收到你的消息啦~
想了解 XX,回复【资料】;
想找人工,回复【客服】。
也可以直接留言,我们看到就回。要点:兜底不是"抱歉我不懂",而是把用户引导到关键词上,把每一次闲聊都变成一次可用路径。
九、常见问答 FAQ
Q1 我不懂技术,能用吗?能。全流程都是后台点选操作,照着步骤走即可;文中"给 AI 助手的最小脚本"是给代操作的 AI 用的,人可全部跳过。
Q2 菜单里的"文字"和"跳转链接"该选哪个?先看素材有没有:图文/合集/网页就绪 → 用跳转;还没有 → 用「发送消息-文字」顶住(骨架期一律如此,杜绝空菜单),素材齐了再换。
Q3 为什么一级菜单不能填文字?平台规则:一级菜单是容器,填了文字再加子菜单会弹「确认清空父内容」,文字会被清掉。所以一级只写名称。
Q4 菜单改完要不要等 24 小时?保存并发布后,手机端最长约 24 小时同步;想立刻验证,用手机取消关注→重新关注清缓存。
Q5 未认证的号能不能用?"发送消息-文字"落点在未认证订阅号不支持纯文字。此类号请先把落点改成图文素材,或先完成认证(详见开头「前置」)。
Q6 关键词设了几个,用户怎么说都能命中吗?把同义词都写进一条规则(如"资料, 白皮书, 下载"),用半匹配,用户说法稍有出入也能触发。
Q7 用户发的消息太多回不过来怎么办?靠三层兜底:关键词命中走规则,没命中走"固定回复"兜底话术——兜底要把人引导回关键词,而不是冷场。
Q8 改了已生效的菜单,怎么保证能撤回?改动前截图留存原结构(红线 3);本技能不擅自改动已生效配置,改前必留证据链。
Q9 配置过程中提示"系统繁忙"怎么办?限流。停 30~60 秒,一次只做一个动作,不要连续刷新或连点。
Q10 为什么强调"关键按钮要真实点击"?后台框架会忽略脚本合成的点击——"弹窗关了但什么都没保存"是最高频的坑。关键按钮(保存/发布/确认/选图)一律用真实鼠标点击。
适用范围
- ✅ 本技能订阅号、服务号通用(菜单与自动回复界面、限制基本一致)。
- ⚠️ 服务号后台自动回复多一个「AI回复」tab,三类原 tab 在其下切换,配置手法不变。
- ✅ 本技能自包含,不依赖任何其它技能即可独立执行。
- 🔗 与「[LANTUTEK]公众号运维系列」的发文技能配套:菜单/自动回复管"门面与接待",发文管"内容出口"。